明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 452|回复: 3

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

[复制链接]
发表于 2024-3-14 09:39 | 显示全部楼层 |阅读模式
本帖最后由 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
             )
  )

  (LHSPDXF ELST NAME)
)
;;;;;把elst  和name  替换后 ,就是lsp程序了
(DEFUN LHSPDXF (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"))
)






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-3-14 13:26 | 显示全部楼层
本帖最后由 kucha007 于 2024-3-14 13:27 编辑

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

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

发表于 2024-3-15 03:03 | 显示全部楼层
不知道坛主为什么不去删掉冒号L,不然好多表情
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-3 04:00 , Processed in 0.190044 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表