скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Разработка программного обеспечения

 setpos(12,(maxcol()/2)-4)

 dispout(' АТРИБУТЫ ','g+/b')

 @ 13,7 say "Имя комплекта................................" color ('W+/rg') get attrtmp color('rg+/rg,n/w')

 @ 14,7 say "Ограничение по высоте сверху в mm............" color ('W+/rg') get higttmp picture '@B 999.99' color('gr+/rg,n/w')

 @ 15,7 say "Ограничение по высоте снизу в mm............." color ('W+/rg') get higtdtmp picture '@B 999.99' color('gr+/rg,n/w')

 setcolor(cglold)

 set cursor off

 mas:={{'Атрибуты', 'Компоновка', 'Выход'},{"Редактирование атрибутов файла", "Скомпоновать файл в формате T-FLEX", "Выход в DOS"}}

 str:=MENU (mas,14,perv)

 perv=str

 str1:=10

 IF str=1 //если выбран пункт АТРИБУТЫ- запустить меню , //позволяющее изменить атрибуты

 set cursor on

 read

 set cursor off

 ELSEIF str=2 //если выбран пункт КОМПОНОВКА- запустить //процедуру анализа pdf- файла

 WSELECT(0)

 SETCOLOR('n/bg')

 PUBLIC pnow:=0,filelen,desc,bufer:=SPACE(65000),compon[0,9],nomcomp:=0

 PUBLIC kontur[0],verkont:=0,parametr

 PUBLIC errfile[0] // массив сообщений об ошибках

 CREATDB()

 wzapis:=wind(2,3,maxrow()-7,maxcol()-6,"Компоновка",5)

 higt:=higttmp

 higtd:=higtdtmp

 attr:=alltrim(attrtmp)

 CONT()

 winclose()

 wselect(wmenu)

 ELSEIF str=0 //если не выбран не один пункт

 perv=4

 ENDIF

 IF str<>3

 wselect(wmenu)

 GL()

 ENDIF

RETURN

//*****************************************************************

FUNCTION CONT() //функция анализу\ирующая pdf- файл

 PUBLIC kolkomp,koltop:=0,kolbot:=0,dx,dy //выделенме параметров эле-//ментов

 //dx,dy -поправка на 0

 desc:=FOPEN(fname)

 filelen:=FSEEK(desc,0,2)

 prflen:=filelen

 FSEEK(desc,0,0)

 CLS

 ?'ИДЕТ ПОИСК КОМПОНЕНТ...'

 not:=SEARCHCOMP(@koef) //вызов функции которая выполняет всю работу по анализу текста pdf- айла , находит имена, обозначения, габариты всех элементов, находящихся на плате и упаковывает их в виде файла базы данных

 kolkomp:=0

 IF len(not)>0

 kolkomp:=not[1]

 koltop:=not[2]

 kolbot:=not[3]

 ENDIF

 FCLOSE(desc) //закрытие pdf файла

//*****ОБРАБОТКА ПАРАМЕТРОВ У НАЙДЕННЫХ ЭЛЕМЕНТОВ****

 IF kolkomp>0

 AUTOKONTUR(kolkomp) //выделение контура платы по максимальным габаритам элементов на ней

 ENDIF

//*******ВЫБОР ВИДА ПЛАТЫ******************************

exit:=alltrim(exittmp)

CLEAR GETS

st:=1

cls

DO WHILE (st<>4) //Предлагается меню, где можно выбрать направление взгляда на плату

 cglold:=setcolor('n/rg')

 @ 9,12 CLEAR TO 11,maxcol()-13

 @ 9,12 TO 11,maxcol()-13 DOUBLE

 set cursor off

 set scoreboard off

 readexit(.F.)

 set cursor on

 @ 10,14 say "Имя получаемоемого файла......" color ('w+/rg') get exittmp picture 'NNNNN' color('gr+/gr,n/w')

 setpos(10,50)

 dispout('.frg','w+/gr')

 setcolor(cglold)

 mas:={{'Двумерная','Трехмерная ','Имя файла','Выход'},{"Создание файла вида сбоку(двумерное изображение)","Создание файла вида со стороны(трехмерное изображение)",'Изменить имя получаемоемого файла','Выход в главное меню'}}

 st:=MENU (mas,13,st)

 IF st=1

 @ 9,0 CLEAR TO maxrow(),maxcol()

 set cursor off

 TO2D(kolkomp) //пересчет точек привязки в трехмерные координаты

 PRINTINFO()

 ERRF()

 inkey(6)

 cls

 ELSEIF st=2

 @ 9,0 CLEAR TO maxrow(),maxcol()

 set cursor off

 TO3D(kolkomp) //пересчет точек привязки в трехмерные

 координаты

 PRINTINFO()

 ERRF()

 inkey(6)

 cls

 ELSEIF st=3

 set cursor on

 read

 exit:=alltrim(exittmp)

 set cursor off

 ELSEIF st=0

 st=4

 ENDIF

