Jump to content

Arrow head on Line


Small Fish

Recommended Posts

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)
 )
)

Link to comment
Share on other sites

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)
 )
)

Link to comment
Share on other sites

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)
 )
)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

Double arrow.jpgIt 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.

Link to comment
Share on other sites

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)
     )
   )

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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)
   )
 )

Link to comment
Share on other sites

Hey thanks Commandobill, that works great. My attempt was not the right approach. I have learnt something from this code.

Cheers Small Fish :D

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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]
     



Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 :P

 

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.

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...