В текущей версии интерпретатора поддерживаются:
Операторы присваивания и вызова [один оператор в строке].
Объявление составных построений [sub ... end sub].
Вызов составных построений в других составных построениях.
Выполнение циклов [for ... end for].
Измерители, элементы оформления [линии-выноски, размерные знаки, штриховки, заливки, стрелки].
Вывод пространственных координат точек [Z, !cout3D].
Не поддерживаются:
Вложенные операторы [ sub1 (sub2 (...)) ].
Вложенные циклы [for ... for ... end for ... end for].
Условный оператор [!if].
Списки.
Объектно-ориентированные объявления [операторы new и .].
Модификаторы стиля [через :].
Специальные символы
(Специальные символы: αβγδεζηθικλμνξοπρστυφχψω ∀∃∈∉∋∩∪∞∅°∠ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ≅≈≠≡⊂⊃⊄⊥)
Программа
PSIZE=1 S2 = pxy(0,-90:S_2,+5,+1) Lx = pxy(-40,0:CROSS) Rx = pxy(40,0:CROSS) lt = sab(Lx,S2:true,thin) rt = sab(Rx,S2:true,thin) os = sab(Lx,Rx:false,thin) axis = sxy(0,-90,0,0:true,dashdotted) v = vr(Lx) h = hr(60) Lx1 = pab(v,h:CROSS) v = vr(S2) S1 = pab(v,h:S_1) c1 = ccx(S1,Lx1:thin) v = vr(-20,S2) h = hr(-10,Lx) A = pab(h,lt:CROSS,blue) B = pab(h,v:CROSS,green) C = pab(v,lt:CROSS,blue) v = vr(25,S2) D = pab(h,v:CROSS,green) v = vr(-5,S2) E = pab(v,lt:CROSS,blue) AB = sab(A,B:false,,green:α_2,-12,-5) BC = sab(C,B:false,,blue:β_2,-12,-5) CD = sab(C,D:false,,green:γ_2,+5,+2) DE = sab(E,D:false,,blue:τ_2,-12,-5) P12 = pab(DE,axis:CROSS,red) P22 = pab(CD,axis:CROSS,red) h = hr(C) CI = pab(h,rt:CROSS,gray) CDI = sab(CI,P22:false,helper) V = pab(CDI,DE:CROSS,gray) e2 = sab(P22,D:true,thin) F = pab(e2,rt:CROSS,black) O2 = psp(C,F,0.5:O_2,-3,-5) // pi3 S3 = pxy(140,-90:S_3,+5,+1) tmv = trofs(S2:S3) [lt3,rt3,axis3,os3,Lx3,Rx3]=trobj(tmv,lt,rt,axis,os,Lx,Rx) v3 = vr(S3) // k h1 = hr(S1) K = @pab(h1,v3:K) ls1k = ls(K,S1) ls3k = ls(K,S3) k = spf(K,45:true,helper) // pi1 v = vr(O2) O1 = pab(h1,v:O_1) v = vr(A) A1 = pab(v,h1:CROSS,blue) c2 = ccx(S1,A1:helper) v = vr(B) C1 = pab(h1,v:CROSS,blue) [B11,B12] = pac(v,c2:CROSS,green:CROSS,green) lsA=ls(A,A1) [AB1,_] = a3p(B11,A1,B12:,green) lsB = ls(B,B12) BC1 = sab(B11,B12:false,,blue) v = vr(D) [D11,D12] = pac(v,c2:CROSS,green:CROSS,green) sub para(A2) h = hr(A2) X = @pab(h,lt) X2 = @pab(h,rt) ls1 = ls(X,X2) v = vr(X) h = hr(S1) X2 = @pab(v,h) c = ccx(S1,X2:helper) ls2 = ls(X,X2) !erase(h,v,X,X2) ret(c,ls1) end sub sub pi1to3 (A1,A2:color) h = hr(A1) X = @pab(k,h:CROSS,{color}) v = vr(X) h = hr(A2) A3 = @pab(v,h:CROSS,{color}) ls12 = ls(A2,A3) ls1x = ls(A1,X) ls3x = ls(A3,X) !erase(v,h) ret(A3) end sub sub onestep (i) [pl1$, pl2$] = para(i) [Bl11$,Bl12$] = @pac(BC1,pl1$:CROSS,blue:CROSS,blue) Bl31$ = @pi1to3(Bl11$,i:blue) Bl32$ = @pi1to3(Bl12$,i:blue) plinpadd (pl3pa1,Bl31$) plinpadd (pl3pa2,Bl32$) Cl2$ = @pab(pl2$,CD:CROSS,green) v = vr(Cl2$) [Cl11$,Cl12$] = @pac(v,pl1$:CROSS,green:CROSS,green) Cl31$ = @pi1to3(Cl11$,i:green) Cl32$ = @pi1to3(Cl12$,i:green) Dl2$ = @pab(pl2$,DE:CROSS,blue) v = vr(Dl2$) [Dl11$,Dl12$] = @pac(v,pl1$:CROSS,blue:CROSS,blue) Dl31$ = @pi1to3(Dl11$,i:blue) Dl32$ = @pi1to3(Dl12$,i:blue) plinpadd (pl1g1,Cl11$) plinpadd (pl1g2,Cl12$) plinpadd (pl1b1,Dl11$) plinpadd (pl1b2,Dl12$) !erase(v) ret (Cl31$,Cl32$,Dl31$,Dl32$) end sub sub onestep2(i) [pl1$, pl2$] = para(i) Dl2$ = @pab(pl2$,DE:CROSS,blue) v = vr(Dl2$) [Dl11$,Dl12$] = @pac(v,pl1$:CROSS,blue:CROSS,blue) Dl31$ = @pi1to3(Dl11$,i:blue) Dl32$ = @pi1to3(Dl12$,i:blue) plinpadd (pl1b1,Dl11$) plinpadd (pl1b2,Dl12$) plinpadd (pl3b1,Dl31$) plinpadd (pl3b2,Dl32$) !erase(v) end sub pl1g1 = pline(0:,green) pl1g2 = pline(0:,green) pl1b1 = pline(0:,blue) pl1b2 = pline(0:,blue) pl3g1 = pline(0:,green) pl3g2 = pline(0:,green) pl3b1 = pline(0:,blue) pl3b2 = pline(0:,blue) pl3ds1 = pline(0:dashed) pl3ds2 = pline(0:dashed) pl3pa1 = pline(0:,blue) pl3pa2 = pline(0:,blue) B31 = pi1to3(B11,B:green) B32 = pi1to3(B12,B:green) D31 = pi1to3(D11,D:green) D32 = pi1to3(D12,D:green) AB3 = sab(B31,B32:false,,green) plinpadd (pl1g1,D11) plinpadd (pl1g2,D12) plinpadd (pl1b1,D11) plinpadd (pl1b2,D12) DD1 = sab(D11,D12:false,dashed) plinpadd (pl3pa1,B31) plinpadd (pl3pa2,B32) plinpadd (pl3ds1,D31) plinpadd (pl3ds2,D32) for (3) i in (B:O2] [C31,C32,D31,D32] = @onestep(i) plinpadd(pl3ds1,D31,C31) plinpadd(pl3ds2,D32,C32) end for for (3) i in (O2:P22] [C31,C32,D31,D32] = @onestep(i) plinpadd(pl3ds1,D31,C31) plinpadd(pl3ds2,D32,C32) end for h = hr(P22) P231 = pab(h,lt3:CROSS,red) P232 = pab(h,rt3:CROSS,red) plinpadd(pl3g1,P232) plinpadd(pl3g2,P231) for (3) i in (P22:V] [C31,C32,D31,D32] = @onestep(i) plinpadd(pl3ds1,D31) plinpadd(pl3ds2,D32) plinpadd(pl3g1,C31) plinpadd(pl3g2,C32) end for plinpadd(pl3b1,C31) plinpadd(pl3b2,C32) for (4) i in (V:C] [C31,C32,D31,D32] = @onestep(i) plinpadd(pl3b1,D31) plinpadd(pl3b2,D32) plinpadd(pl3g1,C31) plinpadd(pl3g2,C32) end for for (4) i in (C:P12] onestep2(i) end for h = hr(P12) P131 = pab(h,lt3:CROSS,red) P132 = pab(h,rt3:CROSS,red) for (5) i in (P12:E) onestep2(i) end for v = vr(E) h = hr(E) H1 = pab(h1,v:CROSS,blue) H3 = pab(axis3,h:CROSS,blue) plinpadd (pl1g1,C1) plinpadd (pl1g2,C1) plinpadd (pl1b1,H1) plinpadd (pl1b2,H1) plinpadd (pl3b1,H3) plinpadd (pl3b2,H3) plins(pl1g1, pl1g2, pl1b1, pl1b2, pl3pa1, pl3pa2, pl3ds1, pl3ds2, pl3b1, pl3b2, pl3g1, pl3g2) !erase(v,h,h1,v3) // обводка очерков f21 = sab(Lx,A:false,,black) f22 = sab(E,S2:false,,black) f23 = sab(S2,Rx:false,,black) f31 = sab(Lx3,P231:false,,black) f32 = sab(Rx3,P232:false,,black) f33 = sab(P131,S3:false,,black) f34 = sab(P132,S3:false,,black) nav(-80,0:1.1)
Графические команды
-- Точки
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])
/Пусто/