jmsimpson 发表于 2022-7-6 09:24:52

更改块引用的LISP

我已经将1000多个块参照点导入AutoCAD。我想把这些块参考“十字准线”转换成圆圈。我希望这些圆的直径与数据集中的高程数相对应。如果你想知道我为什么想要这个,我正在试着在一个绘图中绘制一张树的地图,直径是我想要为每棵树显示的关键信息之一。以PENZD样式输入数据限制了显示的信息量,因为我只需要2D地图,所以高程表示直径。
 
我有一个将点转换为圆的lisp代码,但我还没有找到将块参照数据转换为圆的方法。如果有人能写下这段代码或指导我如何实现这一点,我将不胜感激。谢谢

vnanhvu 发表于 2022-7-6 09:30:07

你可以用我的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)

Lee Mac 发表于 2022-7-6 09:34:52

因为我今天感觉很慷慨
 
(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表示,代码已更新。

jmsimpson 发表于 2022-7-6 09:37:28

所以可能是操作员,但我无法让任何一个代码工作。我将它们复制到vlisp中,并将其保存为LISP,然后通过加载它们来运行它们。十字准线的形状没有改变。我输入的代码有误吗?谢谢你花时间写代码,v&leemac

Lee Mac 发表于 2022-7-6 09:41:38

使用我的程序选择块时会发生什么?你有错误吗?

jmsimpson 发表于 2022-7-6 09:45:35

第一次,它将我在工作区中的所有点和其他文件发送到一个模板中。事情就是这样。后来我试了几次,什么都没发生。

Lee Mac 发表于 2022-7-6 09:49:55

文件夹?样板你在说什么?这应该是一个选择块并将其转换为圆的例子——这是一个非常简单的代码,不会有太多错误。

jmsimpson 发表于 2022-7-6 09:53:16

我选择了块,将代码输入到命令中,但它不起作用。从那以后,我试着用其他方式来实现它。我可能做错了什么,但我几乎没用过这个软件。

Lee Mac 发表于 2022-7-6 09:58:05

当你说“它不起作用”时,发生了什么?命令行上打印了什么?我有点困惑,因为我在发布之前快速测试了代码,一切都很好。它对其他人有用吗?

jmsimpson 发表于 2022-7-6 10:03:43

上面写着“C:测试”
页: [1] 2
查看完整版本: 更改块引用的LISP