明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1386|回复: 5

[函数] 分享-创建Mline多线

[复制链接]
发表于 2025-6-4 14:05:25 | 显示全部楼层 |阅读模式
本帖最后由 zgs378530220 于 2025-6-6 11:59 编辑

(defun NewMLine (StrName / mlinei fastElement lastElement numList substrings newStr mlineNum mlineLeixing mlinelist)
;子程序:创建多线MLINE
;例句:(NewMLine "40*40*3方管");注意字符格式
        (defun vl-string-split (fenge Str)
        (setq result '())
        (while (> (strlen str) 0)
                (setq pos (vl-string-search fenge str))
                (if pos (progn (setq part (substr str 1 pos)) (setq str (substr str (+ pos 2)))) (progn (setq part str) (setq str "")))
                (setq result (cons part result))
        )
        (setq result (reverse result))
        result
        )
        (if (null StrName) exit)
        (setq mlinestyle_list (dictsearch (namedobjdict) "ACAD_MLINESTYLE"))
        (setq t_mline_style_name (strcase (vl-string-translate "*" "X" StrName)))
        (if (vl-position t_mline_style_name (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 3)) mlinestyle_list))) exit)
        (setq substrings '("方管" "圆管" "角钢" "槽钢" "H钢"))
        (setq mlinei 0)(setq mlineNum 5)
        (while (< mlinei (length substrings))
                (if (vl-string-search (nth mlinei substrings) t_mline_style_name)
                        (progn
                                (setq mlineLeixing (nth mlinei substrings))
                                (setq newStr (vl-string-subst "" mlineLeixing t_mline_style_name))
                                (if (= mlineLeixing "角钢") (setq mlineNum 3))
                                (setq mlinei (length substrings))
                        )
                        (setq mlinei (1+ mlinei))
                )
        )
        (if (= newStr "") exit)
        (setq numList (mapcar 'atof (vl-string-split "X" newStr)))
        (setq fastElement (nth 0 numList))
        (setq lastElement (nth (- (length numList) 1) numList))
        (setq mlinelist
                (list
                        (cons 0 "MLINESTYLE") (cons 100 "AcDbMlineStyle") (cons 2 t_mline_style_name) (cons 70 272) (cons 71 mlineNum)
                        (cons 49 (/ fastElement -2.0000)) (cons 62 256) (cons 6 "Bylayer")
                        (cons 49 (- lastElement (/ fastElement 2.0000))) (cons 62 256) (cons 6 "ACAD_ISO02W100")
                        (cons 49 (/ fastElement 2.0000)) (cons 62 256) (cons 6 "Bylayer")
                )
        )
        (if (> mlineNum 3) (setq mlinelist (append mlinelist (list (cons 49 0.0) (cons 62 1) (cons 6 "CENTER") (cons 49 (- (/ fastElement 2.0000) lastElement)) (cons 62 256) (cons 6 "ACAD_ISO02W100")))))
        (dictadd (cdar mlinestyle_list) t_mline_style_name (entmakex mlinelist))
)
加载以上代码后
命令行执行以下语句,就可以示例多线:
(setq xcjm "40*40*3方管")(NewMLine xcjm)(vl-cmdf "_.mline" "st" (vl-string-translate "*" "X" xcjm) "s" 1 "J" "T" '(0 0 0) '(500 500 0) "")

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 金钱 +5 收起 理由
tigcat + 1 + 5 很给力!

查看全部评分

回复

使用道具 举报

发表于 2025-6-6 10:07:51 | 显示全部楼层
可以按需画不同规格的龙骨吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-6-6 11:48:39 | 显示全部楼层
1165617649 发表于 2025-6-6 10:07
可以按需画不同规格的龙骨吗

可以啊,上面代码中substrings增加类型,后面cons中按照自己型材修改就可以了
回复 支持 反对

使用道具 举报

发表于 2025-6-7 07:44:51 | 显示全部楼层
更简单的办法:
只需要定义一个的三线形式的多线,第二个为中心线,第1个和第3个线为定义的任意外观线,线间距设置为0.5。即可随意以多线形式绘图型材和管材。当设定或修改多线的比例时,即可立即自动形成和更改外观,变相的实现型材和管材的自动绘制和自动修改替换。比如设定比例为273,可以表示为外径273钢管,设定比例为40,可以表示为外径40的方管。
重点:相当于将多线的比例参数,与型材或管材的外形尺寸,实现对应关系。
优点:以一个多线样式就可以表达任意规格的型材和管材外观,无需创建多个多线样式,免的杂乱。
缺点:
遗憾的是,多线特性里没有长度属性,常规需要标注长度,才可以知道长度。但编程方式的话,也可提取多线的长度属性。
遗憾的是,对于想表示管道壁厚或H钢的中间厚度,或槽钢边厚,以5线形式的多线样式,没法按上述简单全局比例实现,毕竟同规格型材,但壁厚规格可以有很多,不能以一个参数同时体现外观尺寸和壁厚。
回复 支持 反对

使用道具 举报

发表于 2025-6-7 15:12:36 | 显示全部楼层
试试看挺好的

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-3 08:58 , Processed in 0.169406 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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