liuhe 发表于 2024-3-14 09:39:48

标注箭头,多重引线箭头块定义"暴露"操作步骤

本帖最后由 liuhe 于 2024-3-14 09:41 编辑

标注样式组码,entmake创建标注样式,应该是目前最全的 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

我的多重引线合集【源码】 - 源码共享 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)
以上的帖子用DXF 创建样式的时候,其实没办法改变箭头样式。之所以无法修改,是因为cad隐藏了这些的块的定义,从而组码引用过的时候,是无法正确引用的。
当然,可以通过setvar修改系统变量,从而修改箭头样式。
AutoLisp用DXF组码生成标注样式(标注文字样式、标注箭头样式)方法 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区 - Powered by Discuz! (mjtd.com)

上面帖子,演示了如何让箭头块定义暴露,但是作者没有进行详细解释如何操作。
我重新研究了一下,如何进行操作。简单来说,想要暴露,必须对块进行重新定义。
以"_ClosedBlank"空心箭头块为例
创建一个想要暴露箭头的标注,然后分解掉它。箭头块定义就可以被读取了。
创建一箭头块定义默认是2.5倍插入,跟每个标注样式设置相关,不在此赘述。


;;;;NAME是块名 “_ClosedBlank”
;;;;(LH:NEWBLOCk(cdr(ASSOC 2(ENTGET (CAR (ENTSEL"\n选择箭头块"))))))
;;;;;;仅仅用于分解后为块的程序,有的箭头分解为基础线条。
(DEFUN LH:NEWBLOCk (name / bl)
(setq      BL   (VLA-ITEM (vla-get-Blocks
                         (vla-get-ActiveDocument (vlax-get-acad-object))
                     )
                     NAME
             )
      ELST NIL
)
(VLAX-FOR X BL
    (SETQ ELST (CONS (ENTGET (vlax-vla-object->ename X)) ELST))
)
(SETQ      ELST (MAPCAR (FUNCTION (LAMBDA (Y)
                                 (VL-REMOVE-IF
                                 (FUNCTION (LAMBDA (X)
                                             (OR (= (CAR X) -1)
                                                   (= (CAR X) 330)
                                                   (= (CAR X) 5)
                                                   (= (CAR X) -1)
                                             )
                                             )
                                 )
                                 Y
                                 )
                               )
                     )
                     ELST
             )
)

(LH:LSPDXF ELST NAME)
)
;;;;;把elst和name替换后 ,就是lsp程序了
(DEFUN LH:LSPDXF (ELST NAME)
(entmake (list
             '(0 . "BLOCK")
             '(100 . "AcDbEntity")
             '(67 . 0)
             '(8 . "0")
             '(100 . "AcDbBlockBegin")
             '(70 . 0)
             '(10 0.0 0.0 0.0)
             (CONS 2 NAME)
             '(1 . "")
         )
)
(MAPCAR 'entmake ELST)
(entmake (list
             '(0 . "ENDBLK")
         )
)
(entupd (tblobjname "Block" NAME))

)
;;;;;;LH:NEWClosedBlank写进自己lsp文件,就可以重新定义块了
;;;;;;;;;(cdr (assoc 330 (entget (tblobjname "BLOCK" "_ClosedBlank"))));;;DIMBLK:(参照的 BLOCK 的句柄)设置尺寸线或引线末端显示的箭头块。
;;;;其中330是必须的,330得到是真正暴露出来的可用图元名,(tblobjname "BLOCK" "_ClosedBlank")得到的是不可以被引用
;;;;标注样式是箭头组码是342
;;;;;;多重引线的箭头组码是 341
(DEFUN LH:NEWClosedBlank ()
(entmake (list
             '(0 . "BLOCK")
             '(100 . "AcDbEntity")
             '(67 . 0)
             '(8 . "0")
             '(100 . "AcDbBlockBegin")
             '(70 . 0)
             '(10 0.0 0.0 0.0)
             (CONS 2 "_ClosedBlank")
             '(1 . "")
         )
)
(MAPCAR 'entmake
          (LIST'((0 . "LINE")
            (100 . "AcDbEntity")
            (67 . 0)
            (8 . "0")
            (62 . 0)
            (6 . "ByBlock")
            (370 . -2)
            (100 . "AcDbLine")
            (10 -1.0 0.166667 0.0)
            (11 -1.0 -0.166667 0.0)
            (210 0.0 0.0 1.0)
             )
            '((0 . "LINE")
            (100 . "AcDbEntity")
            (67 . 0)
            (8 . "0")
            (62 . 0)
            (6 . "ByBlock")
            (370 . -2)
            (100 . "AcDbLine")
            (10 0.0 0.0 0.0)
            (11 -1.0 -0.166667 0.0)
            (210 0.0 0.0 1.0)
             )
            '((0 . "LINE")
            (100 . "AcDbEntity")
            (67 . 0)
            (8 . "0")
            (62 . 0)
            (6 . "ByBlock")
            (370 . -2)
            (100 . "AcDbLine")
            (10 -1.0 0.166667 0.0)
            (11 0.0 0.0 0.0)
            (210 0.0 0.0 1.0)
             )
         )
)
(entmake (list
             '(0 . "ENDBLK")
         )
)
(entupd (tblobjname "Block" "_ClosedBlank"))
)






kucha007 发表于 2024-3-14 13:26:54

本帖最后由 kucha007 于 2024-3-14 13:27 编辑

也不是不行,就是需要先创建箭头块,再创建标注样式的时候引用。具体可参考这篇帖子:

http://bbs.mjtd.com/forum.php?mo ... 503&fromuid=7329538

你有种再说一遍 发表于 2024-3-15 03:03:58

不知道坛主为什么不去删掉冒号L,不然好多:L表情

rhww 发表于 2024-3-15 08:28:40

好多表情:Q-
页: [1]
查看完整版本: 标注箭头,多重引线箭头块定义"暴露"操作步骤