PDA

View Full Version : line extend


brm
10-04-2005, 03:58 AM
I have created a macro to extend an horizontal line but not run correctly.
why?


DEFINE st_line

LOCAL P1
LOCAL element
LOCAL P2
LOCAL P3
LOCAL ang_line
LOCAL D1_2
LOCAL D1_3
LOCAL P4
LOCAL P5

LOOP

LOOP
READ PNT 'Indicate line, near end to extend.' P1
INQ_ELEM P1
LET element (INQ 403)
EXIT_IF (element=LINE)
END_LOOP

IF (element=LINE)
LET P2 (INQ 101)
LET P3 (INQ 102)
LET ang_line (ANG(P2-P3))
MEASURE_DISTANCE P1 P2
LET D1_2 (INQ 3)
MEASURE_DISTANCE P1 P3
LET D1_3 (INQ 3)
END_IF

IF (D1_2<D1_3)
LOOP
READ PNT 'Indicate next point.' RUBBER_LINE_ANG P2 (ang_line) P4
EXIT_IF ((P4<>P1)AND(P4<>P2)AND(P4<>P3))
END_LOOP
ELSE_IF (D1_2>D1_3)
LOOP
READ PNT 'Indicate next point.' RUBBER_LINE_ANG P3 (ang_line) P4
EXIT_IF ((P4<>P1)AND(P4<>P3)AND(P4<>P2))
END_LOOP
END_IF

IF ((D1_2>D1_3)AND(((Y_OF P2)=(Y_OF P3))AND((X_OF P4)>(X_OF P3))))
LET P5 (PNT_XY (X_OF P4) (Y_OF P3))
MODIFY SCALE CENTER P2 P3 P5 P1 END
ELSE_IF ((D1_2>D1_3)AND(((Y_OF P2)=(Y_OF P3))AND((X_OF P4)<(X_OF P3))))
LET P5 (PNT_XY (X_OF P4) (Y_OF P3))
MODIFY SCALE CENTER P2 P3 P5 P1 END
END_IF

DELETE SELECT POINTS ALL CONFIRM END
WHITE

END_LOOP

END_DEFINE

Thom Ivancso
10-04-2005, 05:32 AM
Hello Brm,

I was able to get your code to work with a little fix, I changed the variable element to E1.

The reason being is the both the words elem and element are keyword qualifiers in the Drafting Macro language and can not be used as variables.

Please find the fixed code in the body of this message.


DEFINE St_line
LOCAL P1
LOCAL El
LOCAL P2
LOCAL P3
LOCAL Ang_line
LOCAL D1_2
LOCAL D1_3
LOCAL P4
LOCAL P5
LOOP
LOOP
READ PNT 'Indicate line, near end to extend.' P1
INQ_ELEM P1
LET El (INQ 403)
EXIT_IF (El=LINE)
END_LOOP
IF (El=LINE)
LET P2 (INQ 101)
LET P3 (INQ 102)
LET Ang_line (ANG (P2 - P3))
MEASURE_DISTANCE P1 P2
LET D1_2 (INQ 3)
MEASURE_DISTANCE P1 P3
LET D1_3 (INQ 3)
END_IF
IF (D1_2<D1_3)
LOOP
READ PNT 'Indicate next point.' RUBBER_LINE_ANG P2 (Ang_line) P4
EXIT_IF ((P4<>P1) AND (P4<>P2) AND (P4<>P3))
END_LOOP
ELSE_IF (D1_2>D1_3)
LOOP
READ PNT 'Indicate next point.' RUBBER_LINE_ANG P3 (Ang_line) P4
EXIT_IF ((P4<>P1) AND (P4<>P3) AND (P4<>P2))
END_LOOP
END_IF
IF ((D1_2>D1_3) AND (((Y_OF P2)=(Y_OF P3)) AND ((X_OF P4)>(X_OF P3))))
LET P5 (PNT_XY (X_OF P4) (Y_OF P3))
MODIFY SCALE CENTER P2 P3 P5 P1
END
ELSE_IF ((D1_2>D1_3) AND (((Y_OF P2)=(Y_OF P3)) AND ((X_OF P4)<(X_OF P3))))
LET P5 (PNT_XY (X_OF P4) (Y_OF P3))
MODIFY SCALE CENTER P2 P3 P5 P1
END
END_IF
DELETE SELECT POINTS ALL CONFIRM
END
WHITE
END_LOOP
END_DEFINE


hth
Cheers, :)
Thom

brm
10-04-2005, 06:43 AM
I Changed The Macro But The Problem Persists.
If You Try To Modify A Line More Times This Macro Run Only Two Or Three Times.

ukawa
10-10-2005, 05:51 AM
Hi

I know already exist a macro that extends the lines (oblique too):
http://www.cocreateusers.org/macros/archive/me10/stretch_line/stretch_line.zip


If this isn't what are you looking for, forget my message.

Best Regards