更改块引用的LISP
我已经将1000多个块参照点导入AutoCAD。我想把这些块参考“十字准线”转换成圆圈。我希望这些圆的直径与数据集中的高程数相对应。如果你想知道我为什么想要这个,我正在试着在一个绘图中绘制一张树的地图,直径是我想要为每棵树显示的关键信息之一。以PENZD样式输入数据限制了显示的信息量,因为我只需要2D地图,所以高程表示直径。我有一个将点转换为圆的lisp代码,但我还没有找到将块参照数据转换为圆的方法。如果有人能写下这段代码或指导我如何实现这一点,我将不胜感激。谢谢 你可以用我的Lisp程序进行测试
(defun c:GGG ()(defun mid (ent / p1 p2) (vla-getboundingbox (vlax-ename->vla-object ent) 'p1 'p2) (setq p1 (vlax-safearray->list p1) p2 (vlax-safearray->list p2) pt (mapcar '+ p1 p2) pt (mapcar '* pt '(0.5 0.5 0.5)) ) pt)(setq src (car (entsel "\nDoi tuong can di chuyen: ")))(redraw src 3)(setq des (car (entsel "\nDoi tuong dich: ")))(redraw src 4)(setq oldos (getvar "osmode"))(setvar "osmode" 0)(command ".move" src "" (mid src) (mid des))(setvar "osmode" oldos)(princ))(vl-load-com) 因为我今天感觉很慷慨
(defun c:test ( / el i pt ss x )
(if (setq ss (ssget "_:L" '((0 . "INSERT"))))
(repeat (setq i (sslength ss))
(setq el (entget (ssname ss (setq i (1- i))))
pt (cdr (assoc 10 el))
)
(if
(entmakex
(append
(list
(cons 0 "CIRCLE")
(list 10 (car pt) (cadr pt) 0.)
(cons 40 (if (equal 0.0 (last pt) 1e- 1.0 (abs (/ (last pt) 2.))))
)
(apply 'append
(mapcar
'(lambda ( x ) (if (assoc x el) (list (assoc x el))))
'(8 6 39 48 62 210)
)
)
)
)
(entdel (cdr (assoc -1 el)))
)
)
)
(princ)
)
编辑:刚刚注意到您需要2D表示,代码已更新。 所以可能是操作员,但我无法让任何一个代码工作。我将它们复制到vlisp中,并将其保存为LISP,然后通过加载它们来运行它们。十字准线的形状没有改变。我输入的代码有误吗?谢谢你花时间写代码,v&leemac 使用我的程序选择块时会发生什么?你有错误吗? 第一次,它将我在工作区中的所有点和其他文件发送到一个模板中。事情就是这样。后来我试了几次,什么都没发生。 文件夹?样板你在说什么?这应该是一个选择块并将其转换为圆的例子——这是一个非常简单的代码,不会有太多错误。 我选择了块,将代码输入到命令中,但它不起作用。从那以后,我试着用其他方式来实现它。我可能做错了什么,但我几乎没用过这个软件。 当你说“它不起作用”时,发生了什么?命令行上打印了什么?我有点困惑,因为我在发布之前快速测试了代码,一切都很好。它对其他人有用吗? 上面写着“C:测试”
页:
[1]
2