; ;HELMERT TRANSFORMATION - Similarity Transformation enhanced by the Method of the Least Squares ; ; Author: Milan Anthony Vlasak, Eng. ;<@> January 2006, Brisbane, Queensland, Australia ;<#> This Macro is Version 01 and it is free for use for General Cadd Pro users ; EN,Pre-HELMERT,; /VLC; MO; BR,--; OR,--; OS,O,--; CF,++; YE,1000; YE,1001; YE,1002; RD; ; /DVM,16; YC,!; /VIN,2,$VAL; ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN0.TMP,#;....Settings file /FOP,$STR,R; /VIN,1,11; .LOOP22; /IF,$I(1)[GT]15,/GTO,END22; /FRD,1; /VST,$I(1),$STR; /VIN,1,$I(1)+1; /GTO,LOOP22; .END22; /FCL,1; ; /IF,$S(11)[NE]ONAPPROVESIZEFACTOR,/VST,11,OFFAPPROVESIZEFACTOR,/VST,21,Off; /IF,$S(12)[NE]ONTEXTDEVICE,/VST,12,OFFTEXTDEVICE,/VST,22,Off; /IF,$S(13)[NE]ONCOMPONENTDEVICE,/VST,13,OFFCOMPONENTDEVICE,/VST,23,Off; /IF,$S(14)[NE]ONROTATETEXT,/VST,14,OFFROTATETEXT,/VST,24,Off; /IF,$S(15)[NE]ONDATAANALYSIS,/VST,15,OFFDATAANALYSIS,/VST,25,Off; ; /IF,$S(11)[EQ]ONAPPROVESIZEFACTOR,/VST,21,ON; /IF,$S(12)[EQ]ONTEXTDEVICE,/VST,22,ON; /IF,$S(13)[EQ]ONCOMPONENTDEVICE,/VST,23,ON; /IF,$S(14)[EQ]ONROTATETEXT,/VST,24,ON; /IF,$S(15)[EQ]ONDATAANALYSIS,/VST,25,ON; ; /MSP,++,/XMD,++; /SEL,Select the SUBJECTS for Similarity Transformation......[Welcome to Helmert Transformation]......> Destination layer is your current layer - exciting ! <,#; /IF,$VAL[EQ]0,/GTO,GRANDEXIT; CO,L,!,!,!,1; CG,P,!,Y,1001,!; ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN1.TMP,#;....X'-i model /FOP,$STR,W; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN2.TMP,#;....Y'-i model /FOP,$STR,W; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN3.TMP,#;....Ksi-i subject /FOP,$STR,W; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN4.TMP,#;....Eta-i subject /FOP,$STR,W; ; /VIN,0,1;............................i-index /VIN,1,1; /VRL,1,1; .MORELINES; /MSP,--,/MSP,++; /PMT,1,'>> Draw Transit Line number: ',$I(0),' from Subject to Model >>',#; /PMT,2,' ',#; /PMT,3,' Tip: SNAP a point at Subject area and then SNAP a point at Model area',#; /XMD,--; BW,@,@,$PNTX,$PNTY,$PNTX,$PNTY; /XMD,++; ; CG,T,!,Y,1000,!; ; /LST; /EEX,1,C,!; /DEL; /IF,$VAL[NE]12,/GTO,JUMPWEIGHTS; ; /MSP,--,/MSP,++; /DVM,0; DV,0; /IF,$I(0)[EQ]1,/PMT,1,' Pre-set weight is: ',$R(1),' ','^^^MI^^gnore_weights=[Esc]',#; /IF,$I(0)[GT]1,/PMT,1,' Previous weight was: ',$R(1),' ','^^^MQ^^uit',#; /PMT,2,' ^^^MC^^hange_Weight',#; /IF,$I(0)[EQ]1,/PMT,3,' ^^^MM^^ake_weight_=_1',' ','^^^MA^^ccept_pre-set_weight=[Ret]',#; /IF,$I(0)[GT]1,/PMT,3,' ^^^MM^^ake_weight_=_1',' ','^^^MA^^ccept_previous_weight=[Ret]',#; /CIN; /IF,$STR[EQ]A,/GTO,DOWEIGHT; /IF,$VAL[EQ]-1,/GTO,DOWEIGHT; /IF,$STR[EQ]M,/VRL,1,1,/GTO,DOWEIGHT; /IF,$STR[EQ]C,/GTO,CHANGEWEIGHT; /IF,$STR[EQ]I,/GTO,IGNOREWEIGHTS; /IF,$VAL[EQ]-2,/GTO,IGNOREWEIGHTS; /IF,$STR[EQ]Q,YE,1001,/GTO,GRANDEXIT; ; .IGNOREWEIGHTS; /MSP,--,/MSP,++; /PMT,1,' In order to make the macro ignore weights you should',#; /PMT,2,' change now the current RED (12) LC Line Color to any OTHER color',#; /PMT,3,' Enter Line Color number > ',#; /XMD,--; LC,~; /VIN,2,$VAL; /XMD,++; CG,T,!,C,$I(2),!; /GTO,JUMPWEIGHTS; ; .CHANGEWEIGHT; /MSP,--,/MSP,++; /PMT,1,' Changing Weight for this Transit Line number: ',$I(0),#; /PMT,2,' Last weight was: ',$R(1),#; /PMT,3,' Enter Weight as integer > ',#; /VRL,1,~;..........................Weight ; .DOWEIGHT; CO,T,!,!,!,$ABS($ROUND($R(1)-1)); ; .JUMPWEIGHTS; /DVM,16; ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; /IF,$I(0)[EQ]2,/GTO,HELMERTTWOVECTORS; /IF,$I(0)[GE]3,/GTO,HELMERTTHREEORMOREVECTORS; ; /MSP,--,/MSP,++; ;******************************************************************* /IF,$S(11)[EQ]ONAPPROVESIZEFACTOR,/GTO,COPYWITHSIZEOPTION; ;******************************************************************* .COPYNOSIZEOPTION; /PMT,1,'Next step:','_*_^^^MS^^pacebar_for_NEXT_Transit_Line',' ','*_[Esc]=Step^^^MB^^ack',' ','*_^^^MQ^^uit',#; /PMT,2,'Operation:',' ','*_[Ret]=^^^MF^^inish_with_this_Transit_Line_number: ',$I(0),#; /PMT,3,'Settings :',' ','*_^^^MA^^pprove_Size_Factor(',$S(21),')',#; /CIN; /IF,$STR[EQ]Q,YE,1001,/GTO,GRANDEXIT; /IF,$STR[EQ]B,/GTO,STEPBACK; /IF,$VAL[EQ]-2,/GTO,STEPBACK; /IF,$VAL[EQ]0,/VIN,0,$I(0)+1,/GTO,MORELINES; Spacebar /IF,$STR[EQ]S,/VIN,0,$I(0)+1,/GTO,MORELINES; /IF,$VAL[EQ]-1,/GTO,DATAPROCESS; /IF,$STR[EQ]F,/GTO,DATAPROCESS; /IF,$STR[EQ]A,/GTO,SWITCHA; ; .SWITCHA; /IF,$S(11)[EQ]ONAPPROVESIZEFACTOR,/VST,11,OFFAPPROVESIZEFACTOR,/VST,21,Off,/GTO,COPYNOSIZEOPTION; /IF,$S(11)[EQ]OFFAPPROVESIZEFACTOR,/VST,11,ONAPPROVESIZEFACTOR,/VST,21,ON,/GTO,COPYWITHSIZEOPTION; ; .COPYWITHSIZEOPTION; /PMT,1,'Next step:','_*_^^^MS^^pacebar_for_NEXT_Transit_Line',' ','*_[Esc]=Step^^^MB^^ack',' ','*_^^^MQ^^uit',#; /PMT,2,'Operation:',' ','*_[Ret]=^^^MF^^inish_with_this_Transit_Line_number: ',$I(0),#; /PMT,3,'Settings :',' ','*_^^^MA^^pprove_Size_Factor(',$S(21),')',' ','*_^^^MT^^ext_Device(',$S(22),')',' ','* ^^^MC^^omponent_Device(',$S(23),')',#; /CIN; /IF,$STR[EQ]Q,YE,1001,/GTO,GRANDEXIT; /IF,$STR[EQ]B,/GTO,STEPBACK; /IF,$VAL[EQ]-2,/GTO,STEPBACK; /IF,$VAL[EQ]0,/VIN,0,$I(0)+1,/GTO,MORELINES; Spacebar /IF,$STR[EQ]S,/VIN,0,$I(0)+1,/GTO,MORELINES; /IF,$VAL[EQ]-1,/GTO,DATAPROCESS; /IF,$STR[EQ]F,/GTO,DATAPROCESS; /IF,$STR[EQ]A,/GTO,SWITCHA; /IF,$STR[EQ]T,/GTO,SWITCHT; /IF,$STR[EQ]C,/GTO,SWITCHC; ; .SWITCHT; /IF,$S(12)[EQ]ONTEXTDEVICE,/VST,12,OFFTEXTDEVICE,/VST,22,Off,/GTO,COPYWITHSIZEOPTION; /IF,$S(12)[EQ]OFFTEXTDEVICE,/VST,12,ONTEXTDEVICE,/VST,22,ON,/GTO,COPYWITHSIZEOPTION; ; .SWITCHC; /IF,$S(13)[EQ]ONCOMPONENTDEVICE,/VST,13,OFFCOMPONENTDEVICE,/VST,23,Off,/GTO,COPYWITHSIZEOPTION; /IF,$S(13)[EQ]OFFCOMPONENTDEVICE,/VST,13,ONCOMPONENTDEVICE,/VST,23,ON,/GTO,COPYWITHSIZEOPTION; ; .HELMERTTWOVECTORS; /PMT,1,'Next step:','_*_^^^MS^^pacebar_for_NEXT_Transit_Line',' ','*_[Esc]=Step^^^MB^^ack',' ','*_^^^MQ^^uit',#; /PMT,2,'Operation:',' ','*_[Ret]=^^^MF^^inish_with_this_Transit_Line_number: ',$I(0),' ','*_Finish_^^^MI^^nversely_now',' ','*_Continue_^^^MN^^ext_Transit_Line_for_inverted_subject',#; /PMT,3,'Settings :',' ','*_^^^MA^^pprove_Size_Factor(',$S(21),')',' ','_*_^^^MD^^ata_analysis(',$S(25),')',' ','*_^^^MR^^etain_Text_Rotation(',$S(24),')',' ','*_^^^MT^^ext_Device(',$S(22),')',' ','*_^^^MC^^omponent_Device(',$S(23),')',#; /CIN; /IF,$STR[EQ]Q,YE,1001,/GTO,GRANDEXIT; /IF,$STR[EQ]B,/GTO,STEPBACK; /IF,$VAL[EQ]-2,/GTO,STEPBACK; /IF,$VAL[EQ]0,/VIN,0,$I(0)+1,/GTO,MORELINES; Spacebar /IF,$STR[EQ]S,/VIN,0,$I(0)+1,/GTO,MORELINES; /IF,$VAL[EQ]-1,/GTO,DATAPROCESS; /IF,$STR[EQ]F,/GTO,DATAPROCESS; /IF,$STR[EQ]N,/GTO,MIRRORHELMERTN; /IF,$STR[EQ]I,/GTO,MIRRORHELMERTI; ; /IF,$STR[EQ]A,/GTO,SWITCHA3; /IF,$STR[EQ]D,/GTO,SWITCHD3; /IF,$STR[EQ]R,/GTO,SWITCHR3; /IF,$STR[EQ]T,/GTO,SWITCHT3; /IF,$STR[EQ]C,/GTO,SWITCHC3; ; .SWITCHR3; /IF,$S(14)[EQ]ONROTATETEXT,/VST,14,OFFROTATETEXT,/VST,24,Off,/GTO,HELMERTTWOVECTORS; /IF,$S(14)[EQ]OFFROTATETEXT,/VST,14,ONROTATETEXT,/VST,24,ON,/GTO,HELMERTTWOVECTORS; ; .SWITCHD3; /IF,$S(15)[EQ]ONDATAANALYSIS,/VST,15,OFFDATAANALYSIS,/VST,25,Off,/GTO,HELMERTTWOVECTORS; /IF,$S(15)[EQ]OFFDATAANALYSIS,/VST,15,ONDATAANALYSIS,/VST,25,ON,/GTO,HELMERTTWOVECTORS; ; .SWITCHA3; /IF,$S(11)[EQ]ONAPPROVESIZEFACTOR,/VST,11,OFFAPPROVESIZEFACTOR,/VST,21,Off,/GTO,HELMERTTWOVECTORS; /IF,$S(11)[EQ]OFFAPPROVESIZEFACTOR,/VST,11,ONAPPROVESIZEFACTOR,/VST,21,ON,/GTO,HELMERTTWOVECTORS; ; .SWITCHT3; /IF,$S(12)[EQ]ONTEXTDEVICE,/VST,12,OFFTEXTDEVICE,/VST,22,Off,/GTO,HELMERTTWOVECTORS; /IF,$S(12)[EQ]OFFTEXTDEVICE,/VST,12,ONTEXTDEVICE,/VST,22,ON,/GTO,HELMERTTWOVECTORS; ; .SWITCHC3; /IF,$S(13)[EQ]ONCOMPONENTDEVICE,/VST,13,OFFCOMPONENTDEVICE,/VST,23,Off,/GTO,HELMERTTWOVECTORS; /IF,$S(13)[EQ]OFFCOMPONENTDEVICE,/VST,13,ONCOMPONENTDEVICE,/VST,23,ON,/GTO,HELMERTTWOVECTORS; ; .HELMERTTHREEORMOREVECTORS; /PMT,1,'Next step:','_*_^^^MS^^pacebar_for_NEXT_Transit_Line',' ','*_[Esc]=Step^^^MB^^ack',' ','*_^^^MQ^^uit',#; /PMT,2,'Operation:',' ','*_[Ret]=^^^MF^^inish_with_this_Transit_Line_number: ',$I(0),#; /PMT,3,'Settings :',' ','*_^^^MA^^pprove_Size_Factor(',$S(21),')',' ','_*_^^^MD^^ata_analysis(',$S(25),')',' ','*_^^^MR^^etain_Text_Rotation(',$S(24),')',' ','*_^^^MT^^ext_Device(',$S(22),')',' ','*_^^^MC^^omponent_Device(',$S(23),')',#; /CIN; /IF,$STR[EQ]Q,YE,1001,/GTO,GRANDEXIT; /IF,$STR[EQ]B,/GTO,STEPBACK; /IF,$VAL[EQ]-2,/GTO,STEPBACK; /IF,$VAL[EQ]0,/VIN,0,$I(0)+1,/GTO,MORELINES; Spacebar /IF,$STR[EQ]S,/VIN,0,$I(0)+1,/GTO,MORELINES; /IF,$VAL[EQ]-1,/GTO,DATAPROCESS; /IF,$STR[EQ]F,/GTO,DATAPROCESS; ; /IF,$STR[EQ]A,/GTO,SWITCHA4; /IF,$STR[EQ]D,/GTO,SWITCHD4; /IF,$STR[EQ]R,/GTO,SWITCHR4; /IF,$STR[EQ]T,/GTO,SWITCHT4; /IF,$STR[EQ]C,/GTO,SWITCHC4; ; .SWITCHR4; /IF,$S(14)[EQ]ONROTATETEXT,/VST,14,OFFROTATETEXT,/VST,24,Off,/GTO,HELMERTTHREEORMOREVECTORS; /IF,$S(14)[EQ]OFFROTATETEXT,/VST,14,ONROTATETEXT,/VST,24,ON,/GTO,HELMERTTHREEORMOREVECTORS; ; .SWITCHD4; /IF,$S(15)[EQ]ONDATAANALYSIS,/VST,15,OFFDATAANALYSIS,/VST,25,Off,/GTO,HELMERTTHREEORMOREVECTORS; /IF,$S(15)[EQ]OFFDATAANALYSIS,/VST,15,ONDATAANALYSIS,/VST,25,ON,/GTO,HELMERTTHREEORMOREVECTORS; ; .SWITCHA4; /IF,$S(11)[EQ]ONAPPROVESIZEFACTOR,/VST,11,OFFAPPROVESIZEFACTOR,/VST,21,Off,/GTO,HELMERTTHREEORMOREVECTORS; /IF,$S(11)[EQ]OFFAPPROVESIZEFACTOR,/VST,11,ONAPPROVESIZEFACTOR,/VST,21,ON,/GTO,HELMERTTHREEORMOREVECTORS; ; .SWITCHT4; /IF,$S(12)[EQ]ONTEXTDEVICE,/VST,12,OFFTEXTDEVICE,/VST,22,Off,/GTO,HELMERTTHREEORMOREVECTORS; /IF,$S(12)[EQ]OFFTEXTDEVICE,/VST,12,ONTEXTDEVICE,/VST,22,ON,/GTO,HELMERTTHREEORMOREVECTORS; ; .SWITCHC4; /IF,$S(13)[EQ]ONCOMPONENTDEVICE,/VST,13,OFFCOMPONENTDEVICE,/VST,23,Off,/GTO,HELMERTTHREEORMOREVECTORS; /IF,$S(13)[EQ]OFFCOMPONENTDEVICE,/VST,13,ONCOMPONENTDEVICE,/VST,23,ON,/GTO,HELMERTTHREEORMOREVECTORS; ; ;--------------------------------------------------------------------------------------------- ; .MIRRORHELMERTN; ; /MSP,--,/MSP,++; /PMT,1,'........preparing inverted subject---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; /CEL,Y,1000,!; /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,2,P,1,A,/VPT,2,$PNTX,$PNTY; /DEL; MI,Y,1001,!,$X(1),$Y(1),$X(2),$Y(2); Original CG,P,!,Y,1002,!; Mirror Copy ; ;******************************************************************* /IF,$S(14)[EQ]OFFROTATETEXT,/GTO,JUMPREGRESSROTATIONTEXT; ;******************************************************************* FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN13.TMP,#;....Text Rotation /FOP,$STR,W; /CEL,Y,1001,!; /VIN,3,$VAL; /VIN,1,1; ..........................$I(1) Counter Integer .CREATETEXTROTATIONLIST; /IF,$I(1)[GT]$I(3),/GTO,TEXTROTATIONLISTDONE; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,CREATETEXTROTATIONLIST; /EEX,$I(1),V,3,A; /VRL,2,$STR; .......................$R(2) Text Rotation /FWR,5,$R(2),#; /VIN,1,$I(1)+1,/GTO,CREATETEXTROTATIONLIST; .TEXTROTATIONLISTDONE; /DEL; /FCL,5; ; /CEL,Y,1002,!; /VIN,3,$VAL; /VIN,1,1; /FOP,TEMPHELMERTMILAN13.TMP,R; .RETAINROTATIONTEXT; /IF,$I(1)[GT]$I(3),/GTO,REGRESSROTATIONDONE; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,RETAINROTATIONTEXT; /FRD,5; /VRL,2,$STR; /EEX,$I(1),V,3,N,$R(2); /VIN,1,$I(1)+1,/GTO,RETAINROTATIONTEXT; .REGRESSROTATIONDONE; /DEL; /FCL,5; .JUMPREGRESSROTATIONTEXT; ; >>>>>>>>>> YE,1001; YG,1002,Y,1001,!; RD; /VIN,0,$I(0)+1; /GTO,MORELINES; ; .MIRRORHELMERTI; /CEL,Y,1000,!; /EEX,1,P,1,A,/VPT,1,$PNTX,$PNTY; /EEX,2,P,1,A,/VPT,2,$PNTX,$PNTY; /DEL; ; /MSP,--,/MSP,++; /PMT,1,'........working out inverted subject---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; MI,Y,1001,!,$X(1),$Y(1),$X(2),$Y(2); CG,P,!,Y,1002,!; ; ;******************************************************************* /IF,$S(14)[EQ]OFFROTATETEXT,/GTO,JUMPREGRESSROTATIONTEXT1; ;******************************************************************* ; text rotation list FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN13.TMP,#;....Text Rotation List /FOP,$STR,W; /CEL,Y,1001,!; /VIN,3,$VAL; /VIN,1,1; ..........................$I(1) Counter Integer .CREATETEXTROTATIONLIST1; /IF,$I(1)[GT]$I(3),/GTO,TEXTROTATIONLISTDONE1; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,CREATETEXTROTATIONLIST1; /EEX,$I(1),V,3,A; /VRL,2,$STR; .......................$R(2) Text Rotation /FWR,5,$R(2),#; /VIN,1,$I(1)+1,/GTO,CREATETEXTROTATIONLIST1; .TEXTROTATIONLISTDONE1; /DEL; /FCL,5; ; regress text rotation /CEL,Y,1002,!; /VIN,3,$VAL; /VIN,1,1; /FOP,TEMPHELMERTMILAN13.TMP,R; .RETAINROTATIONTEXT1; /IF,$I(1)[GT]$I(3),/GTO,REGRESSROTATIONDONE1; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,RETAINROTATIONTEXT1; /FRD,5; /VRL,2,$STR; /EEX,$I(1),V,3,N,$R(2); /VIN,1,$I(1)+1,/GTO,RETAINROTATIONTEXT1; .REGRESSROTATIONDONE1; /DEL; /FCL,5; .JUMPREGRESSROTATIONTEXT1; ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> YE,1001; YG,1002,Y,1001,!; RD; /GTO,DATAPROCESS; ; .STEPBACK; OO,OO; /GTO,MORELINES; ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .DATAPROCESS; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN0.TMP,#;....Settings file write /FOP,$STR,W; /VIN,1,11; .LOOP23; /IF,$I(1)[GT]15,/GTO,END23; /FWR,5,$S($I(1)),#; /VIN,1,$I(1)+1; /GTO,LOOP23; .END23; /FCL,5; ; /MSP,--,/MSP,++; /PMT,1,'........working out parameters---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; /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,1,$PNTX,$PNTY; /EEX,$I(1),P,2,A,/VPT,2,$PNTX,$PNTY; /FWR,1,$X(2),#;......................X'-i model /FWR,2,$Y(2),#;......................Y'-i model /FWR,3,$X(1),#;......................Ksi-i subject /FWR,4,$Y(1),#;......................Eta-i subject /VIN,1,$I(1)+1; /GTO,LOOP0; .END0; /DEL; /FCL,1; /FCL,2; /FCL,3; /FCL,4; ; /VRL,1,0; /VIN,1,1; /FOP,TEMPHELMERTMILAN1.TMP,R; .LOOP1; /IF,$I(1)[GT]$I(0),/GTO,END1; /FRD,1; /VRL,1,$R(1)+$STR; /VIN,1,$I(1)+1; /GTO,LOOP1; .END1; /VRL,5,$R(1)/$I(0);...................X'-o model /FCL,1; ; /VRL,2,0; /VIN,1,1; /FOP,TEMPHELMERTMILAN2.TMP,R; .LOOP2; /IF,$I(1)[GT]$I(0),/GTO,END2; /FRD,1; /VRL,2,$R(2)+$STR; /VIN,1,$I(1)+1; /GTO,LOOP2; .END2; /VRL,6,$R(2)/$I(0);...................Y'-o model /FCL,1; ; /VRL,3,0; /VIN,1,1; /FOP,TEMPHELMERTMILAN3.TMP,R; .LOOP3; /IF,$I(1)[GT]$I(0),/GTO,END3; /FRD,1; /VRL,3,$R(3)+$STR; /VIN,1,$I(1)+1; /GTO,LOOP3; .END3; /VRL,7,$R(3)/$I(0);...................Ksi-0 subject /FCL,1; ; /VRL,4,0; /VIN,1,1; /FOP,TEMPHELMERTMILAN4.TMP,R; .LOOP4; /IF,$I(1)[GT]$I(0),/GTO,END4; /FRD,1; /VRL,4,$R(4)+$STR; /VIN,1,$I(1)+1; /GTO,LOOP4; .END4; /VRL,8,$R(4)/$I(0);...................Eta-0 subject /FCL,1; ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN5.TMP,#; /FOP,$STR,W;..............................file 1 /VIN,1,1; /FOP,TEMPHELMERTMILAN3.TMP,R;.............file 2 .LOOP5; /IF,$I(1)[GT]$I(0),/GTO,END5; /FRD,2; /VRL,0,$STR; /VRL,0,$R(0)-$R(7);...................DELTA-Ksi-i /FWR,1,$R(0),#; /VIN,1,$I(1)+1; /GTO,LOOP5; .END5; /FCL,1; /FCL,2; ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN6.TMP,#; /FOP,$STR,W;..............................file 1 /VIN,1,1; /FOP,TEMPHELMERTMILAN4.TMP,R;.............file 2 .LOOP6; /IF,$I(1)[GT]$I(0),/GTO,END6; /FRD,2; /VRL,0,$STR; /VRL,0,$R(0)-$R(8);...................DELTA-Eta-i /FWR,1,$R(0),#; /VIN,1,$I(1)+1; /GTO,LOOP6; .END6; /FCL,1; /FCL,2; ; /VIN,1,1; /VRL,11,0; /FOP,TEMPHELMERTMILAN5.TMP,R; .LOOP7; /IF,$I(1)[GT]$I(0),/GTO,END7; /FRD,1; /VRL,9,$STR; /VRL,11,$R(11)+$SQR($R(9));.............sum11=[(Delta-Ksi-i)^2] /VIN,1,$I(1)+1; /GTO,LOOP7; .END7; /FCL,1; ; /VIN,1,1; /VRL,12,0; /FOP,TEMPHELMERTMILAN6.TMP,R; .LOOP8; /IF,$I(1)[GT]$I(0),/GTO,END8; /FRD,1; /VRL,10,$STR; /VRL,12,$R(12)+$SQR($R(10));.............sum12=[(Delta-Eta-i)^2] /VIN,1,$I(1)+1; /GTO,LOOP8; .END8; /FCL,1; ; /VIN,1,1; /VRL,13,0; /FOP,TEMPHELMERTMILAN5.TMP,R; /FOP,TEMPHELMERTMILAN2.TMP,R; .LOOP9; /IF,$I(1)[GT]$I(0),/GTO,END9; /FRD,1; /VRL,1,$STR; /FRD,2; /VRL,2,$STR; /VRL,13,$R(13)+$R(1)*$R(2);.............sum13=[(Delta-Ksi-i)*(Y-i)] /VIN,1,$I(1)+1; /GTO,LOOP9; .END9; /FCL,1; /FCL,2; ; /VIN,1,1; /VRL,14,0; /FOP,TEMPHELMERTMILAN6.TMP,R; /FOP,TEMPHELMERTMILAN1.TMP,R; .LOOP10; /IF,$I(1)[GT]$I(0),/GTO,END10; /FRD,1; /VRL,1,$STR; /FRD,2; /VRL,2,$STR; /VRL,14,$R(14)+$R(1)*$R(2);.............sum14=[(Delta-Eta-i)*(X-i)] /VIN,1,$I(1)+1; /GTO,LOOP10; .END10; /FCL,1; /FCL,2; ; /VIN,1,1; /VRL,15,0; /FOP,TEMPHELMERTMILAN5.TMP,R; /FOP,TEMPHELMERTMILAN1.TMP,R; .LOOP11; /IF,$I(1)[GT]$I(0),/GTO,END11; /FRD,1; /VRL,1,$STR; /FRD,2; /VRL,2,$STR; /VRL,15,$R(15)+$R(1)*$R(2);.............sum15=[(Delta-Ksi-i)*(X-i)] /VIN,1,$I(1)+1; /GTO,LOOP11; .END11; /FCL,1; /FCL,2; ; /VIN,1,1; /VRL,16,0; /FOP,TEMPHELMERTMILAN6.TMP,R; /FOP,TEMPHELMERTMILAN2.TMP,R; .LOOP12; /IF,$I(1)[GT]$I(0),/GTO,END12; /FRD,1; /VRL,1,$STR; /FRD,2; /VRL,2,$STR; /VRL,16,$R(16)+$R(1)*$R(2);.............sum16=[(Delta-Eta-i)*(Y-i)] /VIN,1,$I(1)+1; /GTO,LOOP12; .END12; /FCL,1; /FCL,2; ; /VRL,17,($R(13)-$R(14))/($R(11)+$R(12));.......m-coefficient /VRL,18,($R(15)+$R(16))/($R(11)+$R(12));.......n-coefficient ; ;angle /IF,$R(17)[GT]0,/IF,$R(18)[GT]0,/VRL,19,$ATN(($R(17))/($R(18))); /IF,$R(17)[GT]0,/IF,$R(18)[LT]0,/VRL,19,180+$ATN(($R(17))/($R(18))); /IF,$R(17)[LT]0,/IF,$R(18)[LT]0,/VRL,19,180+$ATN(($R(17))/($R(18))); /IF,$R(17)[LT]0,/IF,$R(18)[GT]0,/VRL,19,360+$ATN(($R(17))/($R(18))); ;arbitrary angle /IF,$ABS($R(17))[LT]0.000000001,/IF,$R(18)[GT]0,/VRL,19,0; /IF,$ABS($R(18))[LT]0.000000001,/IF,$R(17)[GT]0,/VRL,19,90; /IF,$ABS($R(17))[LT]0.000000001,/IF,$R(18)[LT]0,/VRL,19,180; /IF,$ABS($R(18))[LT]0.000000001,/IF,$R(17)[LT]0,/VRL,19,270; ;size /IF,$ABS($SIN($R(19)))[GT]0.6,/VRL,20,$R(17)/$SIN($R(19)); /IF,$ABS($COS($R(19)))[GT]0.6,/VRL,20,$R(18)/$COS($R(19)); ;arbitrary size /IF,$ABS($R(17))[LT]0.000000001,/IF,$R(18)[GT]0,/VRL,20,$R(18); /IF,$ABS($R(18))[LT]0.000000001,/IF,$R(17)[GT]0,/VRL,20,$R(17); /IF,$ABS($R(17))[LT]0.000000001,/IF,$R(18)[LT]0,/VRL,20,0-$R(18); /IF,$ABS($R(18))[LT]0.000000001,/IF,$R(17)[LT]0,/VRL,20,0-$R(17); ; /IF,$R(20)[EQ]0,/VRL,20,1; ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .EXECUTE; RO,Y,1001,!,$R(7),$R(8),$R(19); MV,Y,1001,!,$R(7),$R(8),$R(5),$R(6); SZ,Y,1001,!,$R(5),$R(6),$R(20),$R(20); RD; ; ;******************************************************************* /IF,$S(11)[EQ]OFFAPPROVESIZEFACTOR,/GTO,SIZEAPPROVED; ;******************************************************************* /DVM,14; /MSP,--,/MSP,++; /IF,$I(0)[GT]1,/PMT,1,'>> The best Size Factor to fit would be ',$R(20),' ','^^^MA^^ccept=[Ret]',#; /IF,$I(0)[EQ]1,/PMT,1,'>> The Size Factor is pre-set to ',$R(20),' ','^^^MA^^ccept=[Ret]',#; /PMT,2,' ^^^MC^^hange_Size_Factor',#; /PMT,3,' ^^^MM^^ake_Size_Factor=1.00000000000000',#; ; /CIN; /IF,$STR[EQ]A,/GTO,SIZEAPPROVED; /IF,$VAL[EQ]-1,/GTO,SIZEAPPROVED; /IF,$STR[EQ]M,/VRL,20,1,/GTO,SIZEFORCED1; /IF,$STR[EQ]C,/GTO,FORCEDFACTOR; ; .SIZEFORCED1; OO; ; /MSP,--,/MSP,++; /PMT,1,'........making size 1.00000000000000---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; SZ,Y,1001,!,$R(5),$R(6),1,1; /GTO,SIZEAPPROVED; ; .FORCEDFACTOR; /MSP,--,/MSP,++; /PMT,1,' Changing Size Factor',#; /PMT,2,' Offered Value was (',$R(20),')',#; /PMT,3,' Enter new value > ',#; /VRL,20,~;..........................$R(20) Size Factor Value OO; ; /MSP,--,/MSP,++; /PMT,1,'........changing size---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; SZ,Y,1001,!,$R(5),$R(6),$R(20),$R(20); ; .SIZEAPPROVED; /DVM,16; RD; ; >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> .STATISTICS; ;*********************************************************************** /IF,$I(0)[EQ]1,/GTO,JUMPDATAANALYSIS; /IF,$S(15)[EQ]OFFDATAANALYSIS,/GTO,JUMPDATAANALYSIS; ;*********************************************************************** ; /MSP,--,/MSP,++; /PMT,1,'........working out statistics---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; ; /VRL,17,$R(20)*$SIN($R(19)); /VRL,18,$R(20)*$COS($R(19)); ; /VRL,21,$R(5)+$R(8)*$R(17)-$R(7)*$R(18); ..... x-0 /VRL,22,$R(6)-$R(7)*$R(17)-$R(8)*$R(18); ..... y-0 ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN7.TMP,#;.....x-i x-resulting ..file 1 /FOP,$STR,W; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN8.TMP,#;....Vx-i x-correction ..file 2 /FOP,$STR,W; /FOP,TEMPHELMERTMILAN3.TMP,R; ..file 3 Ksi /FOP,TEMPHELMERTMILAN4.TMP,R; ..file 4 Eta /FOP,TEMPHELMERTMILAN1.TMP,R; ..file 5 X' ; /VIN,1,1; .LOOP13; /IF,$I(1)[GT]$I(0),/GTO,END13; /FRD,3; /VRL,1,$STR; Ksi /FRD,4; /VRL,2,$STR; Eta /FRD,5; /VRL,3,$STR; X' /FWR,1,$R(21)+$R(18)*$R(1)-$R(17)*$R(2),#; ......x in 7 th /FWR,2,$R(21)+$R(18)*$R(1)-$R(17)*$R(2)-$R(3),#; ......Vx in 8th /VIN,1,$I(1)+1; /GTO,LOOP13; .END13; /FCL,1; /FCL,2; /FCL,3; /FCL,4; /FCL,5; ; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN9.TMP,#;.....y-i y-resulting ..file 1 /FOP,$STR,W; FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN10.TMP,#;....Vy-i y-correction ..file 2 /FOP,$STR,W; /FOP,TEMPHELMERTMILAN3.TMP,R; ..file 3 Ksi /FOP,TEMPHELMERTMILAN4.TMP,R; ..file 4 Eta /FOP,TEMPHELMERTMILAN2.TMP,R; ..file 5 Y' ; /VIN,1,1; .LOOP14; /IF,$I(1)[GT]$I(0),/GTO,END14; /FRD,3; /VRL,1,$STR; Ksi /FRD,4; /VRL,2,$STR; Eta /FRD,5; /VRL,3,$STR; Y' /FWR,1,$R(22)+$R(17)*$R(1)+$R(18)*$R(2),#; ......y in 9 th /FWR,2,$R(22)+$R(17)*$R(1)+$R(18)*$R(2)-$R(3),#; ......Vx in 10th /VIN,1,$I(1)+1; /GTO,LOOP14; .END14; /FCL,1; /FCL,2; /FCL,3; /FCL,4; /FCL,5; ; /FOP,TEMPHELMERTMILAN8.TMP,R; ..file 1 /VIN,1,1; /VRL,1,0; .LOOP15; /IF,$I(1)[GT]$I(0),/GTO,END15; /FRD,1; /VRL,0,$STR; Vx /VRL,1,$R(1)+$SQR($R(0)); sum Vx squared /VIN,1,$I(1)+1; /GTO,LOOP15; .END15; /FCL,1; ; /FOP,TEMPHELMERTMILAN10.TMP,R; ..file 1 /VIN,1,1; /VRL,2,0; .LOOP16; /IF,$I(1)[GT]$I(0),/GTO,END16; /FRD,1; /VRL,0,$STR; Vx /VRL,2,$R(2)+$SQR($R(0)); sum Vy squared /VIN,1,$I(1)+1; /GTO,LOOP16; .END16; /FCL,1; ; /VRL,3,$SQT($R(1)/$I(0)); /VRL,4,$SQT($R(2)/$I(0)); /VRL,0,$SQT($SQR($R(3))+$SQR($R(4))); ;-------------------------------------------------------------------------- ;X-CORR; /FOP,TEMPHELMERTMILAN8.TMP,R; ..file 1 /VIN,1,1; /VST,1,X-Residual Corr:; .LOOP17; /IF,$I(1)[GT]$I(0),/GTO,END17; /FRD,1; /VRL,30,$STR; /DVM,4; /STR,C,$S(1), ,$R(30),#; /DVM,16; /VST,1,$STR; /VIN,1,$I(1)+1; /GTO,LOOP17; .END17; /FCL,1; ; ;Y-CORR; /FOP,TEMPHELMERTMILAN10.TMP,R; ..file 1 /VIN,1,1; /VST,2,Y-Residual Corr:; .LOOP18; /IF,$I(1)[GT]$I(0),/GTO,END18; /FRD,1; /VRL,31,$STR; /DVM,4; /STR,C,$S(2), ,$R(31),#; /DVM,16; /VST,2,$STR; /VIN,1,$I(1)+1; /GTO,LOOP18; .END18; /FCL,1; ; .P-CORR; /FOP,TEMPHELMERTMILAN8.TMP,R; ..file 1 /FOP,TEMPHELMERTMILAN10.TMP,R; ..file 2 FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN11.TMP,#;.....Point corrections list ..file3 /FOP,$STR,W; /VIN,1,1; /VST,3,Point Residual Corr:; .LOOP19; /IF,$I(1)[GT]$I(0),/GTO,END19; /FRD,1; /VRL,31,$STR; /FRD,2; /VRL,32,$STR; /VRL,33,$SQT($SQR($R(31))+$SQR($R(32))); /FWR,3,$R(33),#; .....Point corrections list ..in 11 th /DVM,4; /STR,C,$S(3), ,$R(33),#; /DVM,16; /VST,3,$STR; /VIN,1,$I(1)+1; /GTO,LOOP19; .END19; /FCL,1; /FCL,2; /FCL,3; ;************************************************************************** /IF,$I(0)[EQ]2,/VST,4,contribution not available,/GTO,JUMPDDCALCULATIONS; ;************************************************************************** ;sum of distances squared /FOP,TEMPHELMERTMILAN1.TMP,R; ..file 1 /FOP,TEMPHELMERTMILAN2.TMP,R; ..file 2 /VIN,1,1; /VRL,36,0; .LOOP20; /IF,$I(1)[GT]$I(0),/GTO,END20; /FRD,1; /VRL,34,$STR; /FRD,2; /VRL,35,$STR; /VRL,36,$R(36)+$SQR($R(34)-$R(5))+$SQR($R(35)-$R(6)); [Si^2] /VIN,1,$I(1)+1; /GTO,LOOP20; .END20; /FCL,1; /FCL,2; ; ;dd-calculation /FOP,TEMPHELMERTMILAN1.TMP,R; ..file 1 /FOP,TEMPHELMERTMILAN2.TMP,R; ..file 2 /FOP,TEMPHELMERTMILAN8.TMP,R; ..file 3 /FOP,TEMPHELMERTMILAN10.TMP,R; ..file 4 FP,B,!,!; /STR,C,$STR,TEMPHELMERTMILAN12 .TMP,#;.....[dd] contribution list ..file5 /FOP,$STR,W; /VIN,1,1; /VST,4,Contribution: .LOOP21; /IF,$I(1)[GT]$I(0),/GTO,END21; /FRD,1; /VRL,37,$STR; /FRD,2; /VRL,38,$STR; ; /FRD,3; /VRL,39,$STR; /FRD,4; /VRL,40,$STR; /VRL,41,$SQR($R(39))+$SQR($R(40)); ..Vx^2+Vy^2 /VRL,42,$SQR($R(37)-$R(5))+$SQR($R(38)-$R(6)); ..Si^2 /VRL,43,$R(41)/((($I(0)-1)/$I(0))-($R(42)/$R(36))); /FWR,5,$R(43),#; .....[dd] contribution ; /DVM,4; /VST,0,$R(43); /STR,C,$S(4), ,$S(0),#; /VST,4,$STR; /DVM,16; ; /VIN,1,$I(1)+1; /GTO,LOOP21; .END21; /FCL,1; /FCL,2; /FCL,3; /FCL,4; /FCL,5; .JUMPDDCALCULATIONS; ; /MSP,--,/MSP,++; /DVM,6; /PMT,1,'X-Dev:',$R(3),' ','Y-Dev:',$R(4),' ','P-Dev:',$R(0),' ','Pairs used:',$I(0),' ','Size Factor:',$R(20),' ','Rotation:',$R(19),'Deg',' ','[Spacebar to finish......]',#; /PMT,2,$S(1),' ',$S(3),#; /PMT,3,$S(2),' ','[ (dd) ]',$S(4),#; /CIN; /IF,$VAL[EQ]0,/GTO,EXIT; Spacebar ; .JUMPDATAANALYSIS; ; ;PO,$R(5),$R(6); Centre Gravity of Model Identical Points ;PO,$R(7),$R(8); Centre Gravity of Subject Identical Points ; .EXIT; ; ;************************************************************************** /IF,$I(0)[EQ]1,/IF,$S(11)[EQ]OFFAPPROVESIZEFACTOR,/GTO,GRANDEXIT; /IF,$I(0)[EQ]1,/GTO,JUMPROTATETEXT; ;************************************************************************** ; /CEL,Y,1001,!; /VIN,0,$VAL;...................$I(0) Number of Entities .ROTATETEXT; /IF,$S(14)[EQ]OFFROTATETEXT,/GTO,JUMPROTATETEXT; WB,2; /MSP,--,/MSP,++; /PMT,1,'........text rotation regress working---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; /VIN,1,1;..........................$I(1) Counter Integer .LOOPFORROTATETEXT; /IF,$I(1)[GT]$I(0),/GTO,TEXTDEVICE; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,LOOPFORROTATETEXT; /EEX,$I(1),V,3,A; /VRL,1,$STR;.......................$R(1) Text Rotation /EEX,$I(1),V,3,N,$R(1)-$R(19); /VIN,1,$I(1)+1,/GTO,LOOPFORROTATETEXT; .JUMPROTATETEXT; ; .TEXTDEVICE; /CEL,Y,1001,!; /VIN,0,$VAL;...................$I(0) Number of Entities /IF,$S(12)[EQ]OFFTEXTDEVICE,/GTO,JUMPTEXTDEVICE; WB,2; /MSP,--,/MSP,++; /PMT,1,'........text device working---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; /VIN,1,1;..........................$I(1) Counter Integer .LOOPFORTEXT; /IF,$I(1)[GT]$I(0),/GTO,COMPONENTDEVICE; /EEX,$I(1),E; /IF,$VAL[NE]24,/VIN,1,$I(1)+1,/GTO,LOOPFORTEXT; /EEX,$I(1),V,1,A; /VRL,1,$STR;.......................$R(1) Text X Scale /EEX,$I(1),V,1,N,$R(1)/$R(20); /EEX,$I(1),V,2,A; /VRL,2,$STR;.......................$R(2) Text X Scale /EEX,$I(1),V,2,N,$R(2)/$R(20); /VIN,1,$I(1)+1,/GTO,LOOPFORTEXT; .JUMPTEXTDEVICE; ; .COMPONENTDEVICE; /CEL,Y,1001,!; /VIN,0,$VAL;...................$I(0) Number of Entities /IF,$S(13)[EQ]OFFCOMPONENTDEVICE,/GTO,JUMPCOMPONENTDEVICE; WB,2; /MSP,--,/MSP,++; /PMT,1,'........component device working---------------->',#; /PMT,2,' ',#; /PMT,3,' ',#; /VIN,1,1;..........................$I(1) Counter Integer .LOOPFORCOMPONENTS; /IF,$I(1)[GT]$I(0),/GTO,GRANDEXIT; /EEX,$I(1),E; /IF,$VAL[NE]32,/VIN,1,$I(1)+1,/GTO,LOOPFORCOMPONENTS; /EEX,$I(1),V,1,A; /VRL,1,$STR;.......................$R(1) Component X Scale /EEX,$I(1),V,1,N,$R(1)/$R(20); /EEX,$I(1),V,2,A; /VRL,2,$STR;.......................$R(2) Component X Scale /EEX,$I(1),V,2,N,$R(2)/$R(20); /VIN,1,$I(1)+1,/GTO,LOOPFORCOMPONENTS; .JUMPCOMPONENTDEVICE; ; .GRANDEXIT; /DEL; YE,1000; CG,Y,1001,!,Y,$I(2),!; RD; /DVM,0; RN,Pre-HELMERT; /MSP,--,/XMD,--,PU; end of macro **