ENDDO

RETURN

//*****************************************************************

FUNCTION INP(dl,pods,typ) //вспомогательная функция для ввода

данных с клавиатуры

oldcol:=col()

oldrow:=row()

er:=space(maxcol()-col())

IF typ<>'n'

 FOR L=1 TO 2

 ACCEPT pods TO tmp

 IF LEN(tmp)<1

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSEIF LEN(tmp)>dl

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSE

 tmp=ALLTRIM(tmp)

 L=2

 ENDIF

 NEXT

ELSEIF typ='n'

 FOR L=1 TO 2

 ACCEPT pods TO tmp

 IF LEN(tmp)<1

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSEIF VAL(tmp)=0

 L=1

 @ oldrow+1,oldcol SAY er

 SETPOS(oldrow,oldcol)

 ELSE

 L=2

 ENDIF

 NEXT

ENDIF

RETURN tmp

 //*******печать информации о найденных элементах******

FUNCTION PRINTINFO() //функция, печатающая на экране результатысоздания TFLEX-файлов и результаты анализа

 

 SCROLL(10,0,MAXROW(),MAXCOL(),4)

 SETPOS(MAXROW()-4,0)

 ?'ДЛИНА PDF-ФАЙЛА:',prflen,' байт'

 ?'КОЛИЧЕСТВО НАЙДЕННЫХ ЭЛЕМЕНТОВ:',ALLTRIM(STR(kolkomp))

 ?'ЭЛЕМЕНТОВ НА ВЕРХНЕЙ СТОРОНЕ:',ALLTRIM(STR(koltop))

 ?'ЭЛЕМЕНТОВ НА НИЖНЕЙ СТОРОНЕ:',ALLTRIM(STR(kolbot))

RETURN

//*************************************************

FUNCTION ERRF() //функция, создающая файл ERROR.TXT и записы//вающая туда имена компонентов, на которые не //найдены габаритные размеры

IF len(errfile)<>0

desk:=fcreate('error.txt')

fwrite(desk,"Не найдены файлы:"+chr(13)+chr(10))

for k:=1 to len(errfile)

fwrite(desk,errfile[k])

fwrite(desk,chr(13)+chr(10))

next

fclose(desk)

ENDIF

RETURN

//**************************************************

FUNCTION TO3D(st0) // функция, пересчитывающая координаты и

габаритные размеры элементов в трехмерную модель

 cos30:=0.5*SQRT(3)

 cos60:=0.5

 FOR L:=1 TO st0

 compon[l,4]=compon[l,4]+dx

 compon[l,5]=compon[l,5]+dy

 compon[l,4]=compon[l,4]+cos60*compon[l,5] //пересчет координат в //3D

 compon[l,5]=compon[l,5]*cos30

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3] //для эл. нижней стороны

 ENDIF

 NEXT

 maxy:=kontur[4]

 maxx:=kontur[3]

tx[5])*(maxy-tx[5])))<(((maxx-tx[4])*(maxx-tx[4]))+((maxy-tx[5])*(maxy-ty[5])))})

tx[4])+kwad(tx[5]))>(kwad(maxx-tx[4])+kwad(tx[5]))})

 ASORT(compon,,,(tx[4]*tx[4]+(maxy*2-tx[5])*(maxy*2-tx[5]))<(ty[4]*ty[4]+(maxy*2-ty[5])*(maxy*2-ty[5])))

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 nn:=FILECR3D(kolkomp,'bot','bot')

 ??nn

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на верхней стороне:'

 nn:=FILECR3D(kolkomp,'top','top')

 ??nn

 PLATCR() //создание файла контура платы

 ENDIF

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 // массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3] //для эл. нижней стороны

 ENDIF

 compon[l,5]=compon[l,5]/cos30

 compon[l,4]=compon[l,4]-cos60*compon[l,5]

 compon[l,5]=compon[l,5]-dy

 compon[l,4]=compon[l,4]-dx

 NEXT

RETURN

//****************************************************

