В текущей версии интерпретатора поддерживаются:
Операторы присваивания и вызова [один оператор в строке].
Объявление составных построений [sub ... end sub].
Вызов составных построений в других составных построениях.
Выполнение циклов [for ... end for].
Измерители, элементы оформления [линии-выноски, размерные знаки, штриховки, заливки, стрелки].
Вывод пространственных координат точек [Z, !cout3D].
Не поддерживаются:
Вложенные операторы [ sub1 (sub2 (...)) ].
Вложенные циклы [for ... for ... end for ... end for].
Условный оператор [!if].
Списки.
Объектно-ориентированные объявления [операторы new и .].
Модификаторы стиля [через :].
Специальные символы
(Специальные символы: αβγδεζηθικλμνξοπρστυφχψω ∀∃∈∉∋∩∪∞∅°∠ ΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡΣΤΥΦΧΨΩ ≅≈≠≡⊂⊃⊄⊥)
Программа
sub p3d (x, y, z: name) vr = @vrd(O,x,true) X = @pab(x12,vr) hr = @hrd(O,y,true) A1 = PAB (vr,hr: {name}_1, -9, +7) hr = @hrd(O,z) A2 = PAB (vr,hr: {name}_2, +2, +9) ls1 = ls (A1,X) ls2 = ls (A2,X) !erase(vr,hr,X) ret(A1,A2,ls1,ls2) end sub // определение н.в. отрезка образующей sub diag (XL1) d = md (S1,XL1) h = @VRD(Ss,d) XLs = PAB (h,x12:CROSS,black) d = md (Ss,XLs) f = SAB(Ss,XLs:false,glassy) !erase(h) ret(d,XLs) end sub // вторая проекция точки sub p2nd (A,a:CAP) v = @vr(A) A2 = PAB (a,v:CAP) !erase(v) ret(A2) end sub // проекции конуса [x12,O] = cs12(0,40) [S1,S2,_,_] = p3d(60, 60, 100: S) [C1,C2,_,_] = p3d(120, 60, 0:C) c1 = CCX(C1,45) XL1 = PSP(c1,0:CROSS) XL2 = p2nd(XL1,x12:CROSS) sl1 = SAB(S1,XL1:false,glassy) sl2 = SAB(S2,XL2:false) XR1 = PSP(c1,0.5:CROSS) XR2 = p2nd(XR1,x12:CROSS) sr2 = SAB(S2,XR2:false) // плоскость [F1,F2,_,_] = p3d(140,10,50:F) [G1,G2,_,_] = p3d(65,100,20:G) [H1,H2,_,_] = p3d(35,10,50:H) gf1 = sab(G1,F1:true,thin) gf2 = sab(G2,F2:true,thin) Ft1 = PAB(gf1,x12:F'_1=G'_1,-24,+8) Ft2 = p2nd(Ft1,gf2:F'_2=G'_2) sub addps (A1,A2) p = SPA(gf1, A1) At1 = PAB(p,x12) p = SPA(gf2, A2) At2 = p2nd(At1,p) !erase(p) ret(At1,At2) end sub [Ht1,Ht2] = addps(H1,H2) [St1,St2] = addps(S1,S2) style(St1,St2,Ht1,Ht2,Ft1,Ft2:_,red) caps(Ht1,Ht2,St1,St2:H'_1:H'_2:S'_1:S'_2) fht = sab(Ft2,Ht2:true,thin:β'_2,-60,-8) st = ls(S2,St2) ht = ls(H2,Ht2) // опорные объекты диаграммы v = @VR(15) h = HR(S2) Ss = pab(v,h:S*) ss = sab(S2,Ss:false,dashed) Xs = pab(v,x12:X) xs = sab(Xs,Ss:false,dashed) [d, Xds] = diag(XL1) posn = pline(0:_,blue) // основание sub dop(i,i2,ls1,ls2) [i1,it2] = addps(i,i2) plinpadd(posn,it2) lsq = sab(i2,it2:false,glassy) // проекция образующей конуса tt = sab (St2,it2:false,helper) it = @PAB(tt,fht:CROSS,red) p = @spa(gf2,it) CS2 = PAB(p,ls2:CROSS) lst = sab(it,CS2:false,glassy) CS1 = p2nd(CS2,ls1:CROSS) !erase(i1,it2) ret (CS1,CS2) end sub [P1,P2] = dop(XL1,XL2,sl1,sl2) Di = md(S2,XL2) di = md(S2,P2) posd = pline(0:_,black) // для диаграммы Pdi = psp(Ss,Xds,di,Di:CROSS,green) plinpadd(posd,Pdi) // опорные объекты развертки Sss = PXY (220,-70:S**) v = VR(Sss) h = @HRD(Sss,d,true) XLss = PAB(h,v:CROSS) last = XL1 lasts = XLss pl = pline(0) // развертка Pss = psp(Sss,XLss,di,Di:CROSS) lsps = ls(Sss,XLss) plinpadd(pl,XLss,Pss) pl1 = pline(0:_,green) // сечение П-1 pl2 = pline(0:_,green) // сечение П-2 for (60) i in (c1] ls$ = ls(S1,i) // на П-1 [d, Diag$] = diag(i) // диаграмма d0 = md (i,last) // развертка cc1 = @ccx(lasts,d0) cc2 = @ccx(Sss,d) [_,P1$] = @P2C(cc1,cc2) lss$ = sab(Sss,P1$:false,helper) // на П-2 v = @VR(i) i2 = @PAB (v,x12) ls2$ = ls(S2,i2) // дополнительная проекция [CS1$,CS2$] = dop(i,i2,ls$,ls2$) plinpadd(pl1,CS1$) plinpadd(pl2,CS2$) // перенести на развертку Di = md(S2,i2) di = md(S2,CS2$) D$ = psp(lss$,di,Di:CROSS) plinpadd(pl,P1$,D$) Pdi = psp(Ss,Diag$,di,Di:CROSS,green) plinpadd(posd,Pdi) !erase(Diag$,CS1$,CS2$,D$) // переход к следующему сектору last = i lasts = P1$ end for plinz(pl, pl1, pl2, posn, posd) nav (0,-10:0.8)
Графические команды
-- Точки
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])
/Пусто/