嗨,帮手们,需要紧急帮助
亲爱的助手们:,我需要在下面的代码小修改。此代码适用于多条选定多段线上的“测量”命令。同样,我也需要“DIVIDE”命令。有人能帮我吗。
(定义c:MEB(/blk ss l name)
; 塔尔瓦特04。04. 2011
(如果
(和(setq blk(entsel“\n Select Block:”))
(setq ss(ssget“_:L”'((0。“直线,样条曲线,LWPOLYLINE,POLYLINE”)))
(setq l(getdist“\n块之间的距离:”))
(setq scl(getdist“\n输入比例:”))
)
(程序
(setq名称(cdr(assoc 2(entget(car blk)Ю)Ю)))
((λ(i/ss1)
(虽然
(setq ss1(ssname ss(setq i(1+i)))
(setq标记(entlast))
(命令“测量”ss1“块”name“u Y”l)
(while(setq en(entnext标记))
(setq elist(entget en)
pt(cdr(assoc 10 elist)))
(命令“\u scale”en“\u non”pt scl)
(普林斯(cdr(assoc 2 elist)))
(entupd en)
(setq标记en)
)
)
)
-1
)
)
(普林斯)
)
(普林斯)
)
(defun c:DEB(/ blk ss s name)
(if
(and (setq blk (entsel "\nSelect Block: "))
(setq ss (ssget "_:L" '((0 . "LINE,SPLINE,LWPOLYLINE,POLYLINE"))))
(setq s (getint "\nEnter the number of segments: "))
(setq scl (getdist "\n Enter a scale :"))
)
(progn
(setq name (cdr (assoc 2 (entget (car blk)))))
((lambda (i / ss1)
(while
(setq ss1 (ssname ss (setq i (1+ i))))
(setq marker(entlast))
(command "_.divide" ss1 "Block" name "_Y" s)
(while (setq en (entnext marker))
(setq elist (entget en)
pt (cdr (assoc 10 elist)))
(command "_scale" en "" "_non" pt scl)
(princ (cdr (assoc 2 elist)))
(entupd en)
(setq marker en)
)
)
)
-1
)
)
(princ)
)
(princ)
)
尊敬的先生:,
我试过你的代码,但不起作用。但无论如何,谢谢你来帮我。 什么不起作用?这里很好用! 请参见以下来自autocad的错误代码。
命令:DEB
选择块:
选择对象:找到1个
选择对象:
输入段数:5
输入比例:0.075
_.divide未知命令“divide”。按F1键获取帮助。
命令: 这很奇怪。
看看这是否有效,我写了一个自定义除法。
如果有人有比我的(getAngle)更优雅的方式,请发布。
(vl-load-com)
(defun Insert (pt Nme scale rotation)
(entmakex (list (cons 0 "INSERT")
(cons 2 Nme)
(cons 10 pt)
(cons 41 scale) (cons 42 scale) (cons 43 scale)
(cons 50 rotation)
))
)
;;(defun getAngle (pl dist / param)
;; (setq ip1 (vlax-curve-getPointAtDist pl (- dist 0.001) ))
;; (setq ip2 (vlax-curve-getPointAtDist pl (+ dist 0.001) ))
;; (angle ip1 ip2)
;;)
(defun getAngle (obj dist / )
(angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv obj (vlax-curve-getparamatdist obj dist)))
)
(defun customDivide (block pl segments sc / d2 ip i ang dist)
(setq d2 (vla-get-length (vlax-ename->vla-object pl) ))
(setq i 1)
(repeat (- segments 1)
(setq ip (vlax-curve-getPointAtDist pl (setq dist (* i (/ d2 segments)) )))
(setq ang (getAngle pl dist))
(Insert ip block sc ang )
(setq I (+ i 1))
)
)
(defun c:DEB(/ blk ss s name)
(if
(and
(setq blk (entsel "\nSelect Block: "))
(setq ss (ssget "_:L" '((0 . "LINE,SPLINE,LWPOLYLINE,POLYLINE"))))
(setq s (getint "\nEnter the number of segments: "))
(setq scl (getdist "\nEnter a scale : "))
)
(progn
(setq name (cdr (assoc 2 (entget (car blk)))))
((lambda (i / ss1)
(while
(setq ss1 (ssname ss (setq i (1+ i))))
(customDivide name ss1 s scl)
)
)
-1
)
)
(princ)
)
(princ)
)
您好,我尝试了您的代码,但出现了错误:
命令:deb
选择块:
选择对象:指定对角点:2
选择对象:
输入段数:10
输入比例:1
; 错误:无函数定义:插入 你把我(上次回复的)所有代码都放在一个lisp文件中了吗?我添加了一个函数插入。
(defun getAngle (obj dist / )
(angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv obj (vlax-curve-getparamatdist obj dist)))
);end_defun 谢谢我想我需要vlax curve getfirstderiv,但我无法让它工作。我不知道如何从中找到一个角度。
页:
[1]
2