错误:2D-3D点:无/lis
你好尝试为立面图编写新的lisp,但有一些问题我无法解决:/
第一个错误:“错误的参数类型:2D/3D点:nil”
此例程昨天正常工作,但现在出现如上所示的错误消息
第二个错误:(命令“p1 p2”)(命令“p4 p5”)
p1和p5总是有一个z值,我不明白:/
第三个错误:acad始终计算随机角度:/
我是新手,我从这么多lisp文件中创建/编辑了这个例程。所以请告诉我自己的设计错误。
此处附上示例dwg和代码。。。谢谢你的预付款
(defun c:www ()
(vl-load-com)
(setq mysset (ssget '((0 . "*POLYLINE")))
mylength (sslength mysset)
counter 0
)
(while (< counter mylength)
(setq objs (ssname mysset counter))
(setq data (vlax-get (vlax-ename->vla-object objs) "Coordinates") i 0)
(setq blk 1)
(repeat (/ (length data) 3)
(setq x (nth i data)
y (nth (+ 1 i) data)
z (nth (+ 2 i) data)
p (list x y)
i (+ i 3)
n (strcat "ELEV_" (itoa blk))
blk (+ 1 blk)
)
(cond ((= blk 2) (setq p1x (car p)
p1y (cadr p)
p1 (list p1x p1y)))
((= blk 3) (setq p2x (car p)
p2y (cadr p)
p2 (list p2x p2y)))
((= blk 4) (setq p3x (car p)
p3y (cadr p)
p3 (list p3x p3y)))
((= blk 5) (setq p4x (car p)
p4y (cadr p)
p4 (list p4x p4y)))
((= blk 6) (setq p5x (car p)
p5y (cadr p)
p5 (list p5x p5y)))
)
(setq di-p1_p2 (distance p1 p2)
di-p4_p5 (distance p4 p5)
tx-p1_p2 (/ (+ p1x p2x) 2)
ty-p1_p2 (/ (+ p1y p2y) 2)
txt-p1_p2 (list tx-p1_p2 ty-p1_p2)
tx-p4_p5 (/ (+ p4x p5x) 2)
ty-p4_p5 (/ (+ p4y p5y) 2)
txt-p4_p5 (list tx-p4_p5 ty-p4_p5)
ang (angle p1 p5)
)
(command "-insert" n p "" "" (angtos ang) (rtos z 2 3))
(setq elev_block (entlast))
(command "rotate" elev_block "" p 90)
(command "_line" p1 p2 "")
(command "_line" p4 p5 "")
);repeat
(command "-insert" "ELEV_DIST_LEFT" txt-p1_p2 "" "" (angtos ang) (rtos di-p1_p2 2 1))
(command "-insert" "ELEV_DIST_RIGHT" txt-p4_p5 "" "" (angtos ang) (rtos di-p4_p5 2 1))
(setq counter (+ 1 counter))
);while
)
奥尔内克(2)。图纸 首先,由于非局部变量,某物在一天工作而在下一天不工作的情况是10次中有9次。请参见:http://www.lee-mac.com/localising.html
某些z值不应为的情况可能是由于当前设置的高程,或者它可能捕捉到某个现有对象。通过在每个点列表的末尾添加z值,可以将z值强制为0,然后为了避免捕捉,在发送到直线命令的每个点之前执行“非”捕捉力。
随机角度是使用lisp时的一种情况,角度是以弧度而不是度定义的:http://www.cadtutor.net/forum/showthread.php?14853-弧度到度 非常感谢irneb和LeeMac
这是最终版本,它的工作就像一个魅力
(defun c:kot (/ obj xyz spt ept ang vtx
b i x y z p n
p1 p2 p3 p4 p5
l_dist r_dist
l_coor r_coor rotate)
(vl-load-com)
(setq mysset (ssget '((8 . "PL_ENKESIT")(0 . "*POLYLINE")))
mylength (sslength mysset)
counter 0
)
(while (< counter mylength)
(setq obj (ssname mysset counter)
xyz (vlax-get (vlax-ename->vla-object obj) "Coordinates")
spt (vlax-curve-getstartpoint obj)
ept (vlax-curve-getendpoint obj)
ang (+ (* 180.0 (/ (angle spt ept) pi)) 90)
vtx 5
b 0
i 0
)
(if (= (/ (length xyz) 3) vtx) (progn
(repeat vtx
(setq x (nth i xyz)
y (nth (+ 1 i) xyz)
z (nth (+ 2 i) xyz)
p (list x y)
i (+ 3 i)
b (+ 1 b)
n (strcat "ELEV_" (itoa b))
)
(cond ((= b 1) (setq p1 (list (car p) (cadr p))))
((= b 2) (setq p2 (list (car p) (cadr p))))
((= b 3) (setq p3 (list (car p) (cadr p))))
((= b 4) (setq p4 (list (car p) (cadr p))))
((= b 5) (setq p5 (list (car p) (cadr p))))
)
(command "-insert" n "_non" p "" "" ang (rtos z 2 3))
);repeat
(setq l_dist (distance p1 p2)
r_dist (distance p4 p5)
l_coor (list (/ (+ (car p1) (car p2)) 2) (/ (+ (cadr p1) (cadr p2)) 2))
r_coor (list (/ (+ (car p4) (car p5)) 2) (/ (+ (cadr p4) (cadr p5)) 2))
rotate (* 180.0 (/ (angle p1 p2) pi))
)
(command "layer" "set" "ELEV_SECTION" ""
"_line" "_non" p1 "_non" p2 "_non" p4 "_non" p5 ""
"-insert" "ELEV_DIST_LEFT" "_non" l_coor "" "" rotate (rtos l_dist 2 1)
"-insert" "ELEV_DIST_RIGHT" "_non" r_coor "" "" rotate (rtos r_dist 2 1)
)
);progn
);if
(setq counter (+ 1 counter))
);while
(princ)
);defun
我很高兴听到我的教程是可理解的和有益的!
谢谢你的推荐,我很感激。
做得好,fleshget 令人惊叹的很高兴它起作用了!
不客气,李,如果这不是一个很好的资源,我不会推荐它!感谢您为社区提供如此全面的辅导!
页:
[1]