SammyC 发表于 2022-7-5 15:45:26

多导导出问题

嘿,伙计们,第一次发帖。这个论坛在过去帮助了我,我完全撞到了墙。
 
我的问题是多重领导。我转换了很多。dwg文件。shp文件,并且无论如何都无法直接导出多重引线。
 
所以我一直在尝试构建一些LISP代码,将多重引线的文本放置在它所指向的准确位置(不需要漂亮,只需要文本的对齐点是正确的位置)。
 
这远远超出了我的专业水平。任何帮助都是非常合适的
 
(或者,如果有一个更简单的解决方案隐藏在某处,那就太好了!)

ronjonp 发表于 2022-7-5 15:55:58

你试过引爆它们吗?

benhubel 发表于 2022-7-5 15:59:30

我假设explode选项对您有效,但如果不起作用,我决定尝试一下。这可能并不优雅,但我相信它可以帮助你开始。我只测试了一点点。我对这些评论有点过火,但我想这不会有什么害处。
 

;MLeaderTest
(defun c:mltest ( / ss i e p1 height angle contents )
(setq ss (ssget '(( 0 . "MULTILEADER" )))) ;get selection of multileaders
(setq i 0) ;set loop index
(repeat (sslength ss) ;loop through each selected entity
        (setq e (ssname ss i)) ;get current entity
        (setq p1 (cdr (assoc 110 (entget e)))) ;set p1 to the point coordinates that the leader is pointing to
        (setq height (cdr (assoc 41 (entget e)))) ;set text height
        (setq angle 0) ;this defaults the rotation angle to be 0
        (setq contents (cdr (assoc 304 (entget e)))) ;get text contents
        (command "text" p1 height angle contents) ;create a new text object based on gathered info
        (command "erase" e "") ;erase Mleader entity
        (setq i (1+ i)) ;increment index
)
(princ)
)

SammyC 发表于 2022-7-5 16:10:04

爆炸不起作用。它将文本放置在作为多重引线一部分时的精确位置。
 
感谢benhubel的帮助!以及评论(对初学者很有用)。
 
奇怪的是,它在我当前的绘图中,可能有一半的多重引线上都能完美地工作。另一半被放置在非常不一致的地方,有时离多重领导本身很远。无法找出导致不一致的原因。
 
我已经附上了我的测试。dwg以便您可以查看。
 
领导测试。图纸

benhubel 发表于 2022-7-5 16:16:41

我还在学习,所以我不完全确定原因是什么,但这似乎是放置引线后移动引线点的结果。我打赌我使用了错误的assoc代码,因为它在我的初始测试工作。我看看能不能找到解决办法。

Roy_043 发表于 2022-7-5 16:22:29

在Lisp例程中调用的命令将遵循OSMODE设置。要避免不需要的对象捕捉,可以使用:
(command "text" "_non" p1 height angle contents)

BIGAL 发表于 2022-7-5 16:26:15

像Roy_043但不需要
 

(setq oldsnap (getvar 'osmode))
(setvar 'osmode 0)
... your code
(setvar 'osmode oldsnap)

ronjonp 发表于 2022-7-5 16:32:16

这是一个快捷方式。。星期五快乐!
(defun c:foo (/ r o n)
(if (setq n (ssget ":L" '((0 . "MULTILEADER"))))
   (foreach x (vl-remove-if 'listp (mapcar 'cadr (ssnamex n)))
   (setq o (vlax-ename->vla-object x))
   (setq r (vlax-invoke o 'getleaderlinevertices 0))
   (if (entmakex (list '(0 . "TEXT")
                  '(100 . "AcDbEntity")
                  '(67 . 0)
                  (cons 8 (vla-get-layer o))
                  '(100 . "AcDbText")
                  (list 10 (car r) (cadr r) (caddr r))
                  (cons 40 (vla-get-textheight o))
                  (cons 1 (vla-get-textstring o))
                  (cons 50 (vla-get-textrotation o))
                  '(41 . 1.0)
                  '(51 . 0.0)
                  (cons 7 (vla-get-textstylename o))
                  '(71 . 0)
                  '(72 . 0)
                  '(11 0.0 0.0 0.0)
                  '(100 . "AcDbText")
                  '(73 . 0)
          )
)
(entdel x)
   )
   )
)
(princ)
)
(vl-load-com)

SammyC 发表于 2022-7-5 16:43:19

ronjonp我不知道那一半代码是什么意思,但它工作得绝对漂亮。
 
我真的很感谢大家的帮助,你们让我的导出过程变得更加灵活,再加上我学到了更多的LISP语言。赢,赢。
 
大家星期五快乐

ronjonp 发表于 2022-7-5 16:49:06

 
很乐意帮忙。
页: [1]
查看完整版本: 多导导出问题