В текущей версии интерпретатора поддерживаются:
Операторы присваивания и вызова [один оператор в строке].
Объявление составных построений [sub ... end sub].
Вызов составных построений в других составных построениях.
Выполнение циклов [for ... end for].
Измерители, элементы оформления [линии-выноски, размерные знаки, штриховки, заливки, стрелки].
Вывод пространственных координат точек [Z, !cout3D].
Не поддерживаются:
Вложенные операторы [ sub1 (sub2 (...)) ].
Вложенные циклы [for ... for ... end for ... end for].
Условный оператор [!if].
Списки.
Объектно-ориентированные объявления [операторы new и .].
Модификаторы стиля [через :].
Специальные символы
(Специальные символы: αβγδεζηθικλμνξοπρστυφχψω ∀∃∈∉∋∩∪∞∅°∠ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ≅≈≠≡⊂⊃⊄⊥)
Программа
PSIZE=1.1 [x12,O] = cs12 (-80,40) Ot = pxy(-80,-50:O_t) sub p4d(x,y,z,t:name) v = @vrd(O,x,true) h = @hrd(O,y,true) Ay = pab(v,h:{name}1,-5,12) h = @hrd(O,z) Az = pab(v,h:{name}2,-5,-6) h = @hrd(Ot,t) At = pab(v,h:{name}_t,-3,10) !erase(v,h) style(At,Ay:,#09f:,#f09) ret(Ay,Az,At) end sub [Qy,Qz,Qt]= p4d(60,40,0,0:Q) [Dy,Dz,Dt]= p4d(60,40,65,0:D) [Sy,Sz,St]= p4d(25,20,25,55:S) !erase(Qy,Qt) Qy = Dy //Dy = Sy //Qz=Sz Qt=Dt cap(Qy, Q_1=D_1,-8,+9) //cap(Sz, Q_2=S_2,-10,+10) cap(Dt, Q_t=D_t,-10,+9) cap(Qz, _, -4,+9) cap(Dz, _, -12, +4) c1 = ccx(Qy,25:thin) Cly = psp(c1,0.5:CROSS,black) h = @hr(Ot) v = @vr(Cly) Clz = pab(v,x12:CROSS,black) Clt = pab(v,h:CROSS,black) Cry = psp(c1,0:CROSS,black) v = @vr(Cry) Crz = pab(v,x12:CROSS,black) Crt = pab(v,h:CROSS,black) //ls1 = ls(St,Crt) //ls2 = ls(St,Clt) //ls3 = ls(Dz,Crz) //ls4 = ls(Dz,Clz) ls41 = ls(Dz,Sz) //ls42 = ls(Sz,Crz) //ls43 = ls(Sz,Clz) ct = ls(Crt,Clt) ls5 = ls(Cly,Clt) ls6 = ls(Cry,Crt) zero = @pxy(0,0) sub len (name1,name2) //!cout(name1,name2,{name1}t, {name2}t) Ry = mdy({name1}y, {name2}y) Rz = mdy({name1}z, {name2}z) s = @ls({name1}t, {name2}t) p = @soa(s,{name1}t:true,thin) s = @rd(s,Ry) X = @pab(s,p:CROSS) ls12 = @ls(X,{name1}t) ls2 = @ls(X,{name2}t) p = @soa(ls2,X:true,thin) s = @rd(ls2,Rz) Az = @pab(s,p) ls23 = @ls(X,Az) ls1 = @ls(Az,{name2}t) R = md(Az,{name2}t) !erase(Ry,Rz,s,p,X,ls12,ls2,Az,ls23,ls1) ret(R) end sub sub len2(name1,name2) Ry = mdy({name1}y, {name2}y) s = sab({name1}z, {name2}z:true,dashed) p = soa(s,{name1}z:true,dashed) //!cout(name1,name2,{name1}z, {name2}z,Ry,s,p) s = @rd(s,Ry) Ar = @pab(s,p) lcs1 = @ls(Ar, {name2}z) lcs2 = @ls({name1}z, Ar) R = md(Ar,{name2}z) !erase(Ry,s,p,Ar,lcs1,lcs2) ret(R) end sub sub p4th (A1,ra:B1,rb:C1,rc:dAB,dBC,dAC) QA = pxy(90,0:CROSS,red) QB = pxy(90,dAB:CROSS,red) c1 = @ccx(QA,dAC) c2 = @ccx(QB,dBC) [QC,_] = p2c(c1,c2:CROSS,red) c11 = ccx(QA,ra:helper) c21 = ccx(QB,rb:helper) c31 = ccx(QC,rc:helper) [X1,X2] = p2c(c11,c21) [Y1,Y2] = p2c(c11,c31) a = sab(X1,X2:false,helper) b = sab(Y1,Y2:false,helper) T = pab(a,b:CROSS,yellow) t = sab(QA,T:true,thin) o = soa(t,T:true,thin) [Z1,Z2] = pac(o,c11:CROSS,black:CROSS,black) R = md(Z1,T) tr = traff(QA,QB,QC:A1,B1,C1) TS = trobj(tr,T) !erase(QA,QB,QC,c1,c2,c11,c21,c31,X1,X2,Y1,Y2,a,b,T,t,o,Z1,Z2,tr) ret(TS,R) end sub sub edged(R1,R2) ls2 = ls(SR1,R1) ls3 = ls(DR1,R1) ls4 = ls(SR2,R2) end sub sub placed (N2,Q1,d) a = @sab(SR2,N2) v = @vr(Q1) Q2 = @pab(a,v:CROSS,yellow) o = @soa(a,Q2) r = @rd(a,d,true) // R2 = @pab(o,r) v = @vr(R2) h = @hr(Q1) R1 = @pab(v,h) style(R1,R2:,darkcyan) ls1 = ls(N2,R2) edged(R1,R2) ret(R1,R2) end sub sub edgeq(name) ls1=ls({name}y,Sy) ls2=ls({name}z,Sz) ls3=ls({name}z,Dz) ls4=ls({name}t,St) end sub Ay = psp(c1,0:CROSS, silver) Az = Crz At = Crt By = psp(c1,0.02: CROSS, magenta) v = vr(By) Bz = pab(v,x12: CROSS,magenta) Bt = pab(v,h:CROSS,megenta) edgeq(A) edgeq(B) // нат.величина тр-ка DAB AD = md(Dz,Crz) AB = md(Ay,By) BD = len2(B,D) AS = len(S,A) BS = len(S,B) DS = len(D,S) //!cout(AB,AD,BD,AS,BS,DS) k = sxy(80,0,100,20:true,thin:k,-20,-5) sub p3rd (A1, A2) h = @hr(A1) x = @pab(h,k:CROSS,silver) h = @hr(A2) v = @vr(x) A3 = pab(v,h) ls1 = ls(A1,x) ls2 = ls(A2,A3) ls3 = ls(A3,x) !erase(v,h,x) ret(A3) end sub SR1 = pxy(0,0:S^R_1,-13,2) v = vr(SR1) hr = hrd(SR1,DS,true) DR1 = pab(v,hr:D^R_1,-8,+12) cx1 = @ccx(SR1,AS) cx2 = @ccx(DR1,AD) [_,AR1]=p2c(cx1,cx2:O_) hr = @hrd(SR1,25) SR2=pab(v,hr:S^R_2=D^R_2,-10,+12) DR2=SR2 SR3 = p3rd(SR1,SR2) DR3 = p3rd(DR1,DR2) v=vr(AR1) AR2=pab(v,hr:O_) edged(AR1,AR2) [BR1,d]=p4th(SR1,BS:DR1,BD:AR1,AB:DS,AD,AS) AR3 = p3rd(AR1,AR2) style(AR3:,darkcyan) //hr=@hrd(SR2,d) //v=vr(BR1) //BR2=pab(v,hr:1) [BR1,BR2]=placed(AR2,BR1,d) BR3 = p3rd(BR1,BR2) style(BR3:,darkcyan) lsqrb = ls(SR3,BR3) lsglb = ls(DR3,BR3) edgb = sab(AR3,BR3:false,thin) // достроить до тетр-ра SDAB Ay = By Az = Bz At = Bt AR1 = BR1 AR2 = BR2 AR3 = BR3 AD = BD AS = BS for (24) i in (0.025:1] // старый тетр-р SDAB // общая грань SDA K$y = @psp(c1,i: CROSS, olive) //cap(K$y, $,1,+3) v = @vr(K$y) K$z = @pab(v,x12: CROSS, olive) K$t = @pab(v,h: CROSS,olive) edgeq(K$) ls7$ = ls(K$y,K$t) // новый тетр-р SDK$A KD = len2(D,K$) //!cout(KD) KS = len(S,K$) //!cout(KS) AK = md(Ay,K$y) !cout(KD,KS,AK) [QR1,d]=p4th(SR1,KS:DR1,KD:AR1,AK:DS,AD,AS) [QR,QR2]=placed(AR2,QR1,d) lsq$=sab(AR1,QR:false,thin) !erase(QR1) QR1=QR QR3 = p3rd(QR1,QR2) style(QR3:,darkcyan) lsqr$ = ls(SR3,QR3) lsgl$ = ls(DR3,QR3) edg$ = sab(AR3,QR3:false,thin) Ay = K$y Az = K$z At = K$t AR1 = QR1 AR2 = QR2 AR3 = QR3 AD = KD AS = KS end for
Графические команды
-- Точки
point = PXY (X, Y [,W]: [caption, cap-X, cap-Y])
point = PAB (line-a, line-b: [caption, cap-X, cap-Y])
point = PSP (obj, position| point-a, point-b, position: [caption, cap-X, cap-Y])
point-ideal = PIDEAL (line: [caption, cap-X, cap-Y])
point-real-part = PRE (complex-point: [caption, cap-X, cap-Y])
point-image-part-as-real = PIM (complex-point: [caption, cap-X, cap-Y])
point-real-and-image-part-as-real = PIM1 (complex-point: [caption, cap-X, cap-Y])
point-as-sum = PADD (point-a, point-b: [caption, cap-X, cap-Y])
point-as-difference = PSUB (point-a, point-b: [caption, cap-X, cap-Y])
point = PP (X: x^0-coef, x^1-coef, x^2-coef, ...: [caption, cap-X, cap-Y])
-- Прямые
line = SXY (X1, Y1, X2, Y2: [extension] [,style] [,color]: [caption, cap-X, cap-Y])
line = SAB (point-A, point-B: : [caption, cap-X, cap-Y])
line = SPA (line, point: : [caption, cap-X, cap-Y])
line = SOA (line, point: : [caption, cap-X, cap-Y])
line = SPF (point, angle, negative, line-to: : [caption, cap-X, cap-Y])
line = SKB (k-coeff, b-coeff [, x-flag]: : [caption, cap-X, cap-Y])
line = SABC (a-coeff, b-coeff, c-coeff: : [caption, cap-X, cap-Y])
arrow = ARROW (point-A, point-B: [style] [, color])
ls = LS (point-A, point-B: [length])
-- Окружности и дуги
circle = CCX (center-point, point|line|circle|V, diameterFlag: [style]: [caption, cap-X, cap-Y])
[circle, center-point] = CXYV (center-X, center-Y, V, diameter0flag: : [caption, cap-X, cap-Y])
[circle, center-point] = C2P (point-a, point-b: : [caption, cap-X, cap-Y])
[circle, center-point] = C3P (point-a, point-b, point-c: : [caption, cap-X, cap-Y])
[point-a, point-b] = PAC (line, circle: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = PAC2ND (line, circle, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = PAC2DIR (line, circle, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
[point-a, point-b] = P2C (circle-a, circle-b: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = P2C2ND (circle-a, circle-b, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
point-b = P2C2DIR (circle-a, circle-b, point-a: [caption, cap-X, cap-Y]: [caption, cap-X, cap-Y])
[line-a, line-b] = SCP (circle, point: : [caption, cap-X, cap-Y])
[line-a, point-a, line-b, point-b] = SCP (circle, external-point: : [caption, cap-X, cap-Y])
[arc, center-point] = A3P (point-a, point-b, point-c: : [style] [, color])
[arc, point-from, point-to] = APRA (center-point, radius, angle-from, angle-to: [style] [, color])
-- Кривые второго порядка
-- Полилинии
polyline = PLINE (code: [style] [, color])
PLINPADD (polyline, point-a [, point-b] [, point-c])
PLINS (polyline)
PLINZ (polyline)
SHADOW (polyline)
SECTION (polyline)
-- Линейки и измерители
value = MDX(point-a, point-b)
value = MDY(point-a, point-b)
value = MD(point, point-to|line|circle)
ruler = VR (x)
ruler = VRD (point, distance [, negative])
ruler = HR (y)
ruler = HRD (point, distance [, negative])
ruler = RD (line, distance [, negative])
obj = DL (point-a, point-b, pos-X, pos-Y: [caption, cap-X, cap-Y])
-- Преобразователи
T-object = TROFS (P-old: P-new)
T-object = TRMV (P1-old, P2-old | SEG-old: P1-new, P2-new | SEG-new)
T-object = TRSIM (P1-old, P2-old | SEG-old: P1-new, P2-new | SEG-new)
T-object = TRAFF (P1-old, P2-old, P3-old: P1-new, P2-new, P3-new)
T-object = TRMIR (point | line)
T-object = TRROD (line, point-old, point-new)
T-object = TRINV (circle)
[object, ...] = TROBJ (T-object, object, ...)
[object, ...] = TROBI (T-object, object, ...)
-- Системы координат начертательной геометрии
[axis, O] = CS12 (x, y)
[axis, O] = CS23 (x, y)
-- Разное
[x, y] = XY (point)
CAP (obj, caption [, cap-X, cap-Y])
CAPS (obj1, ...: caption-1 [, cap1-X, cap1-Y]: ...)
!ERASE (o1, o2, ...)
!RECSET (fname, max-recursion-depth)
!COUT (var1|precision-coeff|multiplier, var2|precision-coeff|multiplier, ...)
obj = LEADER (obj: [caption, cap-X, cap-Y])
/Пусто/