FUNCTION TO2D(st0)// функция, пересчитывающая координаты и //габаритные размеры элементов в двумерную //модель

 wzapis:=wind(3,4,maxrow()+2,maxcol()+3,"Двумерная компоновка",5)

 mas:={{'Спереди','Сзади ','Слева','Справа'},{"Создание файла вида спереди","Создание файла вида сзади","Создание файла вида слева","Создание файла вида справа"}}

 xkor:=4

 strel:={chr(24),chr(25),chr(26),chr(27)} //Прорисовка видов плат

 col2d:=setcolor('r+/bg')

 For k=1 To 4

 setcolor('r/bg')

 @ 5,xkor to 5+2,xkor+10

 setcolor('n/bg')

 @ 5+3,xkor-1 say '0,0'

 xkor=xkor+16

 next

 setcolor('g+/bg')

 @ 8,9 say strel[1]

 @ 4,25 say strel[2]

 @ 6,35 say strel[3]

 @ 6,63 say strel[4]

 setcolor(col2d)

 st:=MENU (mas,13,st)

IF st=1

 ASORT(compon,,,)

 FOR L:=1 TO st0

 compon[l,4]=compon[l,4]+dx

// compon[l,5]=0

// compon[l,8]=0

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3]-tlplat //для эл. нижней

 стороны

 ENDIF

 NEXT

 tkont2:=kontur[2]

 tkont4:=kontur[4]

 kontur[2]=-10

 kontur[4]=kontur[2]

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 nn:=FILECR2D(kolkomp,'top',dlin)

 ??nn

 ENDIF

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 // массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3]+tlplat //для эл. нижней

 стороны

 ENDIF

 compon[l,4]=compon[l,4]-dx

 NEXT

 kontur[2]=tkont2

 kontur[4]=tkont4

ELSEIF st=2

 TO2DZAD(st0)

ELSEIF st=3

ELSEIF st=4

ENDIF

winclose()

RETURN

//****************************************************

FUNCTION AUTOKONTUR(L1) // выделение контура платы по

 максимуму

 minY:=compon[1,5]

 maxY:=minY

 minX:=compon[1,4]

 maxX:=minX

 IF verkont=0

 PUBLIC kontur[4]

 FOR L:=2 TO L1

 IF compon[L,4]>maxX

 maxX:=compon[L,4]

 ELSEIF compon[L,4]<minX

 minX:=compon[L,4]

 ENDIF

 IF compon[L,5]>maxY

 maxY:=compon[L,5]

 ELSEIF compon[L,5]<minY

 minY:=compon[L,5]

 ENDIF

 NEXT

 kontur[1]=(minX-30)

 kontur[2]=(minY-30)

 kontur[3]=(maxX+30)

 kontur[4]=(maxY+30)

 ENDIF

 dx:=(0-kontur[1]) //вычисление поправки на ноль

 dy:=(0-kontur[2])

 kontur[1]=kontur[1]+dx //пересчет координат контура в 0 0

 kontur[3]=kontur[3]+dx

 kontur[2]=kontur[2]+dy

 kontur[4]=kontur[4]+dy

RETURN

//****************************************************

FUNCTION PLATCR() создание файла контура платы в формате TFLEX

PRIVATE fil,st1,st2,st3,st4,st5

 SCROLL(10,0,MAXROW(),MAXCOL(),1)

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла контура платы.'

 cos30:=0.5*SQRT(3)

 fil=FCREATE(exit+'plt'+'.frg')

 st1:='plata '+attr+' 1 1'+CHR(13)+CHR(10)

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 shir:=ALLTRIM(STR(kontur[4]-kontur[2]))

 st3:='x1='+ALLTRIM(str(kontur[1]))+CHR(13)+CHR(10)

 st2:='y1='+ALLTRIM(STR(kontur[2]))+CHR(13)+CHR(10)

 st4:='sh1='+shir+CHR(13)+CHR(10)

 st5:='dl1='+dlin+CHR(13)+CHR(10)

 st1:=st1+st2+st3+st4+st5+'+'+CHR(13)+CHR(10)

 err:=FWRITE(fil,st1)

 IF err<>LEN(st1)

 ?'Ошибка при записи файла'

 ELSE

 ??' OK'

 ENDIF

 FCLOSE(fil)

RETURN

///***************************************************

FUNCTION CREATDBF(nom2)//функция создающая пустую базу  данных

 PUBLIC nfill1:='COMP', nfill2:='SIDE', nfill3:='attr', nfill4:="X",nfill5:="Y"

 PRIVATE struct [5,4],nom

 struct[1,1]=nfill1

 struct[1,2]="C"

 struct[1,3]=18

 struct[1,4]=0

 struct[2,1]=nfill2

 struct[2,2]="C"

 struct[2,3]=5

 struct[2,4]=0

 struct[3,1]=nfill3

 struct[3,2]="N"

 struct[3,3]=10

 struct[3,4]=0

 struct[4,1]=nfill4

 struct[4,2]="N"

 struct[4,3]=10

 struct[4,4]=5

 struct[5,1]=nfill5

 struct[5,2]="N"

 struct[5,3]=10

 struct[5,4]=5

 parametr:=exit

 DBCREATE(parametr,struct) //создание базы данных

 USE

 USE &parametr //открытие б.д.

