sdh123321 发表于 2025-3-15 17:49:50

构建圆圈零件序号的标准多重引线样式定义(请大师答疑)

本帖最后由 sdh123321 于 2025-3-15 18:07 编辑

CAD,本身可以定义圆圈多重引线样式,最终效果见下图,附cad图中样例



优点:似乎自带反应器,改动夹点位置,线自动拉长,线始终对准圆圈中心。

其设置方法:菜单-格式-多重引线样式。按如下设置内容,可实现上面最终引线样式的截图效果


通过如下代码,计划实现自定义引线样式,对比组码和设置项,效果绝大数与设置一致,但有3处错误,上图中红圈中的位置的(上图设置是正确的,但定义无法定义)分别对应组码 (340 . <图元名: 1e38c4ff950>); 引线类型 ID   
(341 . <图元名: 1e38b9e9db0>) ;箭头 ID
'(343 . <图元名: 1e38ba753a0>);块内容 ID,
向大家交流学习,若定义中涉及其它图元名是怎么获取这些图元名的?望大师解惑


下图代码中,可更改cad对象类型字符和相应组码,也可以轻松用于自定义文字样式等非图形对象
(defun MLEADERSTYLE-SDH-LJXH
(
/
MLEADERSTYLE-Lst
MLEADERSTYLE00
MLEADERSTYLE-Dict
)
(setq MLEADERSTYLE-LST
    (list
    '(0 . "MLEADERSTYLE")
    '(102 . "{ACAD_REACTORS")
    '(102 . "}")
    '(100 . "AcDbMLeaderStyle")
    '(179 . 0);   MLEADERSTYLE(DXF)组码中无179,不知道什么意思.   通用组码是文字附着点
    '(170 . 1);内容类型
    '(171 . 1);绘制多重引线次序类型
    '(172 . 0) ;绘制引线次序类型
    '(90 . 0) ;最大引线线段点
    '(40 . 0.0) ;第一线段角度约束
    '(41 . 0.0) ;第二线段角度约束
    '(173 . 1);引线类型
    '(91 . -1023410170) ;引线颜色
    ;'(340 . <图元名: 1e38c4ff950>); 引线类型 ID
    '(92 . -1) ;引线线宽
    '(290 . 1);启用基线
    '(42 . 2.0);基线间隙
    '(291 . 0) ;启用基线
    '(43 . 0.36);基线长度
    '(3 . "Standard")
    ;'(341 . <图元名: 1e38b9e9db0>) ;箭头 ID
    ;'(71 . 0) ;;      无用   LEADER的组码71,箭头标志:0 = 禁用;1 = 启用
    '(44 . 0.0) ;;箭头大小
    '(300 . "") ;默认多行文字内容
    ;'(342 . <图元名: 1e38c4ff910>); 多行文字样式ID
    '(174 . 1) ;文字左附着样式
    '(178 . 6);文字连接位置类型-右
    '(175 . 1);文字角度类型
    '(176 . 0);文字对齐类型
    '(93 . -1056964608) ;文字颜色
    '(45 . 4.0) ;文字高度
    '(292 . 0) ;启用文字边框
    '(297 . 0);文字始终左对齐
    '(46 . 4.0);对齐空间
    ;'(343 . <图元名: 1e38ba753a0>);块内容 ID
    '(94 . -1023410170) ;块内容颜色
    '(47 . 1.0) ;X轴上的块内容比例
    '(49 . 1.0) ;Y轴上的块内容比例
    '(140 . 1.0);Z轴上的块内容比例
    '(293 . 1) ;启用块内容比例
    '(141 . 0.0) ;块内容旋转
    '(294 . 1) ;启用块内容旋转
    '(177 . 1) ;块内容连接类型
    '(142 . 1.0);比例
    '(295 . 0) ;覆盖特性值
    '(296 . 0) ;注释性
    '(143 . 0.0) ;打断间距大小
    '(271 . 0) ;多行文字内容的文字附着方向:0 = 水平,1= 垂直
    '(272 . 9);底部文字附着方向:9 = 居中,10 = 下划线并居中
    '(273 . 9);顶部文字附着方向:
    '(298 . 0);            MLEADERSTYLE(DXF)组码中无298,不知道什么意思.AI查询 0显示对象1不显示对象
    )
)
(setq MLEADERSTYLE00 (dictsearch(namedobjdict) "ACAD_MLEADERSTYLE"))
;返回:
;;;((-1 . <图元名: 2b398af0690>) (0 . "DICTIONARY") (5 . "1E9") (102 . "{ACAD_REACTORS") (330 . <图元名: 2b398ae90c0>) (102 . "}") (330 . <图元名: 2b398ae90c0>)
;;;(100 . "AcDbDictionary") (280 . 0) (281 . 1)
;;;(3 . "SDH-LJXH") (350 . <图元名: 2b39a0b5d40>)
;;;(3 . "SDH-WZSM") (350 . <图元名: 2b39a0b5d50>)
;;;(3 . "Standard") (350 . <图元名: 2b398aee0a0>))
(if
    (null(member '(3 . "SDH-LJXH66") MLEADERSTYLE00))
    (progn
      (setq MLEADERSTYLE-Dict (cdr(assoc -1 MLEADERSTYLE00)))
      (dictaddMLEADERSTYLE-Dict "SDH-LJXH66" (entmakex MLEADERSTYLE-LST))
    )
)
(if
    (member '(3 . "SDH-LJXH66") MLEADERSTYLE00)
    (progn
      (entget(cdr(cadr(member '(3 . "SDH-LJXH66") MLEADERSTYLE00))));
    )
)
;cadr返回列表第二个元素
;cdr 返回去掉第一个元素后的列表。但注意若为点对表,则返回第二个元素
;(princ)
)

sdh123321 发表于 2025-3-16 21:22:38

查找资料大半夜,已解决。通过mleaderstyle词典的方法,增加一个mleaderstyle的obj对象,然后对该obj对象设定属性值的方式解决。
设定值,可从对话框中已经定义好的样式,反向查找属性,获取设定值。

理想状态:程序自己自定义mleaderstyle,依据自动生成的零件个别坐标,自动生成mleader对象并顺序自动赋值零件序号,自动弹窗填写材料明细表的DCL窗口,自动生成明细表。
目标实现:特定专业画图程序启动后,自动画图同时,自动标记零件序号,自动生成明细表。

liuhe 发表于 2025-3-17 17:07:06

http://bbs.mjtd.com/thread-189611-1-1.html

页: [1]
查看完整版本: 构建圆圈零件序号的标准多重引线样式定义(请大师答疑)