Small Fish Posted June 16, 2009 Share Posted June 16, 2009 I found this code written by and unknown author. I want to edit it so the arrow head is a different size. I guess I have to edit the line: (lambda (g) (vl-position (car g) '(-1 0 5 100 10 11 210))) But I can't make head or tails of what the numbers mean. I would also like the option of adding another arrow head on the same line so there are 2 arrows. Can anyone figure out how this code works? thanks (defun c:pidarrow (/ Ent EntName Point Points) (and (setq Ent (entsel "\nSelect Line near Arrow End: ")) (setq Point (cadr Ent) EntName (car Ent) Ent (entget EntName) ) (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (vl-remove-if (function (lambda (g) (vl-position (car g) '(-1 0 5 100 10 11 210))) ) Ent ) (list (cons 100 "AcDbPolyline") (cons 90 3) (cons 70 0)) (mapcar (function (lambda (p) (cons 10 p))) Points) (list (cons 40 4.) (cons 41 0.) (cons 10 (polar (cadr Points) (apply 'angle Points) 8.0)) ) ) ) ) (entdel EntName) ) ) Quote Link to comment Share on other sites More sharing options...
Commandobill Posted June 16, 2009 Share Posted June 16, 2009 Well i changed the code (although i disagree on how it works) so that you can have an arrowhead on both sides of the line. I also commented out where to change for length and width of the arrowhead. The 8.0 is the length. (defun c:pidarrow (/ Ent EntName Point Points) (and (setq Ent (entsel "\nSelect Line near Arrow End: ")) (setq Point (cadr Ent) EntName (car Ent) Ent (entget EntName) ) (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (vl-remove-if (function (lambda (g) (vl-position (car g) '(-1 0 5 100 10 11 210))) ) Ent ) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (if (or (= (setq op (strcase (getstring "\nDo you want an arrow on both sides? (Yes or No): "))) "Y") (= op "YES")) (progn (list (cons 10 (polar (car Points) (apply 'angle Points) -8.0));length of arrow (cons 40 0.) (cons 41 2.)))); width of arrow (mapcar (function (lambda (p) (cons 10 p))) Points) (list (cons 40 2.); width of arrow (cons 41 0.) (cons 10 (polar (cadr Points) (apply 'angle Points) 8.0)));length of arrow ))) (entdel EntName) (princ) ) ) Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 16, 2009 Author Share Posted June 16, 2009 thanks commmadoBill for that. It's not really what I was after although it can also be useful. Thanks for showing me how to adjust arrow size. What I was going to do is have the option of a double arrow pointing the same direction at one end. Below is the code that I have tried to adjust so that it can do it, unfortunately my second arrow is the length of the line! Part of the problem is I also don't understand half of the original code. (defun c:pidarrow1 (/ Ent EntName Point Points FirstPt) (and (setq Ent (entsel "\nSelect Line near Arrow End: ");list of entity properties Point (cadr Ent) EntName (car Ent);entity name Ent (entget EntName) ) (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (setq FirstPt (car(reverse Points))) (setq SecondPt (polar (cadr Points)(apply 'angle Points)-2.5)) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (vl-remove-if (function (lambda (g) (vl-position (car g) '(-1 0 5 100 10 11 210))) ) Ent ) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (progn (list (cons 10 (polar FirstPt (apply 'angle Points) 2.5));length of arrow (cons 40 0.) (cons 41 0.83333)))); width of arrow (mapcar (function (lambda (p) (cons 10 p))) Points) (list (cons 40 0.83333); width of arrow (cons 41 0.) (cons 10 (polar (cadr Points) (apply 'angle Points) 2.5)));length of arrow )) ) (entdel EntName) (princ) ) ) Quote Link to comment Share on other sites More sharing options...
David Bethel Posted June 16, 2009 Share Posted June 16, 2009 If you just want a simple leader line with arrows on both ends, I'd use something like this: [b][color=BLACK]([/color][/b]defun c:leadline [b][color=FUCHSIA]([/color][/b]/ sp ep ps p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq sp [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nStart Point: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq ep [b][color=NAVY]([/color][/b]getpoint sp [color=#2f4f4f]"\nEnd Point: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq ps [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nArrow Length: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq p0 [b][color=NAVY]([/color][/b]polar sp [b][color=MAROON]([/color][/b]angle sp ep[b][color=MAROON])[/color][/b] ps[b][color=NAVY])[/color][/b] p1 [b][color=NAVY]([/color][/b]polar p0 [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]angle sp ep[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]* ps 0.25[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p2 sp p3 [b][color=NAVY]([/color][/b]polar p0 [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]angle sp ep[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]* ps 0.25[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p4 p0 p5 [b][color=NAVY]([/color][/b]polar ep [b][color=MAROON]([/color][/b]angle ep sp[b][color=MAROON])[/color][/b] ps[b][color=NAVY])[/color][/b] p6 [b][color=NAVY]([/color][/b]polar p5 [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]angle ep sp[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]* ps 0.25[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p7 ep p8 [b][color=NAVY]([/color][/b]polar p5 [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]angle ep sp[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]* pi 0.5[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]* ps 0.25[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] p9 p5 p 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"POLYLINE"[/color][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 6 [color=#2f4f4f]"BYLAYER"[/color][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 10 [b][color=GREEN]([/color][/b]list 0.0 0.0 0.0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 39 0.0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 62 256[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 66 1[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]repeat 10 [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"VERTEX"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 6 [color=#2f4f4f]"BYLAYER"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]eval [b][color=RED]([/color][/b]read [b][color=PURPLE]([/color][/b]strcat [color=#2f4f4f]"P"[/color] [b][color=TEAL]([/color][/b]itoa p[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 39 0.0[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cons 62 256[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq p [b][color=MAROON]([/color][/b]1+ p[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]entmake [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]cons 0 [color=#2f4f4f]"SEQEND"[/color][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cons 8 [color=#2f4f4f]"0"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote Link to comment Share on other sites More sharing options...
Commandobill Posted June 17, 2009 Share Posted June 17, 2009 thanks commmadoBill for that. It's not really what I was after although it can also be useful. Thanks for showing me how to adjust arrow size. What I was going to do is have the option of a double arrow pointing the same direction at one end. Below is the code that I have tried to adjust so that it can do it, unfortunately my second arrow is the length of the line! Part of the problem is I also don't understand half of the original code. can you post an example of how the double arrow head should look? Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 17, 2009 Author Share Posted June 17, 2009 It should look something like this...... my last message with the code is almost there - the second arrow is stretched across the length of the line. Quote Link to comment Share on other sites More sharing options...
Commandobill Posted June 18, 2009 Share Posted June 18, 2009 You almost had it. (defun c:pidarrow (/ Ent EntName Point ) (and (setq Ent (entsel "\nSelect Line near Arrow End: ")) (setq Point (cadr Ent) EntName (car Ent) Ent (entget EntName) ) (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (mapcar (function (lambda (p) (cons 10 p))) Points) (list (cons 40 2.); width of arrow (cons 41 0.) (cons 10 (setq npoint (polar (cadr Points) (apply 'angle Points) 8.0))));length of arrow (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (list (cons 40 2.); width of arrow (cons 41 0.) (cons 10 (polar npoint (apply 'angle Points) 8.0))) )))) (entdel EntName) (princ) ) ) Quote Link to comment Share on other sites More sharing options...
Scrimski Posted June 18, 2009 Share Posted June 18, 2009 The Author of this (original) code is really good, at least he is pretty familiar with the DXF codes. If I had written the code, I would have used hatches instead of the variable PLine width. But the given solution is much much better. Greetings from Austria - Scrimski Quote Link to comment Share on other sites More sharing options...
Commandobill Posted June 18, 2009 Share Posted June 18, 2009 The Author of this (original) code is really good, at least he is pretty familiar with the DXF codes. If I had written the code, I would have used hatches instead of the variable PLine width. But the given solution is much much better. Greetings from Austria - Scrimski If i had originally written the code i would have used leaders. Just my 2 cents Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 18, 2009 Author Share Posted June 18, 2009 Thanks Commandobill thats perfect. Just one other question, I see there is the use of (cons 40 2.) or (cons 41 0.) What kind of number is 2. or 0. as opposed to 2.0 or 0.0? EDIT: I have just notice that tip of the arrow is not at the same point as the end of the line. So it makes the line longer. I will have a go and trying to fix it... thanks Small Fish Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted June 18, 2009 Share Posted June 18, 2009 Its still a real number, but laziness in not putting in the zero Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 19, 2009 Author Share Posted June 19, 2009 I tried to adjust the code but I am finding when the arrow is added the line moves - not sure why? Also I have not worked out how to make the second arrowhead position correctly - it puts above the first arrowhead and not behind. (defun c:pidarrow (/ ent entname point npoint points pt1 pt2 anglepts arrowstart1 arrowstart2 arrowstart3 arrowstart4 pointssecond) (and (setq Ent (entsel "\nSelect Line near Arrow End: ")) (setq Point (cadr Ent) EntName (car Ent) Ent (entget EntName) );setq (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)));10=start pt of line, 11=end pt of line Pt1 (cdr (assoc 10 Ent)) Pt2 (cdr (assoc 11 Ent)) AnglePts (angle Pt1 Pt2) ArrowStart1 (polar Pt1 (+ AnglePts pi ) -2.5) ArrowStart2 (polar Pt2 (- AnglePts pi ) 2.5) Points (list ArrowStart1 ArrowStart2) ArrowStart3 (polar ArrowStart1 (+ AnglePts pi ) -2.5) ArrowStart4 (polar ArrowStart2 (- AnglePts pi ) 2.5) PointsSecond (list ArrowStart3 ArrowStart4)) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) );if (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") );list (list (cons 100 "AcDbPolyline") (cons 90 4);number of vertices? (cons 70 0) );list (mapcar (function (lambda (p) (cons 10 p))) Points) (list (cons 40 0.833333); width of arrow (cons 41 0.0) (cons 10 (setq npoint (polar (cadr Points) (apply 'angle Points) 2.5)));length of arrow );list (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (list (cons 40 0.833333); width of arrow (cons 41 0.0) (cons 10 (polar npoint (apply 'angle Points) 2.5))) );if );append );entmakex );progn (entdel EntName) (princ) );and ) ;defun Quote Link to comment Share on other sites More sharing options...
Commandobill Posted June 19, 2009 Share Posted June 19, 2009 ill look at your code in a second but here's this for now (defun c:pidarrow (/ Ent EntName Point pang npoint p1 points ) (and (setq Ent (entsel "\nSelect Line near Arrow End: ")) (setq Point (cadr Ent) EntName (car Ent) Ent (entget EntName) ) (= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 16.0))))) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 8.0)))))) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (setq npoint (polar npoint pang 8.0))));length of arrow (if (or (= op "Y") (= op "YES")) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (polar npoint pang 8.0))) )))) (entdel EntName) (princ) ) ) Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 19, 2009 Author Share Posted June 19, 2009 Hey thanks Commandobill, that works great. My attempt was not the right approach. I have learnt something from this code. Cheers Small Fish Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 20, 2009 Author Share Posted June 20, 2009 I have now improved the code, so it will also accept 2 vertice polylines, and error trapping for entities not a line or 2 vertice pline. I just thought I would share it with anyone who may want to use it...... (defun c:pidarrow (/ Ent Entx EntName Point pang npoint p1 points Entity) (if (setq Entx (entsel "\nSelect Line or 2 Vertice Polyline near Arrow End: ")) (progn (setq Point (cadr Entx) EntName (car Entx) Ent (entget EntName) Entity (cdr (assoc 0 (setq eprPline(entget (car Entx)))))) (if (not (or (= Entity "LINE" ) (= Entity "LWPOLYLINE") );or );not (progn (alert(strcat "\nEntity selected is a " Entity". " "Entity must be a 2 Vertice Polyline or a Line")) (exit) ) ) (if (= Entity "POLYLINE") (progn (alert(strcat "\nEntity selected is a 2d Polyline. " "Entity must be a 2 Vertice Polyline or a Line")) (exit) ) );if ;--------- ;If a Line ;--------- (if(= (cdr (assoc 0 Ent)) "LINE") (progn (setq Points (list (cdr (assoc 10 Ent)) (cdr (assoc 11 Ent)))) (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 16.0))))) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 8.0)))))) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (setq npoint (polar npoint pang 8.0))));length of arrow (if (or (= op "Y") (= op "YES")) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (polar npoint pang 8.0))) ))) );progn );if ;---------------------- ;If a 2 Vertice polyline ;---------------------- (if(= (cdr (assoc 0 Ent)) "LWPOLYLINE") (progn (foreach lstTemp Ent (if (= (car lstTemp) 10) (setq Points (append Points (list (cdr lstTemp)))) );if );foreach (if (< (distance Point (car Points)) (distance Point (cadr Points)) ) (setq Points (reverse Points)) ) (if (> (length Points)2) (progn (alert"\nCan not place arrow on polyline with more than two vertices") (princ"\n") (exit) );progn );if (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")) (list (cons 100 "AcDbPolyline") (cons 90 4) (cons 70 0)) (if (or (= (setq op (strcase (getstring "\nDo you want a double arrow head? (Yes or No): "))) "Y") (= op "YES")) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 16.0))))) (list (cons 10 (setq p1 (car points))) (cons 10 (setq npoint (polar p1 (setq pang (apply 'angle Points)) (- (distance p1 (cadr points)) 8.0)))))) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (setq npoint (polar npoint pang 8.0))));length of arrow (if (or (= op "Y") (= op "YES")) (list (cons 40 2.0); width of arrow (cons 41 0.0) (cons 10 (polar npoint pang 8.0))) ))) );progn );if (entdel EntName) (princ) );progn );if );defun Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted June 20, 2009 Share Posted June 20, 2009 This code could be made much more concise Try this: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] c:[color=Black]pi[/color]darrow [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] Entx elst ent ptlst ang op[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-load-com[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]while[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]progn[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] Entx [b][color=RED]([/color][/b][b][color=BLUE]entsel[/color][/b] [b][color=#ff00ff]"\nSelect Line or 2 Vertice Pline: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"LINE"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdadr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] elst [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ent [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] Entx[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ptlst [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]10[/color][/b] elst[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]assoc[/color][/b] [b][color=#009900]11[/color][/b] elst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]eq[/color][/b] [b][color=#ff00ff]"LWPOLYLINE"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cdadr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] elst [b][color=RED]([/color][/b][b][color=BLUE]entget[/color][/b] ent[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]>[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]length[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ptlst [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]cdr[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]vl-remove-if-not[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]=[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] elst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=#009900]2[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** Polyline has more than 2 Vertices **"[/color][/b][b][color=RED])[/color][/b] [b][color=BLUE]nil[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]t[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"** Invalid Object Selected **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] [b][color=#ff00ff]"\n** Nothing Selected **"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ptlst [b][color=RED]([/color][/b][b][color=BLUE]vl-sort[/color][/b] ptlst [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x1 x2[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]<[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]distance[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] Entx[b][color=RED])[/color][/b] x1[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]distance[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] Entx[b][color=RED])[/color][/b] x2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] ang [b][color=RED]([/color][/b][b][color=BLUE]apply[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]angle[/color][/b] ptlst[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#ff00ff]"Yes No"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] op [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getkword[/color][/b] [b][color=#ff00ff]"\nDouble Arrow Head? [Y/N] <Yes> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#ff00ff]"Yes"[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entmakex[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#ff00ff]"LWPOLYLINE"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#ff00ff]"AcDbEntity"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#ff00ff]"AcDbPolyline"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]90[/color][/b] [b][color=#009900]4[/color][/b][b][color=RED])[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]70[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b][b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cadr[/color][/b] ptlst[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]40[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]41[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]if[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]=[/color][/b] op [b][color=#ff00ff]"Yes"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ptlst[b][color=RED])[/color][/b] ang [b][color=#009999]16.0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]40[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]41[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ptlst[b][color=RED])[/color][/b] ang [b][color=#009999]8.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]40[/color][/b] [b][color=#009999]2.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]41[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]car[/color][/b] ptlst[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]40[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]41[/color][/b] [b][color=#009999]0.[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]entdel[/color][/b] ent[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Quote Link to comment Share on other sites More sharing options...
Small Fish Posted June 20, 2009 Author Share Posted June 20, 2009 Lee mac thanks for the lesson on compaction. I see you you are using real numbers with no zeros ie 2. or 0. - or was that from a cut and paste? Small Fish Quote Link to comment Share on other sites More sharing options...
Lee Mac Posted June 20, 2009 Share Posted June 20, 2009 I see you you are using real numbers with no zeros ie 2. or 0. - or was that from a cut and paste? Just whatever takes my fancy really Take note of the way I have structured the object selection. I tend to prefer to avoid too many uses of the (exit) function. Also - I have used a getkword (and COND) for the arrow choice, this is much more reliable than getstring. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.