明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3531|回复: 10

[源码] entmake创建线型——绘图标准化

[复制链接]
发表于 2018-9-20 08:58 | 显示全部楼层 |阅读模式
绘图标准化在初始线型的时候,原用command命令,并且修改线型文件。其实可以用entmake(entmakex)函数创建。更加简洁。
原文出处:CAD绘图初始化探讨与setup函数解析
http://bbs.mjtd.com/forum.php?mo ... 015&fromuid=7303580
创建虚线:(lts为1000)
  1. (defun make_dash( / temp-list)
  2. (setq temp-list (list '(0 . "LTYPE") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLinetypeTableRecord")
  3. '(2 . "DASHED") '(70 . 0) '(3 . "Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _")
  4. '(72 . 65) '(73 . 2) '(40 . 0.4) '(49 . 0.3) '(74 . 0) '(49 . -0.1) '(74 . 0)))
  5. (entmakex temp-list)
  6. )
创建点划线:
  1. (defun make_axis( / temp-list)
  2. (setq temp-list (list '(0 . "LTYPE")  '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLinetypeTableRecord")
  3. '(2 . "DOTE") '(70 . 0) '(3 . "DOTE _________________._________________")
  4. '(72 . 65) '(73 . 4) '(40 . 2.725) '(49 . 2.5) '(74 . 0) '(49 . -0.1) '(74 . 0) '(49 . 0.025) '(74 . 0) '(49 . -0.1) '(74 . 0)))
  5. (entmakex temp-list)
  6. )
如果创建失败,返回为nil,是图纸中已含该线型的定义。可以修改。比如修改虚线:
  1. (defun std-dashed(en /  code73 code40 vallist ent X)
  2. ;函数std-dashed,参数en 图元名。返回值,标准虚线,由vallist参数内定。
  3. ;Desiged by 林霄云 2018年9月17日
  4. ;(tblobjname "ltype" "dashed");用于测试。可以作为参数传递对象。
  5. ;(0 . LTYPE) (0 . LTYPE)  (5 . 249) (100 . AcDbSymbolTableRecord) (100 . AcDbLinetypeTableRecord) (2 . DASHED) (70 . 0) (3 . Dashed __ __ __ __ __ __ __ __ __ __ __ __ __ _)
  6. ; (72 . 65) (73 . 2) (40 . 0.4) (49 . 0.3) (74 . 0) (49 . -0.1) (74 . 0))
  7. (setq code73 2 code40 0.4 vallist '(0.3 -0.1))
  8. (setq ent (entget en))
  9. ;第一步,去掉49、74
  10. (setq ent  
  11. (vl-remove-if '(lambda(X)
  12. (if (= 49 (car X) ) t )  
  13. );lambda
  14. ent
  15. ));
  16. (setq ent  
  17. (vl-remove-if '(lambda(X)
  18. (if (= 74 (car X) ) t )  
  19. );lambda
  20. ent
  21. ));
  22. ;第二步,更新40,73
  23. (setq ent (subst (cons 40 code40)(assoc 40 ent) ent))
  24. (setq ent (subst (cons 73 code73)(assoc 73 ent) ent))
  25. ;第三步,添加新的49、74
  26. (mapcar '(lambda(x)(setq ent (append ent (list (cons 49 x)(cons 74 0))))) vallist)
  27. (princ ent)
  28. (entmod ent)

  29.   );defun


本文可作为entmake创建图元的补充:
entmake创建图元必要条件(慢慢更新)
http://bbs.mjtd.com/forum.php?mo ... 482&fromuid=7303580



"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-9-20 09:00 | 显示全部楼层
给力 同为结构人  感谢楼主为标准化画图做的贡献
发表于 2018-9-20 20:48 | 显示全部楼层
请问如何创建复杂线型?(带字符串的)
 楼主| 发表于 2018-9-25 08:51 | 显示全部楼层
原地踏步 发表于 2018-9-20 20:48
请问如何创建复杂线型?(带字符串的)

先取得复杂线型dxf的定义数据:(entget (tblobjname "ltype" "复杂线型名称“))
发表于 2018-9-25 11:42 | 显示全部楼层
林霄云 发表于 2018-9-25 08:51
先取得复杂线型dxf的定义数据:(entget (tblobjname "ltype" "复杂线型名称“))

我有另外一个思路 我觉得不如自己做一个dwt模板文件 更省事

点评

可以。  发表于 2018-9-25 16:26
发表于 2018-9-30 08:22 | 显示全部楼层
林霄云 发表于 2018-9-25 08:51
先取得复杂线型dxf的定义数据:(entget (tblobjname "ltype" "复杂线型名称“))

所谓“创建”,就是图中原本不存在的。用tblobjname只能返回nil。

点评

当然是在有的图上去获取。需要用的图上都有了,还需要创建吗?  发表于 2018-9-30 09:23
发表于 2023-6-7 11:20 | 显示全部楼层
林霄云 发表于 2018-9-25 08:51
先取得复杂线型dxf的定义数据:(entget (tblobjname "ltype" "复杂线型名称“))

不清楚哪些是必要的,哪些是多余的,生成不出来
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 07:55 , Processed in 0.233738 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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