明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 739|回复: 14

[提问] 这个代码错哪了啊?检查了很多遍都找不到原因

[复制链接]
发表于 2023-10-31 22:33 | 显示全部楼层 |阅读模式
查了变量,前面都附了值,就是进入循环那里,ent开始就nil了,错误显示的是“错误: no function definition: ENTLENGTH”

(defun c:9testa1()
        (setvar "cmdecho" 0)
          (setq p1 (getpoint"选择基点:"))
          (setq p2 (getcorner p1 "\n选择要更改半径的圆"))
          (if (> (car p1)(car p2))
                (setq ss (ssget "C" p1 p2))
                  (setq ss (ssget "W" p1 p2))          
          )
          (setq n 0 k 0)
          (setq newr (getreal "输入新半径:"))
          (repeat(sslength ss)
                (setq ent(ssname ss n))
                  (setq ent_date (entget ent))
                  (setq ttype (cdr (assoc 0 ent_date)))
                  (if (= ttype "CIRCLE")
                        (sub_upd_rad)
                  )
                  (setq n (1+ n))
          )
          (princ (strcat "\n共更新了<"(itoa k)">个圆,新半径="(rtos newr)))
          (prin1)
  )

(defun c:sub_upd_rad()
        (setq ent_date (subst (cons 40 newr) (assoc 40 ent_date) ent_date))
          (entmod ent_date)
          (setq k (1+ k))
  )


发表于 2023-12-5 16:06 | 显示全部楼层
  1. (defun c:tt (/ r)
  2.         (if (and (setq r (getdist "\n输入或量取新半径:"))
  3.                                 (ssget '((0 . "CIRCLE")))                               
  4.                         )
  5.                 (vlax-for e (vla-get-activeselectionset (vla-get-ActiveDocument (vlax-get-acad-object)))
  6.                         (vla-put-Radius e r)
  7.                 )
  8.         )
  9. )

点评

代码简洁明了  发表于 2023-12-5 21:04
回复 支持 1 反对 0

使用道具 举报

发表于 2023-11-1 00:15 | 显示全部楼层
(defun c:9testa1()
        (setvar "cmdecho" 0)
          (setq p1 (getpoint "选择基点:"))
          (setq p2 (getcorner p1 "\n选择要更改半径的圆"))
          (if (> (car p1)(car p2))
                (setq ss (ssget "C" p1 p2))
                  (setq ss (ssget "W" p1 p2))         
          )
          (setq n 0 k 0)
          (setq newr (getreal "输入新半径:"))
          (repeat(sslength ss)
                (setq ent(ssname ss n))
                  (setq ttype (cdr (assoc 0 (entget ent)))) ;另外,这里选择的时候可以用SSget过滤一下(自己摸索),直接选取圆,不要选择了再判断,可以更简洁高效
                  (if (= ttype "CIRCLE")
                                                (progn
                                                        (sub_upd_rad ent newr) ;传参形式的函数调用
                                                        (setq k (1+ k)) ;计数放这里,子函数功能要单一化
                                                )
                                        )
           (setq n (1+ n))
          )
          (princ (strcat "\n共更新了<"(itoa k)">个圆,新半径="(rtos newr)))
          (princ)
  )

;----------------------------------------
;自定义子函数,不要C:
(defun sub_upd_rad(ent r)
        (setq ent_data (entget ent))
        (setq ent_data (subst (cons 40 r) (assoc 40 ent_data) ent_data))
    (entmod ent_data)
)
发表于 2023-12-5 12:45 | 显示全部楼层
  1. (defun c:tt ()
  2.   (defun SubUpd(e dxf val)
  3.     (entmod (subst (cons dxf val)(assoc dxf (entget e))(entget e)))
  4.     (entupd e)
  5.   )
  6.   (if (and (setq rr (getreal "\n输入新半径: "))
  7.            (setq p1 (getpoint "\n选择基点: "))
  8.            (setq p2 (getcorner p1 "\n对角点: "))
  9.            (setq ss (ssget "C" p1 p2 '((0 . "circle"))))           
  10.            (setq i -1)
  11.       )
  12.     (while (setq s1 (ssname ss (setq i (1+ i))))(SubUpd s1 40 rr))
  13.   )
  14.   (princ)
  15. )
发表于 2023-11-1 00:05 | 显示全部楼层
自定义的子函数不是你这样玩的,建议用传参形式调用,不要用全局。
发表于 2023-11-1 00:19 | 显示全部楼层
PS:你发错版块了。
 楼主| 发表于 2023-11-1 21:08 | 显示全部楼层
Bao_lai 发表于 2023-11-1 00:15
(defun c:9testa1()
        (setvar "cmdecho" 0)
          (setq p1 (getpoint "选择基点:"))

十分感谢大佬解惑
 楼主| 发表于 2023-11-1 21:10 | 显示全部楼层
Bao_lai 发表于 2023-11-1 00:19
PS:你发错版块了。

嗯,我也不太懂,下次注意。
发表于 2023-11-3 23:29 | 显示全部楼层
批量更新圆的半径
http://bbs.mjtd.com/forum.php?mo ... &fromuid=363233
(出处: 明经CAD社区)
发表于 2023-11-6 16:27 | 显示全部楼层
本帖最后由 d1742647821 于 2023-12-5 10:17 编辑

将你移动至lisp分区
发表于 2023-11-6 18:25 来自手机 | 显示全部楼层
d1742647821 发表于 2023-11-6 16:27
错在你发错了分区,批量修改圆半径,C#版,powerer by ifox

白老师有没研究过lisp的组码替换、vlisp的vla方法、c#方法效率差多少?
发表于 2023-12-5 10:17 | 显示全部楼层
给你移动到lisp区了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-19 07:52 , Processed in 0.280397 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表