; ; GENERAL COLLINEAR TRANSFORMATION 4 - Ver.01 - The 'General Perspective' Tool ; ; Author: Milan Anthony Vlasak, Eng. ;<@> May 2006, Brisbane, Queensland, Australia ;<#> This Macro is Version 01 and it is free for use with a copy of General Cadd Pro ; You assume total responsibility for using this macro ; EN,Pre-Collineation,; /VLC; MO; BR,--; RB,++; OR,--; OS,O,--; CF,++; ; YE,1000; YE,1001; YE,1002; ; YC,!; /VIN,2,$VAL; extract current layer number RD; ; /MSP,++,/XMD,++; /SEL,Select the SUBJECTS for General [COLLINEAR] Transformation - the [Perspective] Tool........> Destination layer is your current layer - exciting ! <,#; /IF,$VAL[EQ]0,/GTO,GRANDEXIT; CO,L,!,!,!,1; CG,P,!,Y,1001,!; SOURCE is in Layer 1001 ; EX,Y,1001,!; EX,Y,1001,!; EX,Y,1001,!; ; SZ,Y,1001,!,0,0,1,0.5; SZ,Y,1001,!,0,0,1,2; Circle to Ellipse, Arc to Elliptic Arc RD; ; /VIN,0,1;............................i-index .TRANSITLINES; /IF,$I(0)[GE]5,/GTO,SOLVEPARAMETERS; /MSP,--,/MSP,++; /PMT,1,'>> Draw Transit Line [number]: ',$I(0),' from Subject to Model >>',#; /PMT,2,' Tip: SNAP a point at Subject area and then SNAP a point at Model area',#; /PMT,3,' Consequently FOUR Transit Lines are needed ',#; /XMD,--; BW,@,@,$PNTX,$PNTY,$PNTX,$PNTY; /XMD,++; CG,T,!,Y,1000,!; /VIN,0,$I(0)+1; /GTO,TRANSITLINES; ; .SOLVEPARAMETERS; /MSP,--,/MSP,++; /PMT,1,'......working',#; /CEL,Y,1000,!; /VIN,0,$VAL; /VIN,1,1; .LOOP0; /IF,$I(1)[GT]$I(0),/GTO,END0; /EEX,$I(1),P,1,A,/VPT,$I(1),$PNTX,$PNTY; x1,x1....x4,y4 - start points Subject /EEX,$I(1),P,2,A,/VPT,$I(1)+4,$PNTX,$PNTY; X5,Y5....X8,Y8 - end points Model /VIN,1,$I(1)+1; /GTO,LOOP0; .END0; /DEL; YE,1000; ; ; ** MATRIX: /VRL,11,1,/VRL,12,$x(1),/VRL,13,$y(1),/VRL,14,0,/VRL,15,0,/VRL,16,0,/VRL,17,0-($x(1)*$X(5)),/VRL,18,0-($y(1)*$X(5)),/VRL,19,0-($X(5)); /VRL,21,1,/VRL,22,$x(2),/VRL,23,$y(2),/VRL,24,0,/VRL,25,0,/VRL,26,0,/VRL,27,0-($x(2)*$X(6)),/VRL,28,0-($y(2)*$X(6)),/VRL,29,0-($X(6)); /VRL,31,1,/VRL,32,$x(3),/VRL,33,$y(3),/VRL,34,0,/VRL,35,0,/VRL,36,0,/VRL,37,0-($x(3)*$X(7)),/VRL,38,0-($y(3)*$X(7)),/VRL,39,0-($X(7)); /VRL,41,0,/VRL,42,0,/VRL,43,0,/VRL,44,1,/VRL,45,$x(4),/VRL,46,$y(4),/VRL,47,0-($x(4)*$Y(8)),/VRL,48,0-($y(4)*$Y(8)),/VRL,49,0-($Y(8)); /VRL,51,0,/VRL,52,0,/VRL,53,0,/VRL,54,1,/VRL,55,$x(3),/VRL,56,$y(3),/VRL,57,0-($x(3)*$Y(7)),/VRL,58,0-($y(3)*$Y(7)),/VRL,59,0-($Y(7)); /VRL,61,0,/VRL,62,0,/VRL,63,0,/VRL,64,1,/VRL,65,$x(2),/VRL,66,$y(2),/VRL,67,0-($x(2)*$Y(6)),/VRL,68,0-($y(2)*$Y(6)),/VRL,69,0-($Y(6)); /VRL,71,0,/VRL,72,0,/VRL,73,0,/VRL,74,1,/VRL,75,$x(1),/VRL,76,$y(1),/VRL,77,0-($x(1)*$Y(5)),/VRL,78,0-($y(1)*$Y(5)),/VRL,79,0-($Y(5)); /VRL,81,1,/VRL,82,$x(4),/VRL,83,$y(4),/VRL,84,0,/VRL,85,0,/VRL,86,0,/VRL,87,0-($x(4)*$X(8)),/VRL,88,0-($y(4)*$X(8)),/VRL,89,0-($X(8)); ; ;********************************************************************************** ;1st reduction -~*$R(21)/$R(11) - GAUSS REVOLVER STARTS /VRL,22,$R(22)-$R(12)*($R(21)/$R(11)); /VRL,23,$R(23)-$R(13)*($R(21)/$R(11)); /VRL,24,$R(24)-$R(14)*($R(21)/$R(11)); /VRL,25,$R(25)-$R(15)*($R(21)/$R(11)); /VRL,26,$R(26)-$R(16)*($R(21)/$R(11)); /VRL,27,$R(27)-$R(17)*($R(21)/$R(11)); /VRL,28,$R(28)-$R(18)*($R(21)/$R(11)); /VRL,29,$R(29)-$R(19)*($R(21)/$R(11)); ; ;1st reduction -~*$R(31)/$R(11) /VRL,32,$R(32)-$R(12)*($R(31)/$R(11)); /VRL,33,$R(33)-$R(13)*($R(31)/$R(11)); /VRL,34,$R(34)-$R(14)*($R(31)/$R(11)); /VRL,35,$R(35)-$R(15)*($R(31)/$R(11)); /VRL,36,$R(36)-$R(16)*($R(31)/$R(11)); /VRL,37,$R(37)-$R(17)*($R(31)/$R(11)); /VRL,38,$R(38)-$R(18)*($R(31)/$R(11)); /VRL,39,$R(39)-$R(19)*($R(31)/$R(11)); ; ;1st reduction -~*$R(41)/$R(11) /VRL,42,$R(42)-$R(12)*($R(41)/$R(11)); /VRL,43,$R(43)-$R(13)*($R(41)/$R(11)); /VRL,44,$R(44)-$R(14)*($R(41)/$R(11)); /VRL,45,$R(45)-$R(15)*($R(41)/$R(11)); /VRL,46,$R(46)-$R(16)*($R(41)/$R(11)); /VRL,47,$R(47)-$R(17)*($R(41)/$R(11)); /VRL,48,$R(48)-$R(18)*($R(41)/$R(11)); /VRL,49,$R(49)-$R(19)*($R(41)/$R(11)); ; ;1st reduction -~*$R(51)/$R(11) /VRL,52,$R(52)-$R(12)*($R(51)/$R(11)); /VRL,53,$R(53)-$R(13)*($R(51)/$R(11)); /VRL,54,$R(54)-$R(14)*($R(51)/$R(11)); /VRL,55,$R(55)-$R(15)*($R(51)/$R(11)); /VRL,56,$R(56)-$R(16)*($R(51)/$R(11)); /VRL,57,$R(57)-$R(17)*($R(51)/$R(11)); /VRL,58,$R(58)-$R(18)*($R(51)/$R(11)); /VRL,59,$R(59)-$R(19)*($R(51)/$R(11)); ; ;1st reduction -~*$R(61)/$R(11) /VRL,62,$R(62)-$R(12)*($R(61)/$R(11)); /VRL,63,$R(63)-$R(13)*($R(61)/$R(11)); /VRL,64,$R(64)-$R(14)*($R(61)/$R(11)); /VRL,65,$R(65)-$R(15)*($R(61)/$R(11)); /VRL,66,$R(66)-$R(16)*($R(61)/$R(11)); /VRL,67,$R(67)-$R(17)*($R(61)/$R(11)); /VRL,68,$R(68)-$R(18)*($R(61)/$R(11)); /VRL,69,$R(69)-$R(19)*($R(61)/$R(11)); ; ;1st reduction -~*$R(71)/$R(11) /VRL,72,$R(72)-$R(12)*($R(71)/$R(11)); /VRL,73,$R(73)-$R(13)*($R(71)/$R(11)); /VRL,74,$R(74)-$R(14)*($R(71)/$R(11)); /VRL,75,$R(75)-$R(15)*($R(71)/$R(11)); /VRL,76,$R(76)-$R(16)*($R(71)/$R(11)); /VRL,77,$R(77)-$R(17)*($R(71)/$R(11)); /VRL,78,$R(78)-$R(18)*($R(71)/$R(11)); /VRL,79,$R(79)-$R(19)*($R(71)/$R(11)); ; ;1st reduction -~*$R(81)/$R(11) /VRL,82,$R(82)-$R(12)*($R(81)/$R(11)); /VRL,83,$R(83)-$R(13)*($R(81)/$R(11)); /VRL,84,$R(84)-$R(14)*($R(81)/$R(11)); /VRL,85,$R(85)-$R(15)*($R(81)/$R(11)); /VRL,86,$R(86)-$R(16)*($R(81)/$R(11)); /VRL,87,$R(87)-$R(17)*($R(81)/$R(11)); /VRL,88,$R(88)-$R(18)*($R(81)/$R(11)); /VRL,89,$R(89)-$R(19)*($R(81)/$R(11)); ; ;Equation 2 ** VRL:non,22,23,24,25,26,27,28 and 29 ;--------------------------------------------------------- ;2nd reduction -~*$R(32)/$R(22) /VRL,33,$R(33)-$R(23)*($R(32)/$R(22)); /VRL,34,$R(34)-$R(24)*($R(32)/$R(22)); /VRL,35,$R(35)-$R(25)*($R(32)/$R(22)); /VRL,36,$R(36)-$R(26)*($R(32)/$R(22)); /VRL,37,$R(37)-$R(27)*($R(32)/$R(22)); /VRL,38,$R(38)-$R(28)*($R(32)/$R(22)); /VRL,39,$R(39)-$R(29)*($R(32)/$R(22)); ; ;2nd reduction -~*$R(42)/$R(22) /VRL,43,$R(43)-$R(23)*($R(42)/$R(22)); /VRL,44,$R(44)-$R(24)*($R(42)/$R(22)); /VRL,45,$R(45)-$R(25)*($R(42)/$R(22)); /VRL,46,$R(46)-$R(26)*($R(42)/$R(22)); /VRL,47,$R(47)-$R(27)*($R(42)/$R(22)); /VRL,48,$R(48)-$R(28)*($R(42)/$R(22)); /VRL,49,$R(49)-$R(29)*($R(42)/$R(22)); ; ;2nd reduction -~*$R(52)/$R(22) /VRL,53,$R(53)-$R(23)*($R(52)/$R(22)); /VRL,54,$R(54)-$R(24)*($R(52)/$R(22)); /VRL,55,$R(55)-$R(25)*($R(52)/$R(22)); /VRL,56,$R(56)-$R(26)*($R(52)/$R(22)); /VRL,57,$R(57)-$R(27)*($R(52)/$R(22)); /VRL,58,$R(58)-$R(28)*($R(52)/$R(22)); /VRL,59,$R(59)-$R(29)*($R(52)/$R(22)); ; ;2nd reduction -~*$R(62)/$R(22) /VRL,63,$R(63)-$R(23)*($R(62)/$R(22)); /VRL,64,$R(64)-$R(24)*($R(62)/$R(22)); /VRL,65,$R(65)-$R(25)*($R(62)/$R(22)); /VRL,66,$R(66)-$R(26)*($R(62)/$R(22)); /VRL,67,$R(67)-$R(27)*($R(62)/$R(22)); /VRL,68,$R(68)-$R(28)*($R(62)/$R(22)); /VRL,69,$R(69)-$R(29)*($R(62)/$R(22)); ; ;2nd reduction -~*$R(72)/$R(22) /VRL,73,$R(73)-$R(23)*($R(72)/$R(22)); /VRL,74,$R(74)-$R(24)*($R(72)/$R(22)); /VRL,75,$R(75)-$R(25)*($R(72)/$R(22)); /VRL,76,$R(76)-$R(26)*($R(72)/$R(22)); /VRL,77,$R(77)-$R(27)*($R(72)/$R(22)); /VRL,78,$R(78)-$R(28)*($R(72)/$R(22)); /VRL,79,$R(79)-$R(29)*($R(72)/$R(22)); ; ;2nd reduction -~*$R(82)/$R(22) /VRL,83,$R(83)-$R(23)*($R(82)/$R(22)); /VRL,84,$R(84)-$R(24)*($R(82)/$R(22)); /VRL,85,$R(85)-$R(25)*($R(82)/$R(22)); /VRL,86,$R(86)-$R(26)*($R(82)/$R(22)); /VRL,87,$R(87)-$R(27)*($R(82)/$R(22)); /VRL,88,$R(88)-$R(28)*($R(82)/$R(22)); /VRL,89,$R(89)-$R(29)*($R(82)/$R(22)); ; ;Equation 3 *** VRL:non,non,33,34,35,36,37,38 and 39 ;---------------------------------------------------------- ;3rd reduction -~*$R(43)/$R(33) /VRL,44,$R(44)-$R(34)*($R(43)/$R(33)); /VRL,45,$R(45)-$R(35)*($R(43)/$R(33)); /VRL,46,$R(46)-$R(36)*($R(43)/$R(33)); /VRL,47,$R(47)-$R(37)*($R(43)/$R(33)); /VRL,48,$R(48)-$R(38)*($R(43)/$R(33)); /VRL,49,$R(49)-$R(39)*($R(43)/$R(33)); ; ;3rd reduction -~*$R(53)/$R(33) /VRL,54,$R(54)-$R(34)*($R(53)/$R(33)); /VRL,55,$R(55)-$R(35)*($R(53)/$R(33)); /VRL,56,$R(56)-$R(36)*($R(53)/$R(33)); /VRL,57,$R(57)-$R(37)*($R(53)/$R(33)); /VRL,58,$R(58)-$R(38)*($R(53)/$R(33)); /VRL,59,$R(59)-$R(39)*($R(53)/$R(33)); ; ;3rd reduction -~*$R(63)/$R(33) /VRL,64,$R(64)-$R(34)*($R(63)/$R(33)); /VRL,65,$R(65)-$R(35)*($R(63)/$R(33)); /VRL,66,$R(66)-$R(36)*($R(63)/$R(33)); /VRL,67,$R(67)-$R(37)*($R(63)/$R(33)); /VRL,68,$R(68)-$R(38)*($R(63)/$R(33)); /VRL,69,$R(69)-$R(39)*($R(63)/$R(33)); ; ;3rd reduction -~*$R(73)/$R(33) /VRL,74,$R(74)-$R(34)*($R(73)/$R(33)); /VRL,75,$R(75)-$R(35)*($R(73)/$R(33)); /VRL,76,$R(76)-$R(36)*($R(73)/$R(33)); /VRL,77,$R(77)-$R(37)*($R(73)/$R(33)); /VRL,78,$R(78)-$R(38)*($R(73)/$R(33)); /VRL,79,$R(79)-$R(39)*($R(73)/$R(33)); ; ;3rd reduction -~*$R(83)/$R(33) /VRL,84,$R(84)-$R(34)*($R(83)/$R(33)); /VRL,85,$R(85)-$R(35)*($R(83)/$R(33)); /VRL,86,$R(86)-$R(36)*($R(83)/$R(33)); /VRL,87,$R(87)-$R(37)*($R(83)/$R(33)); /VRL,88,$R(88)-$R(38)*($R(83)/$R(33)); /VRL,89,$R(89)-$R(39)*($R(83)/$R(33)); ; ;Equation 4 ** ** VRL:non,non,non,44,45,46,47,48 and 49 ;----------------------------------------------------------- ;4th reduction -~*$R(54)/$R(44) /VRL,55,$R(55)-$R(45)*($R(54)/$R(44)); /VRL,56,$R(56)-$R(46)*($R(54)/$R(44)); /VRL,57,$R(57)-$R(47)*($R(54)/$R(44)); /VRL,58,$R(58)-$R(48)*($R(54)/$R(44)); /VRL,59,$R(59)-$R(49)*($R(54)/$R(44)); ; ;4th reduction -~*$R(64)/$R(44) /VRL,65,$R(65)-$R(45)*($R(64)/$R(44)); /VRL,66,$R(66)-$R(46)*($R(64)/$R(44)); /VRL,67,$R(67)-$R(47)*($R(64)/$R(44)); /VRL,68,$R(68)-$R(48)*($R(64)/$R(44)); /VRL,69,$R(69)-$R(49)*($R(64)/$R(44)); ; ;4th reduction -~*$R(74)/$R(44) /VRL,75,$R(75)-$R(45)*($R(74)/$R(44)); /VRL,76,$R(76)-$R(46)*($R(74)/$R(44)); /VRL,77,$R(77)-$R(47)*($R(74)/$R(44)); /VRL,78,$R(78)-$R(48)*($R(74)/$R(44)); /VRL,79,$R(79)-$R(49)*($R(74)/$R(44)); ; ;4th reduction -~*$R(84)/$R(44) /VRL,85,$R(85)-$R(45)*($R(84)/$R(44)); /VRL,86,$R(86)-$R(46)*($R(84)/$R(44)); /VRL,87,$R(87)-$R(47)*($R(84)/$R(44)); /VRL,88,$R(88)-$R(48)*($R(84)/$R(44)); /VRL,89,$R(89)-$R(49)*($R(84)/$R(44)); ; ;Equation 5 *** ** VRL:non,non,non,non,55,56,57,58 and 59 ;------------------------------------------------------------ ;5th reduction -~*$R(65)/$R(55) /VRL,66,$R(66)-$R(56)*($R(65)/$R(55)); /VRL,67,$R(67)-$R(57)*($R(65)/$R(55)); /VRL,68,$R(68)-$R(58)*($R(65)/$R(55)); /VRL,69,$R(69)-$R(59)*($R(65)/$R(55)); ; ;5th reduction -~*$R(75)/$R(55) /VRL,76,$R(76)-$R(56)*($R(75)/$R(55)); /VRL,77,$R(77)-$R(57)*($R(75)/$R(55)); /VRL,78,$R(78)-$R(58)*($R(75)/$R(55)); /VRL,79,$R(79)-$R(59)*($R(75)/$R(55)); ; ;5th reduction -~*$R(85)/$R(55) /VRL,86,$R(86)-$R(56)*($R(85)/$R(55)); /VRL,87,$R(87)-$R(57)*($R(85)/$R(55)); /VRL,88,$R(88)-$R(58)*($R(85)/$R(55)); /VRL,89,$R(89)-$R(59)*($R(85)/$R(55)); ; ;Equation 6 *** *** VRL:non,non,non,non,non,66,67,68 and 69 ;------------------------------------------------------------- ;6th reduction -~*$R(76)/$R(66) /VRL,77,$R(77)-$R(67)*($R(76)/$R(66)); /VRL,78,$R(78)-$R(68)*($R(76)/$R(66)); /VRL,79,$R(79)-$R(69)*($R(76)/$R(66)); ; ;6th reduction -~*$R(86)/$R(66) /VRL,87,$R(87)-$R(67)*($R(86)/$R(66)); /VRL,88,$R(88)-$R(68)*($R(86)/$R(66)); /VRL,89,$R(89)-$R(69)*($R(86)/$R(66)); ; ;Equation 7 **** *** VRL:non,non,non,non,non,non,77,78 and 79 ;-------------------------------------------------------------- ;7th reduction -~*$R(87)/$R(77) /VRL,88,$R(88)-$R(78)*($R(87)/$R(77)); /VRL,89,$R(89)-$R(79)*($R(87)/$R(77)); ; ;Equation 8 **** **** VRL:non,non,non,non,non,non,non,88 and 89 ;Note: 'non' means the what ever existing value will not be used for Upper Triangular Matrix ;-------------------------------------------------------------------------------------------- ;The System Of Eight Linear Equations is now transfered resulting in Upper Triangular Form ;$R(1)*$R(11)+$R(2)*$R(12)+$R(3)*$R(13)+$R(4)*$R(14)+$R(5)*$R(15)+$R(6)*$R(16)+$R(7)*$R(17)+$R(8)*$R(18)+$R(19)=0 ; $R(2)*$R(22)+$R(3)*$R(23)+$R(4)*$R(24)+$R(5)*$R(25)+$R(6)*$R(26)+$R(7)*$R(27)+$R(8)*$R(28)+$R(29)=0 ; $R(3)*$R(33)+$R(4)*$R(34)+$R(5)*$R(35)+$R(6)*$R(36)+$R(7)*$R(37)+$R(8)*$R(38)+$R(39)=0 ; $R(4)*$R(44)+$R(5)*$R(45)+$R(6)*$R(46)+$R(7)*$R(47)+$R(8)*$R(48)+$R(49)=0 ; $R(5)*$R(55)+$R(6)*$R(56)+$R(7)*$R(57)+$R(8)*$R(58)+$R(59)=0 ; $R(6)*$R(66)+$R(7)*$R(67)+$R(8)*$R(68)+$R(69)=0 ; $R(7)*$R(77)+$R(8)*$R(78)+$R(79)=0 ; $R(8)*$R(88)+$R(89)=0 ;---------------------------------------------------------------------------------------------------------------- ;Solution by Back Substitution /VRL,8,(0-$R(89))/$R(88); /VRL,7,(0-$R(8)*$R(78)-$R(79))/$R(77); /VRL,6,(0-$R(7)*$R(67)-$R(8)*$R(68)-$R(69))/$R(66); /VRL,5,(0-$R(6)*$R(56)-$R(7)*$R(57)-$R(8)*$R(58)-$R(59))/$R(55); /VRL,4,(0-$R(5)*$R(45)-$R(6)*$R(46)-$R(7)*$R(47)-$R(8)*$R(48)-$R(49))/$R(44); /VRL,3,(0-$R(4)*$R(34)-$R(5)*$R(35)-$R(6)*$R(36)-$R(7)*$R(37)-$R(8)*$R(38)-$R(39))/$R(33); /VRL,2,(0-$R(3)*$R(23)-$R(4)*$R(24)-$R(5)*$R(25)-$R(6)*$R(26)-$R(7)*$R(27)-$R(8)*$R(28)-$R(29))/$R(22); /VRL,1,(0-$R(2)*$R(12)-$R(3)*$R(13)-$R(4)*$R(14)-$R(5)*$R(15)-$R(6)*$R(16)-$R(7)*$R(17)-$R(8)*$R(18)-$R(19))/$R(11); ; - GAUSS REVOLVER FINISHED ;***************************************************************************** ; ; - GENERAL COLLINEAR TRANSFORMATION RULES ARE: ;X'=($R(1)+$R(2)*$X(~)+$R(3)*$Y(~))/(1+$R(7)*$X(~)+$R(8)*$Y(~)) ;Y'=($R(4)+$R(5)*$X(~)+$R(6)*$Y(~))/(1+$R(7)*$X(~)+$R(8)*$Y(~)) ; .LOOP1; /CEL,Y,1001,!; /IF,$VAL[EQ]0,/GTO,GRANDEXIT; /EEX,1,E,/IF,$VAL[EQ]1,/GTO,POINTS; /EEX,1,E,/IF,$VAL[EQ]2,/GTO,LINES; /EEX,1,E,/IF,$VAL[EQ]12,/GTO,ELLIPSE; /EEX,1,E,/IF,$VAL[EQ]0,/GTO,ELLIPTICARC; /EEX,1,E,/IF,$VAL[EQ]4,/GTO,QUADRATICBEZIER; /EEX,1,E,/IF,$VAL[EQ]14,/GTO,BEZIER; /EEX,1,L,1002; anything else set aside YE,1002; and erased there /GTO,LOOP1; ; .POINTS; /EEX,1,P,1,A; /VRL,11,($R(1)+$R(2)*$PNTX+$R(3)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /VRL,12,($R(4)+$R(5)*$PNTX+$R(6)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /EEX,1,P,1,N,$R(11),$R(12); /EEX,1,L,1000; Changes it to Layer 1000 - needed /GTO,LOOP1; ; .LINES; /EEX,1,P,1,A; /VRL,11,($R(1)+$R(2)*$PNTX+$R(3)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /VRL,12,($R(4)+$R(5)*$PNTX+$R(6)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /EEX,1,P,1,N,$R(11),$R(12); /EEX,1,P,2,A; /VRL,13,($R(1)+$R(2)*$PNTX+$R(3)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /VRL,14,($R(4)+$R(5)*$PNTX+$R(6)*$PNTY)/(1+$R(7)*$PNTX+$R(8)*$PNTY); /EEX,1,P,2,N,$R(13),$R(14); /EEX,1,L,1000; Changes it to Layer 1000 - needed /GTO,LOOP1; ; .ELLIPSE; /EEX,1,C,!,/VIN,11,$VAL; Line Color /EEX,1,T,!,/VIN,12,$VAL; Line Type /EEX,1,W,!,/VIN,13,$VAL; Line Width LC,$I(11); LT,$I(12); LW,$I(13); /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; /EEX,1,P,3,A,/VPT,3,$PNTX,$PNTY; /EEX,1,P,4,A,/VPT,4,$PNTX,$PNTY; /EEX,1,L,1002; set aside YE,1002; and erased there YC,1002; L1,$X(1),$Y(1),$X(2),$Y(2); MV,T,!,($X(1)+$X(2))/2,($Y(1)+$Y(2))/2,$X(3),$Y(3); /LST; /EEX,1,P,1,A,/VPT,5,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,6,$PNTX,$PNTY; YE,1002; and erased there L1,$X(1),$Y(1),$X(2),$Y(2); MV,T,!,($X(1)+$X(2))/2,($Y(1)+$Y(2))/2,$X(4),$Y(4); /LST; /EEX,1,P,1,A,/VPT,7,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,8,$PNTX,$PNTY; YE,1002; and erased there /VPT,11,($R(1)+$R(2)*$X(1)+$R(3)*$Y(1))/(1+$R(7)*$X(1)+$R(8)*$Y(1)),($R(4)+$R(5)*$X(1)+$R(6)*$Y(1))/(1+$R(7)*$X(1)+$R(8)*$Y(1)); /VPT,12,($R(1)+$R(2)*$X(2)+$R(3)*$Y(2))/(1+$R(7)*$X(2)+$R(8)*$Y(2)),($R(4)+$R(5)*$X(2)+$R(6)*$Y(2))/(1+$R(7)*$X(2)+$R(8)*$Y(2)); /VPT,13,($R(1)+$R(2)*$X(3)+$R(3)*$Y(3))/(1+$R(7)*$X(3)+$R(8)*$Y(3)),($R(4)+$R(5)*$X(3)+$R(6)*$Y(3))/(1+$R(7)*$X(3)+$R(8)*$Y(3)); /VPT,14,($R(1)+$R(2)*$X(4)+$R(3)*$Y(4))/(1+$R(7)*$X(4)+$R(8)*$Y(4)),($R(4)+$R(5)*$X(4)+$R(6)*$Y(4))/(1+$R(7)*$X(4)+$R(8)*$Y(4)); /VPT,15,($R(1)+$R(2)*$X(5)+$R(3)*$Y(5))/(1+$R(7)*$X(5)+$R(8)*$Y(5)),($R(4)+$R(5)*$X(5)+$R(6)*$Y(5))/(1+$R(7)*$X(5)+$R(8)*$Y(5)); /VPT,17,($R(1)+$R(2)*$X(7)+$R(3)*$Y(7))/(1+$R(7)*$X(7)+$R(8)*$Y(7)),($R(4)+$R(5)*$X(7)+$R(6)*$Y(7))/(1+$R(7)*$X(7)+$R(8)*$Y(7)); /VPT,21,($X(11)+$X(13))/2,($Y(11)+$Y(13))/2; /VPT,22,($X(11)+$X(14))/2,($Y(11)+$Y(14))/2; /GEOM,1,15,21,17,22,0,23,3; centre M3,$X(11),$Y(11),$X(12),$Y(12),$X(23),$Y(23); /VRL,11,$VAL; M3,$X(13),$Y(13),$X(14),$Y(14),$X(23),$Y(23); /VRL,12,$VAL; MD,$X(11),$Y(11),$X(13),$Y(13); /VRL,13,$VAL; MD,$X(12),$Y(12),$X(14),$Y(14); /VRL,14,$VAL; YC,1000; /IF,$R(13)[EQ]$R(14),/GTO,ELLALT3; /IF,$R(11)[LT]0.000001,/GTO,ELLALT2; /IF,$R(11)[GT]359.999999,/GTO,ELLALT2; /IF,$R(12)[LT]0.000001,/GTO,ELLALT1; /IF,$R(12)[GT]359.999999,/GTO,ELLALT1; .ELLALT1; E4,$X(23),$Y(23),$X(11),$Y(11),$X(13),$Y(13),$X(12),$Y(12),/GTO,LOOP1; .ELLALT2; E4,$X(23),$Y(23),$X(14),$Y(14),$X(13),$Y(13),$X(12),$Y(12),/GTO,LOOP1; .ELLALT3; EP,$X(11),$Y(11),$X(12),$Y(12),$X(13),$Y(13),/GTO,LOOP1; ; .ELLIPTICARC; /EEX,1,C,!,/VIN,11,$VAL; Line Color /EEX,1,T,!,/VIN,12,$VAL; Line Type /EEX,1,W,!,/VIN,13,$VAL; Line Width LC,$I(11); LT,$I(12); LW,$I(13); /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; /EEX,1,P,3,A,/VPT,3,$PNTX,$PNTY; /EEX,1,P,4,A,/VPT,4,$PNTX,$PNTY; /EEX,1,P,5,A,/VPT,35,$PNTX,$PNTY; /EEX,1,P,6,A,/VPT,36,$PNTX,$PNTY; /EEX,1,P,7,A,/VPT,37,$PNTX,$PNTY; /EEX,1,L,1002; set aside YE,1002; and erased there YC,1002; L1,$X(1),$Y(1),$X(2),$Y(2); MV,T,!,($X(1)+$X(2))/2,($Y(1)+$Y(2))/2,$X(3),$Y(3); /LST; /EEX,1,P,1,A,/VPT,5,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,6,$PNTX,$PNTY; /EEX,1,L,1002; set aside YE,1002; and erased there L1,$X(1),$Y(1),$X(2),$Y(2); MV,T,!,($X(1)+$X(2))/2,($Y(1)+$Y(2))/2,$X(4),$Y(4); /LST; /EEX,1,P,1,A,/VPT,7,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,8,$PNTX,$PNTY; YE,1002; and erased there /VPT,11,($R(1)+$R(2)*$X(1)+$R(3)*$Y(1))/(1+$R(7)*$X(1)+$R(8)*$Y(1)),($R(4)+$R(5)*$X(1)+$R(6)*$Y(1))/(1+$R(7)*$X(1)+$R(8)*$Y(1)); /VPT,12,($R(1)+$R(2)*$X(2)+$R(3)*$Y(2))/(1+$R(7)*$X(2)+$R(8)*$Y(2)),($R(4)+$R(5)*$X(2)+$R(6)*$Y(2))/(1+$R(7)*$X(2)+$R(8)*$Y(2)); /VPT,13,($R(1)+$R(2)*$X(3)+$R(3)*$Y(3))/(1+$R(7)*$X(3)+$R(8)*$Y(3)),($R(4)+$R(5)*$X(3)+$R(6)*$Y(3))/(1+$R(7)*$X(3)+$R(8)*$Y(3)); /VPT,14,($R(1)+$R(2)*$X(4)+$R(3)*$Y(4))/(1+$R(7)*$X(4)+$R(8)*$Y(4)),($R(4)+$R(5)*$X(4)+$R(6)*$Y(4))/(1+$R(7)*$X(4)+$R(8)*$Y(4)); /VPT,15,($R(1)+$R(2)*$X(5)+$R(3)*$Y(5))/(1+$R(7)*$X(5)+$R(8)*$Y(5)),($R(4)+$R(5)*$X(5)+$R(6)*$Y(5))/(1+$R(7)*$X(5)+$R(8)*$Y(5)); /VPT,17,($R(1)+$R(2)*$X(7)+$R(3)*$Y(7))/(1+$R(7)*$X(7)+$R(8)*$Y(7)),($R(4)+$R(5)*$X(7)+$R(6)*$Y(7))/(1+$R(7)*$X(7)+$R(8)*$Y(7)); /VPT,21,($X(11)+$X(13))/2,($Y(11)+$Y(13))/2; /VPT,22,($X(11)+$X(14))/2,($Y(11)+$Y(14))/2; /GEOM,1,15,21,17,22,0,23,3; centre M3,$X(11),$Y(11),$X(12),$Y(12),$X(23),$Y(23); /VRL,11,$VAL; M3,$X(13),$Y(13),$X(14),$Y(14),$X(23),$Y(23); /VRL,12,$VAL; MD,$X(11),$Y(11),$X(13),$Y(13); /VRL,13,$VAL; MD,$X(12),$Y(12),$X(14),$Y(14); /VRL,14,$VAL; /IF,$R(13)[EQ]$R(14),/GTO,EAALT3; /IF,$R(11)[LT]0.000001,/GTO,EAALT2; /IF,$R(11)[GT]359.999999,/GTO,EAALT2; /IF,$R(12)[LT]0.000001,/GTO,EAALT1; /IF,$R(12)[GT]359.999999,/GTO,EAALT1; .EAALT1; E4,$X(23),$Y(23),$X(11),$Y(11),$X(13),$Y(13),$X(12),$Y(12),/GTO,PREDRAWELLIPSE; .EAALT2; E4,$X(23),$Y(23),$X(14),$Y(14),$X(13),$Y(13),$X(12),$Y(12),/GTO,PREDRAWELLIPSE; .EAALT3; EP,$X(11),$Y(11),$X(12),$Y(12),$X(13),$Y(13); .PREDRAWELLIPSE; /LST; /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; /EEX,1,P,3,A,/VPT,3,$PNTX,$PNTY; YE,1002; and erased there /VPT,35,($R(1)+$R(2)*$X(35)+$R(3)*$Y(35))/(1+$R(7)*$X(35)+$R(8)*$Y(35)),($R(4)+$R(5)*$X(35)+$R(6)*$Y(35))/(1+$R(7)*$X(35)+$R(8)*$Y(35)); /VPT,36,($R(1)+$R(2)*$X(36)+$R(3)*$Y(36))/(1+$R(7)*$X(36)+$R(8)*$Y(36)),($R(4)+$R(5)*$X(36)+$R(6)*$Y(36))/(1+$R(7)*$X(36)+$R(8)*$Y(36)); /VPT,37,($R(1)+$R(2)*$X(37)+$R(3)*$Y(37))/(1+$R(7)*$X(37)+$R(8)*$Y(37)),($R(4)+$R(5)*$X(37)+$R(6)*$Y(37))/(1+$R(7)*$X(37)+$R(8)*$Y(37)); YC,1000; /EA,$X(1),$Y(1),$X(2),$Y(2),$X(3),$Y(3),$X(35),$Y(35),$X(36),$Y(36),$X(37),$Y(37); /GTO,LOOP1; ; .QUADRATICBEZIER; /EEX,1,C,!,/VIN,11,$VAL; Line Color /EEX,1,T,!,/VIN,12,$VAL; Line Type /EEX,1,W,!,/VIN,13,$VAL; Line Width LC,$I(11); LT,$I(12); LW,$I(13); YC,1000; /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; /EEX,1,P,3,A,/VPT,3,$PNTX,$PNTY; /EEX,1,L,1002; set aside YE,1002; and erased there ; now approximating Rational Bezier by Curve CV /VIN,3,11; single point index /VRL,10,0.05; parameter step /VRL,11,0; parameter .PARABOLAPOINT; by De Casteljau /VPT,4,$X(1)+$R(11)*($X(2)-$X(1)),$Y(1)+$R(11)*($Y(2)-$Y(1)); /VPT,5,$X(2)+$R(11)*($X(3)-$X(2)),$Y(2)+$R(11)*($Y(3)-$Y(2)); /VPT,6,$X(4)+$R(11)*($X(5)-$X(4)),$Y(4)+$R(11)*($Y(5)-$Y(4)); /VPT,$I(3),($R(1)+$R(2)*$X(6)+$R(3)*$Y(6))/(1+$R(7)*$X(6)+$R(8)*$Y(6)),($R(4)+$R(5)*$X(6)+$R(6)*$Y(6))/(1+$R(7)*$X(6)+$R(8)*$Y(6)); /VRL,11,$R(11)+$R(10); /VIN,3,$I(3)+1; /IF,$I(3)[GE]32,/GTO,DRAWQUADRATIC; /GTO,PARABOLAPOINT; .DRAWQUADRATIC; CV,$X(11),$Y(11),$X(12),$Y(12),$X(13),$Y(13),$X(14),$Y(14),$X(15),$Y(15),$X(16),$Y(16),$X(17),$Y(17),$X(18),$Y(18),$X(19),$Y(19),$X(20),$Y(20),$X(21),$Y(21),$X(22),$Y(22),$X(23),$Y(23),$X(24),$Y(24),$X(25),$Y(25),$X(26),$Y(26),$X(27),$Y(27),$X(28),$Y(28),$X(29),$Y(29),$X(30),$Y(30),$X(31),$Y(31),PU; /GTO,LOOP1; ; .BEZIER; /EEX,1,C,!,/VIN,11,$VAL; Line Color /EEX,1,T,!,/VIN,12,$VAL; Line Type /EEX,1,W,!,/VIN,13,$VAL; Line Width LC,$I(11); LT,$I(12); LW,$I(13); YC,1000; /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,1,P,2,A,/VPT,2,$PNTX,$PNTY; /EEX,1,P,3,A,/VPT,3,$PNTX,$PNTY; /EEX,1,P,4,A,/VPT,4,$PNTX,$PNTY; /EEX,1,L,1002; set aside YE,1002; and erased there ; now approximating Rational Bezier by Curve CV /VIN,3,11; single point index /VRL,10,0.05; parameter step /VRL,11,0; parameter .BEZIERPOINT; by De Casteljau /VPT,5,$X(1)+$R(11)*($X(2)-$X(1)),$Y(1)+$R(11)*($Y(2)-$Y(1)); /VPT,6,$X(2)+$R(11)*($X(3)-$X(2)),$Y(2)+$R(11)*($Y(3)-$Y(2)); /VPT,7,$X(3)+$R(11)*($X(4)-$X(3)),$Y(3)+$R(11)*($Y(4)-$Y(3)); /VPT,8,$X(5)+$R(11)*($X(6)-$X(5)),$Y(5)+$R(11)*($Y(6)-$Y(5)); /VPT,9,$X(6)+$R(11)*($X(7)-$X(6)),$Y(6)+$R(11)*($Y(7)-$Y(6)); /VPT,10,$X(8)+$R(11)*($X(9)-$X(8)),$Y(8)+$R(11)*($Y(9)-$Y(8)); /VPT,$I(3),($R(1)+$R(2)*$X(10)+$R(3)*$Y(10))/(1+$R(7)*$X(10)+$R(8)*$Y(10)),($R(4)+$R(5)*$X(10)+$R(6)*$Y(10))/(1+$R(7)*$X(10)+$R(8)*$Y(10)); /VRL,11,$R(11)+$R(10); /VIN,3,$I(3)+1; /IF,$I(3)[GE]32,/GTO,DRAWBEZIER; /GTO,BEZIERPOINT; .DRAWBEZIER; CV,$X(11),$Y(11),$X(12),$Y(12),$X(13),$Y(13),$X(14),$Y(14),$X(15),$Y(15),$X(16),$Y(16),$X(17),$Y(17),$X(18),$Y(18),$X(19),$Y(19),$X(20),$Y(20),$X(21),$Y(21),$X(22),$Y(22),$X(23),$Y(23),$X(24),$Y(24),$X(25),$Y(25),$X(26),$Y(26),$X(27),$Y(27),$X(28),$Y(28),$X(29),$Y(29),$X(30),$Y(30),$X(31),$Y(31),PU; /GTO,LOOP1; ;********************************** .GRANDEXIT; /DEL; CG,Y,1000,!,Y,$I(2),!; RD; RN,Pre-Collineation; /MSP,--,/XMD,--,PU; end of macro **