标注箭头,多重引线箭头块定义"暴露"操作步骤
本帖最后由 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:27 编辑
也不是不行,就是需要先创建箭头块,再创建标注样式的时候引用。具体可参考这篇帖子:
http://bbs.mjtd.com/forum.php?mo ... 503&fromuid=7329538
不知道坛主为什么不去删掉冒号L,不然好多:L表情 好多表情:Q-
页:
[1]