TheSwamp
Code Red => AutoLISP (Vanilla / Visual) => Topic started by: Nima2018 on August 04, 2021, 08:34:00 AM
-
Hi,
I want to put a few short inclined lines on another line (pipeline) to show the position of the clamps that hold the pipes .
The start and end clamps are 6 inches from the two ends ,but the rest will be 60 feet apart from each other and the distance between the last two clamps may be less than 60 feet.
For this purpose, I wrote the following code,but after executing the codes, the middle clamps are not drawn on the map ... Why?
This is the position of the clamps :
1th 2th 3th 4th (n-1)th nth
------/-----------------/-----------------/-----------------/-----------------/--------/------
6" 60' 60' <= 60' 6"
(defun c:FF1 (/ doc mspace p1 p2 dst ang ang1
ang2 int1 int2 pt1 pt2 lin1 lin2 dst2 dst3
n c pt3 lin3
)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq mspace (vla-get-modelspace doc))
(setq p1 (getpoint "Pick on first (1th) node : "))
(setq p2 (getpoint "Pick on second (2th) node : "))
(setq dst (distance p1 p2))
(setq ang (angle p1 p2))
(setq ang1 (+ ang 0.5235988))
(setq ang2 (+ ang1 pi))
(setq int1 (polar p1 ang 0.1524))
(setq int2 (polar p1 ang (- dst 0.1524)))
(setq Pt1 (polar int1 ang1 0.250))
(setq Pt2 (polar int1 ang2 0.250))
(setq lin1 (vla-AddLine
mspace
(vlax-3D-point (car pt1) (cadr pt1) (caddr pt1))
(vlax-3D-point (car pt2) (cadr pt2) (caddr pt2))
)
)
(vla-put-Color lin1 5)
(setq lin2 (vla-copy lin1))
(vla-move lin2
(vlax-3D-point (car int1) (cadr int1) (caddr int1))
(vlax-3D-point (car int2) (cadr int2) (caddr int2))
)
(princ)
(setq dst2 (distance int1 int2))
(setq n 0)
(setq dst3 18.288)
(while (> (- dst2 dst3) 18.288)
(setq n (1+ n))
(setq Pt3 (polar int1 ang (* dst3 n)))
(setq lin3 (vla-copy lin1))
(vla-move lin3
(vlax-3D-point (car int1) (cadr int1) (caddr int1))
(vlax-3D-point (car pt3) (cadr pt3) (caddr pt3))
)
)
)
-
This goes into an infinite loop because you never update dst2. The while will always be true if its longer then 66'
(defun c:FF1 (/ doc mspace p1 p2 dst ang ang1
ang2 int1 int2 pt1 pt2 lin1 lin2 dst2 dst3
n c pt3 lin3
)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(setq mspace (vla-get-modelspace doc))
(setq p1 (getpoint "Pick on first (1th) node : "))
(setq p2 (getpoint "Pick on second (2th) node : "))
(setq dst (distance p1 p2))
(setq ang (angle p1 p2))
(setq ang1 (+ ang 0.5235988))
(setq ang2 (+ ang1 pi))
(setq int1 (polar p1 ang 0.1524))
(setq int2 (polar p1 ang (- dst 0.1524)))
(setq Pt1 (polar int1 ang1 0.250))
(setq Pt2 (polar int1 ang2 0.250))
(setq lin1 (vla-AddLine
mspace
(vlax-3D-point (car pt1) (cadr pt1) (caddr pt1)) ;why do this and not (vlax-3D-point pt1)
(vlax-3D-point (car pt2) (cadr pt2) (caddr pt2))
)
)
(vla-put-Color lin1 5)
(setq lin2 (vla-copy lin1))
(vla-move lin2
(vlax-3D-point (car int1) (cadr int1) (caddr int1))
(vlax-3D-point (car int2) (cadr int2) (caddr int2))
)
(princ)
(setq dst2 (+ (distance int1 int2) 18.288)) ;needed so end nth tick will be created
(setq n 0)
(setq dst3 18.288)
(while (> (setq dst2 (- dst2 dst3)) 18.288) ;updates dst2 so loop will close
(setq n (1+ n))
(setq Pt3 (polar int1 ang (* dst3 n)))
(setq lin3 (vla-copy lin1))
(vla-move lin3
(vlax-3D-point (car int1) (cadr int1) (caddr int1))
(vlax-3D-point (car pt3) (cadr pt3) (caddr pt3))
)
)
)
Your spacing out left to right.
It would be better to go middle out so everything is evenly spaced.
-
Untested...
(defun c:fff ( / l1 l2 l3 p1 p2 n k )
(setq l1 (/ (* 6.0 2.54) 100.0))
(setq l2 (/ (* 60.0 12 2.54) 100.0))
(setq l3 0.25)
(if
(and
(not (initget 1))
(setq p1 (getpoint "\nPick or specify start point : "))
(not (initget 1))
(setq p2 (getpoint p1 "\nPick or specify end point : "))
)
(progn
(entmake (list '(0 . "LINE") (cons 10 (polar p1 (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar p1 (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
(if (> (distance p1 p2) l1)
(progn
(entmake (list '(0 . "LINE") (cons 10 (polar (polar p1 (angle p1 p2) l1) (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar (polar p1 (angle p1 p2) l1) (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
(if (> (distance (polar p1 (angle p1 p2) l1) p2) l2)
(progn
(setq n (fix (/ (- (distance (polar p1 (angle p1 p2) l1) p2) l1) l2)))
(setq k 0)
(repeat n
(entmake (list '(0 . "LINE") (cons 10 (polar (polar p1 (angle p1 p2) (+ l1 (* (setq k (1+ k)) l2))) (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar (polar p1 (angle p1 p2) (+ l1 (* k l2))) (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
)
(entmake (list '(0 . "LINE") (cons 10 (polar (polar p2 (angle p2 p1) l1) (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar (polar p2 (angle p2 p1) l1) (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
)
(if (> (distance (polar p1 (angle p1 p2) l1) p2) l1)
(entmake (list '(0 . "LINE") (cons 10 (polar (polar p2 (angle p2 p1) l1) (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar (polar p2 (angle p2 p1) l1) (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
)
)
)
)
(entmake (list '(0 . "LINE") (cons 10 (polar p2 (- (angle p1 p2) (* 0.5 pi)) l3)) (cons 11 (polar p2 (+ (angle p1 p2) (* 0.5 pi)) l3)) '(62 . 5)))
)
)
(princ)
)
HTH.
-
Thank you very much dear ones
I learned a lot from you