RSS    

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

 стороны

 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 //выделение у точки  привязки

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

 st0:=compon[l,1]+compon[l,2]+' X='+STR(compon[l,4])+' Y='+STR(compon[l,5])+' Ro='+str(compon[l,6])

 gab:=GABARIT(compon[L,1],L) //вызов данных о размерах элемента

ENDIF

 NEXT

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

RETURN {kolkomp,koltop,kolbot}

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

FUNCTION GABARIT(st0,nn) // определение габаритов элемента по его  имени

PRIVATE naiden:=0,gabar:={0,0,0} //по заданному имени элемента

 возвращает массив из 3 чисел  /ширина/длина/высота/

 WHILE naiden=0

 LOCATE FOR name=st0+SPACE(10-LEN(st0))

 IF FOUND()=.T.

 gabar[1]:=SHIR*koef

 gabar[2]:=DLIN*koef

 IF compon[nn,3]=0

 compon[nn,3]=Vis*koef

 IF Vis=0

 compon[nn,3]=90*koef

 ENDIF

 ENDIF

 EXIT

 ELSE

 gabar[1]=0

 gabar[2]=0

 gabar[3]=0

 hcomp:=0

 dat:=POISK(st0) //поиск данных о новом элементе и занесение его

 // в базу

 IF VALTYPE(dat)<>'C'

 APPEND BLANK

 REPLACE NAME WITH st0

 REPLACE SHIR WITH gabar[1]/koef

 REPLACE DLIN WITH gabar[2]/koef

 REPLACE VIS WITH hcomp/koef

 REPLACE X WITH dat[1]/koef

 REPLACE Y WITH dat[2]/koef

 gabar[1]:=SHIR*koef

 gabar[2]:=DLIN*koef

 IF compon[nn,3]=0

 compon[nn,3]=Vis*koef

 ENDIF

 ELSE

 EXIT

 ENDIF

 ENDIF

 ENDDO

ROT(X*koef,Y*koef,gabar[1],gabar[2],nn)

RETURN gabar

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

FUNCTION ROT(a,b,shc,dlc,L)//функция учитывающая поворот элемента относительно оси и производящая соответствующий пересчет его координат

 IF compon[L,6]=0 //учет поворота элемента

 IF compon[L,2]='bot'

 compon[L,4]=compon[L,4]+shc-a

 compon[L,5]=compon[L,5]-b

 ELSE

 compon[L,4]=compon[L,4]+a

 compon[L,5]=compon[L,5]-b

 ENDIF

 compon[L,7]=shc

 compon[L,8]=dlc

 ELSEIF compon[L,6]=1

 IF compon[L,2]='bot'

 compon[L,4]=compon[L,4]+b

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9


Новости


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

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

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.