tnvsb 发表于 2022-7-5 13:16:56

嗨,帮手们,需要紧急帮助

亲爱的助手们:,
 
我需要在下面的代码小修改。此代码适用于多条选定多段线上的“测量”命令。同样,我也需要“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
)
)
(普林斯)
)
(普林斯)
)
 

Emmanuel Delay 发表于 2022-7-5 13:27:07


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


tnvsb 发表于 2022-7-5 13:31:49

尊敬的先生:,
 
我试过你的代码,但不起作用。但无论如何,谢谢你来帮我。

steven-g 发表于 2022-7-5 13:37:56

什么不起作用?这里很好用!

tnvsb 发表于 2022-7-5 13:41:44

请参见以下来自autocad的错误代码。
命令:DEB
选择块:
选择对象:找到1个
选择对象:
输入段数:5
输入比例:0.075
_.divide未知命令“divide”。按F1键获取帮助。
命令:

Emmanuel Delay 发表于 2022-7-5 13:48:33

这很奇怪。
 
看看这是否有效,我写了一个自定义除法。
如果有人有比我的(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)
)


tnvsb 发表于 2022-7-5 13:58:13

您好,我尝试了您的代码,但出现了错误:
命令:deb
选择块:
选择对象:指定对角点:2
选择对象:
输入段数:10
输入比例:1
; 错误:无函数定义:插入

Emmanuel Delay 发表于 2022-7-5 14:01:59

你把我(上次回复的)所有代码都放在一个lisp文件中了吗?我添加了一个函数插入。

dlanorh 发表于 2022-7-5 14:09:06

 
 

(defun getAngle (obj dist / )
(angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv obj (vlax-curve-getparamatdist obj dist)))
);end_defun

Emmanuel Delay 发表于 2022-7-5 14:12:34

谢谢我想我需要vlax curve getfirstderiv,但我无法让它工作。我不知道如何从中找到一个角度。
页: [1] 2
查看完整版本: 嗨,帮手们,需要紧急帮助