FOR nom=1 TO nom2

 APPEND BLANK

 REPLACE &nfill1 WITH compon[nom,1]

 REPLACE &nfill2 WITH compon[nom,2]

 REPLACE &nfill3 WITH compon[nom,3]

 REPLACE &nfill4 WITH compon[nom,4]

 REPLACE &nfill5 WITH compon[nom,5]

NEXT

 USE //закрытие б.д.

RETURN

//***************************************************************

FUNCTION TO2DZAD(st0) // функция, пересчитывающая координаты и  габаритные размеры элементов в

 двумерную модель вида сзади

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 ASORT(compon,,,x[5]<y[5])

 FOR L:=1 TO st0

 compon[l,4]=kontur[3]-(compon[l,4]+dx)-kontur[1]+compon[l,7]

IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]-compon[L,3]-tlplat //для эл. нижней

 стороны

 ENDIF

 NEXT

 tkont2:=kontur[2]

 tkont4:=kontur[4]

 kontur[2]=-10

 kontur[4]=kontur[2]

 //*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************

 IF kolkomp>0

 SETPOS(MAXROW()-1,0)

 ?'Идет создание файла элементов на нижней стороне:'

 dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))

 nn:=FILECR2D(kolkomp,'top',dlin)

 ??nn

 ENDIF

 kontur[2]=tkont2

 kontur[4]=tkont4

 FOR L:=1 TO st0 //обратный пересчет координат для приведения

 массива габаритов в исходный вид

 IF compon[L,2]='bot'

 compon[L,5]=compon[L,5]+compon[L,3]+tlplat //для эл. Нижней

 стороны

 ENDIF

 compon[l,4]=-compon[l,4]+kontur[3]-kontur[1]+compon[l,7]

 compon[l,4]=compon[l,4]-dx

 NEXT

RETURN

//***************************************************************

FUNCTION kwad(argum) //функция возведения в квадрат

newarg:=argum*argum

RETURN newarg

//****************************************************

//подключение файлов с вспомогательными программами

#include 'CH\ssear.ch'

#include 'CH\swind.ch'

#include 'CH\smenu.ch'

#include 'CH\sfilcr3d.ch'

#include 'CH\sfilcr2d.ch'

4.Файл ssear.prg содержит в себе текст подпрограммы, которая выполняет весь анализ pdf файла, находит имена, габариты, и координаты всех элементов, содержащихся в этом pdf файле, а так же ищет для всех вновь встреченных элементов их преобразовнные prt- файлы, берет оттуда габариты и помещает их в базу данных габаритов элементов (файл gabarits.dbf):

FUNCTION SEARCHCOMP(koef)

lastseek:=0

olsear:=setcolor('n/gb')

set cursor off

//******** Выделение элементов из pdf-файла и занесение их в массив compon[0,9] *****

// compon[n,1]-название элемента(строка)

// compon[n,2]-сторона установки('top' или 'bot')

// compon[n,3]-высота элемента(число)

// compon[n,4]-координата х-точки привязки(число)

// compon[n,5]-координата у-точки привязки(цифра)

// compon[n,6]-поворот элемента(число от 0 до 3)

// compon[n,7]-ширина элем.(число)

// compon[n,8]-длина элем.(число)

// compon[n,9]-обозначение элемента(строка)

tmz1:=SEAR()

setcolor(olsear)

RETURN tmz1

FUNCTION INSERTCOMP() //выделение параметров элементов из   строки текста

USE 'gabarits.dbf' //открытие базы данных с размерами элементов

 FOR L=1 TO LEN(compon) //выделение координат точки привязки

  элемента

 IF compon[L,1]=NIL

 L=LEN(compon)

 kolkomp:=L-1

 ELSE

 kolkomp:=len(compon)

 str2=ALLTRIM(compon[l,4])

 IF compon[l,2]<>'bot'

 koltop=koltop+1

 ELSEIF compon[l,2]='bot'

 kolbot=kolbot+1

 ENDIF

 p1=At(' ',str2)

 compon[l,4]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение х точки  привязки

 str2=LTRIM(SUBSTR(str2,p1,30))

 p1=At(' ',str2)

 IF p1=0

 p1=AT('}',str2)

 ENDIF

 compon[l,5]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение у точки  привязки

Страницы: 1, 2, 3, 4, 5


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.