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

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

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,ty| (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,,,{|x,y| x[5]>y[5]})

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,y| 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 //для эл. нижней


Страница: