;;; CADDPAK 2003 General Macro Package for General CADD Pro ;;; OFFSETLI.MCR linear offset macro ;;; Copyright 2003 by Bjorn R Holmgren; all rights reserved. ;;; ;;; THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. ;;; ALL IMPLIED WARRANTIES OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF ;;; MERCHANTABILITY ARE HEREBY DISCLAIMED. ;;; /MSP,++,/XMD,++; /VLC,; ; .INITIALISE; MO,RB,--,OD,--; OR,??,/VIN,13,$VAL,OR,--; /VST,18,'',/VST,1,'',/VST,2,''; TO,!,/VRL,12,$VAL,TO,.5; /VST,5,O,/VST,6,0; /VRL,14,$S(6); ; .MODE; /PMT,1,'^^^GSelect Offset Mode^^ ... for : ^G',$S(5),'^^',#; /PMT,2,'^^Single_^MO^^ffset ^MT^^hrough', %55,'^MU^^ndo ^MQ^^uit',#,|; '^^Multi_O^MF^^FSET Multi_T^MH^^rough',%49,'^MZ^^oom',%59,'^MR^^edo ',#,/CIN,/PMT,2,#,/PMT,3,#; /VST,18,$STR; /IF,$VAL[EQ]0,/GTO,MODE; /IF,$VAL[EQ]-1,/IF,$S(5)[EQ]T,/VST,18,T,/VST,1,''; /IF,$VAL[EQ]-1,/IF,$S(5)[EQ]O,/VST,18,O,/VST,1,''; /IF,$VAL[EQ]-1,/IF,$S(5)[EQ]MULTITHR,/VST,18,T,/VST,1,$S(5); /IF,$VAL[EQ]-1,/IF,$S(5)[EQ]MULTIOFF,/VST,18,O,/VST,1,$S(5); /IF,$VAL[EQ]-2,/GTO,EXIT; /IF,$STR[EQ]O,/VST,5,$S(18),/VST,1,''; /IF,$STR[EQ]T,/VST,5,$S(18),/VST,1,''; /IF,$STR[EQ]F,/VST,18,O,/VST,1,MULTIOFF,/VST,5,$S(1); /IF,$STR[EQ]H,/VST,18,T,/VST,1,MULTITHR,/VST,5,$S(1); /IF,$STR[EQ]Q,/GTO,EXIT; /IF,$STR[EQ]U,OO,/GTO,MODE; /IF,$STR[EQ]R,UU,/GTO,MODE; /IF,$STR[EQ]Z,/GTO,ZOOM; ; .DISTANCE; /IF,$S(18)[EQ]T,/GTO,SELECT; RB,++; /PMT,1,'^^^GEnter Distance to Offset^^ ... for : ^G',$R(14),'^^ New :_',#; /VRL,4,~; OFFSET DISTANCE /IF,$DERR[EQ]-1,/VRL,4,$R(14); /IF,$DERR[EQ]-2,/GTO,EXIT; /VRL,14,$R(4); ; .SELECT; RB,--; /IF,$S(2)[EQ]CHANGEMODE,/VST,2,'',/GTO,PICKSIDE; SE,!; /PMT,3,#,/PMT,2,#; /PMT,1,'^^^GPick Object to Offset^^ ... to set Mode ...',#; /IF,$S(1)[NE]'',/PMT,2,'Offset Mode at next Prompt ... to Undo Last ...',#; /VPT,0,@; /IF,$DERR[EQ]-2,/GTO,MODE; /IF,$DERR[EQ]-1,OO,/GTO,SELECT; /IF,$DERR[NE]0,/GTO,EXIT; /VPT,0,TK,L,PU; /CEL,O,$X(0),$Y(0),!; /IF,$VAL[EQ]0,/DEL,/PMT,3,'No Object found ... Pick again ...',#,/GTO,SELECT; ; /EEX,1,E,/VIN,0,$VAL; /EEX,1,P,1,A,!,/VPT,0,$PNTX,$PNTY; /EEX,1,P,2,A,!,/VPT,1,$PNTX,$PNTY; /EEX,1,P,3,A,!,/VPT,4,$PNTX,$PNTY; /DEL; /IF,$I(0)[EQ]11,/VPT,1,$X(4),$Y(4); ME,2,$X(0),$Y(0),$X(1),$Y(1),/VRL,0,$VAL; $R(0) OBJECT ANGLE ; /PMT,2,#,/PMT,3,#; /IF,$I(0)[EQ]11,/PMT,2,'^^^GFor ARC^^ ... Ref Point is chord through end points ...',#; /IF,$S(18)[EQ]T,/GTO,THROUGH; ; .PICKSIDE; /PMT,1,'^^^GPick Side for Offset^^ ... abort ...',#; /GTO,PICKEDSIDE; ; .THROUGH; /PMT,1,'^^^GPick Offset Through Point^^ ... abort ...',#; ; .PICKEDSIDE; /PMT,3,' to change offset mode or offset distance ... ',$S(18),' ',$S(1),#; /VPT,2,@; /IF,$DERR[EQ]-1,/VST,2,CHANGEMODE,/GTO,MODE; /IF,$DERR[EQ]-2,/GTO,SELECT; /IF,$DERR[NE]0,/GTO,EXIT; /IF,$I(0)[EQ]10,/GTO,CIRCLE; /VPT,2,TK,L,PU; ME,2,$X(0),$Y(0),$X(2),$Y(2),/VRL,1,$VAL; R1 POINT ANGLE ; .CALCOFFSET; /VRL,2,$SQT($SQR($X(0)-$X(2))+$SQR($Y(2)-$Y(0))); R2 POINT DISTANCE /VRL,3,$R(2)*$COS($R(0)+90-$R(1)); R3 OFFSET DISTANCE /IF,$S(18)[EQ]O,/IF,$R(3)[LT]0,/VRL,3,(-1*$R(4)); R3 OFFSET O MODE /IF,$S(18)[EQ]O,/IF,$R(3)[GE]0,/VRL,3,$R(4); R3 OFFSET O MODE ; .NEWPOINT; /VPT,3,$X(0)-($R(3)*$COS(360+90-$R(0))),$Y(0)+($R(3)*$SIN(360+90-$R(0))); /GTO,OFFSET; ; .OFFSET; CO,L,!,$X(0),$Y(0),$X(3),$Y(3),1; /IF,$S(1)[EQ]MULTIOFF,/GTO,SELECT; /IF,$S(1)[EQ]MULTITHR,/GTO,SELECT; /GTO,MODE; ; .CIRCLE; /IF,$S(18)[EQ]T,/VPT,3,$X(2),$Y(2),/GTO,OFFSET; ME,D,$X(0),$Y(0),$X(1),$Y(1),PU,/VRL,5,$VAL; /VPT,3,$X(0)+$R(4),$Y(0); /IF,$X(2)[LT]$X(0),/IF,$Y(2)[LT]$Y(0)+$R(5),/IF,$Y(2)[GT]$Y(0)-$R(5),/VPT,3,$X(0)-$R(4),$Y(0); /IF,$X(2)[GT]$X(0),/IF,$Y(2)[LT]$Y(0)+$R(5),/IF,$Y(2)[GT]$Y(0)-$R(5),/VPT,3,$X(0)+$R(4),$Y(0); /IF,$Y(2)[GT]$Y(0)+$R(5),/IF,$X(2)[LT]$X(0)+$R(5),/IF,$X(2)[GT]$X(0)-$R(5),/VPT,3,$X(0),$Y(0)+$R(4); /IF,$Y(2)[LT]$Y(0)-$R(5),/IF,$X(2)[LT]$X(0)+$R(5),/IF,$X(2)[GT]$X(0)-$R(5),/VPT,3,$X(0),$Y(0)-$R(4); ; .OFFSET; CO,L,!,$X(0),$Y(0),$X(3),$Y(3),1; /GTO,SELECT; ; .ZOOM; /PMT,3,#,/PMT,1,'Select Zoom Mode ...',%45,' to abort ...',#; /PMT,2,'^^^MW^^indow ^MP^^revious ^MI^^n ^MO^^ut ^MA^^ll PA^MN^^ A^MB^^ort',#,/CIN; /IF,$STR[EQ]W,/PMT,2,#,/PMT,1,'Enter Window ... ',#,ZW,@,@,/GTO,LEAVEZOOM; /IF,$STR[EQ]P,ZP,/GTO,LEAVEZOOM; /IF,$STR[EQ]I,/PMT,2,#,/PMT,1,'Enter Centre of View ... ',#,ZI,@,/GTO,LEAVEZOOM; /IF,$STR[EQ]O,/PMT,2,#,/PMT,1,'Enter Centre of View ... ',#,ZO,@,/GTO,LEAVEZOOM; /IF,$STR[EQ]A,ZA,/GTO,LEAVEZOOM; /IF,$STR[EQ]N,/PMT,2,#,/PMT,1,'Enter Centre of View ... ',#,PA,@,/GTO,LEAVEZOOM; /IF,$STR[EQ]B,/GTO,LEAVEZOOM; /IF,$VAL[EQ]-2,/GTO,LEAVEZOOM; /IF,$VAL[LE]0,/GTO,ZOOM; .LEAVEZOOM; /GTO,MODE; ; .EXIT; OD,++,RB,++; TO,$R(12); /IF,$I(13)[EQ]1,OR,++; MR; /XMD,--,/MSP,--,PU;