明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 13365|回复: 27

[源码] CAD绘图初始化探讨与setup函数解析

    [复制链接]
发表于 2014-5-7 21:40 | 显示全部楼层 |阅读模式
CAD绘图初始化探讨暨setup函数解析
在前文中,出现大量的setup函数,这个究竟做了什么事情。首先得探讨一下绘图初始化。
墙线绘制源码解析(支持UCS,偏心或居中布置,厚度设置,自动填充)
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580

绘图初始化
结构绘图,有线型,文字样式,标注样式,图层的统一要求。(为何统一,自行领悟)
是故,初始化首要问题是处理线型,文字,标注,图层的设置。其次才是CAD操作的变量设置,比如取消捕捉z坐标值osnapz=1。
  1. ;设置主程序
  2. (defun C:init()
  3. (vl-load-com)
  4. (setvar "cmdecho" 0)
  5. (ShaDu)
  6. (setup_G_hei)
  7. (terpri)
  8. (setup_G_text)
  9. (terpri)
  10. (setup_LineType)
  11. (terpri)
  12. (setup_layers)
  13. (terpri)
  14. (setup_G_DS_100)
  15. (terpri)
  16. )
1,文字样式
为三种,黑体用于图名,宋体用于图签,仿宋用于其他
  1. ; 设置当前文字样式-黑体
  2. (defun setup_G_hei ()
  3.   (if ( = (tblsearch "style" "黑体") nil)
  4.   (command "style" "黑体" "SIMHEI.TTF" "0" "0.8" "" "" "" ))

  5.   (princ "黑体为当前文字样式")
  6.   (princ)
  7. )
重要且各个公司不一致的地方在这个shx字体的设置,_bxsz.shx,_bxfs.shx分别问字母数字与大字体。各位务必根据实际使用情况修改。
  1. ; 设置当前文字样式
  2. (defun setup_G_text ()
  3.   (if ( = (tblsearch "style" "G_text") nil)
  4.   (command "style" "G_text" "_bxsz.shx,_bxfs.shx" "0" "0.7" "" "" "" ""))

  5.   (princ "G_text为当前文字样式")
  6.   (princ)
  7. )
而通用函数提供make_textstyle是使用entmake函数,不具备command函数的当前设置功能。

2,线型
线型主要是针对虚线,轴线,和复杂线型的设置。不同的图纸比例对应不同线型的比例。
线型设置是比较复杂的,一般人不要懂。讲了也是无用。
代码步骤为:1,无线型时,加载。2,加载仍无时,修改线型文件,创建线型再加载。3,普通线型和复杂线型创建方式有区别。
  1. (defun setup_LineType()
  2.     (setvar "ltscale" 1000)  ;确保lts为1000,当按1:100出图时
  3. (mapcar '(lambda(ltname ltdetail ltdefine);参数为三个,名称,说明,格式
  4. (if ( = (tblsearch "LTYPE" ltname) nil)
  5.     ;当前列表没有ltname,尝试加载之
  6.     (progn
  7.       (setq acadlinPath (findfile "acad.lin"))
  8.       (if acadlinPath
  9.   (command "linetype" "l" ltname  acadlinPath ""))
  10.   
  11.     ;加载后,再次检测
  12.    (if ( = (tblsearch "LTYPE" ltname) nil)
  13.      ;还是没有,则创建线型。
  14.      (progn
  15.          (command "linetype" "c" ltname  acadlinPath ltdetail ltdefine "")
  16.   ;创建线型后加载之。
  17.           (command "linetype" "l" ltname  acadlinPath "")
  18.          
  19.        );progn
  20.        );if
  21.       
  22.     );progn
  23.   
  24.   );if
  25.   (princ ltname);输出加载线型
  26.   );lambda
  27.      '("_DASHED100" "_AXIS100" )
  28.    '("_DASHED100 -- -- -- -- -- -- -- -- -- --" "_AXIS100 _________________._________________" )
  29.    '("0.3,-0.1" "2.5,-0.1,0.25,-0.1" )
  30.   );mapcar  
  31.       ;*A_LINE,---- A ---- A ---- A----  
  32.       ;A,.75,-.125,["A",黑体,S=0.25,R=0.0,X=-0.085,Y=-0.125],-.125
  33.   ;复杂线型加载
  34.   
  35.   (mapcar '(lambda(ltname ltdetail ltdefine);参数为三个,名称,说明,格式
  36.   (if ( = (tblsearch "LTYPE" ltname) nil)
  37.       ;当前列表没有ltname,尝试加载之
  38.     (progn
  39.       (setq acadlinPath (findfile "acad.lin"))
  40.       (if acadlinPath
  41.   (command "linetype" "l" ltname  acadlinPath ""))
  42.   
  43.     ;加载后,再次检测
  44.    (if ( = (tblsearch "LTYPE" ltname) nil)
  45.      ;还是没有,则创建线型。
  46.      (progn
  47.          (setq f (open acadlinPath "a") )
  48.      (write-line ltdetail)
  49.      (write-line ltdefine)
  50.      (close f)

  51.   ;创建线型后加载之。
  52.           (command "linetype" "l" ltname  acadlinPath "")
  53.          
  54.        );progn
  55.      );if
  56.   );progn
  57.   );if
  58.        (princ ltname);输出加载线型
  59.   );lambda
  60.     '("A_LINE" )
  61.     '("*A_LINE,---- A ---- A ---- A----" )
  62.     '("A,.75,-.125,["A",黑体,S=0.25,R=0.0,X=-0.085,Y=-0.125],-.125")
  63.   );mapcar
  64.   );defun

  65. ;创建线型后,必须进行加载才能使用该线型。

  66. ;不能使用 LINETYPE 命令创建复杂线型。
3,标注样式
不是很多人懂标注样式里的设置。让人觉得相当遗憾。
我想多说几句,又觉多说无益,还是自行领悟吧!然,必须强调的是,文字是符号性的东西,与图纸比例相关。
举个例子:让人比较容易理解的设置是,比如,文字高度设为3,将全局比例设为100,如此,文字高度为300。出图效果为3mm(图纸比例为1:100时),还有一个测量比例因子。详本人文章智能生成标注样式一文,标准化标注源码解析与测试(支持UCS,智能标注样式)http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580

4,图层
图层包括设置与调用(指设为当前)。一般图层名为较为复杂的名称如"G-AXIS(主轴线)"
调用时,使用别名,是比较合适的,如去掉前缀与中文解释后的axis。
使用entmake生成图层
  1. (defun make_layer(layername code-6 code-62 code-370)
  2. (if (null (tblobjname "LAYER" layername) )
  3. (entmake (list '(0 . "LAYER")
  4.         '(100 . "AcDbSymbolTableRecord")
  5.         '(100 . "AcDbLayerTableRecord")
  6.         '(70 . 0)
  7.     (cons 2 layername)
  8.         (cons 6 code-6)   ;线型Continuous
  9.        (cons 62 code-62)  ;颜色
  10.     (cons 370 code-370)  ;线宽,整数,50表示0.50 9表示0.09
  11.         )
  12.     )
  13. );if
  14. );defun  
而我常用的调用函数即setup为
  1. (defun   setup(layerAlias)
  2. (setq layerAliases_list '("AXIS""AXIS_TEXT""LABEL""SLAB_HATCH""STAIR""TABLE""TITLE""AZ""AZ_HATCH""AZ_TEXT"
  3.   "BAR""BAR_P""BAR_TEXT""BEAM_BAR""BEAM_IN""BEAM_OUT""BEAM_TEXT""CBEAM_TEXT""CBEAM_BAR"
  4.   "COL""COL_HATCH""COL_TEXT""COL_U""CAP""CP_TEXT""DIM_IN""DIM_OUT""GZ""GZ_HATCH"
  5.   "GZ_TEXT""OUTLINE""PILE""PILE_X""SLAB_BAR_HATCH""SLAB_OUT""SLAB_TEXT""SYMBOL""TEXT""REFER"))

  6.   (setq layer_list '("G-AXIS(主轴线)""G-AXIS_TEXT(轴线号)""G-LABEL(引线)""G_SLAB_HATCH(板填充)""G-STAIR(楼梯)""G-TABLE(表格线)""G-TITLE(标题)""G_AZ(暗柱)""G_AZ_HATCH(暗柱填充)""G_AZ_TEXT(暗柱号)"
  7.   "G_BAR(钢筋)""G_BAR_P(点钢筋)""G_BAR_TEXT(钢筋文字)""G_BEAM_BAR(梁筋文字)""G_BEAM_IN(梁虚线)""G_BEAM_OUT(梁实线)""G_BEAM_TEXT(梁截面文字)""G_CBEAM_TEXT(次梁截面文字)""G_CBEAM_BAR(次梁钢筋文字)"
  8.   "G_COL(墙柱)""G_COL_HATCH(墙柱填充)""G_COL_TEXT(墙柱号)""G_COL_U(下层墙柱)""G_CAP(承台)""G_CP_TEXT(承台及桩号)""G_DIM_IN(内尺寸)""G_DIM_OUT(主尺寸)""G_GZ(构造柱)""G_GZ_HATCH(构造柱填充)"
  9.   "G_GZ_TEXT(构造柱号)""G_OUTLINE(外轮廓线)""G_PILE(桩)""G_PILE_X(桩心)""G_SLAB_BAR_HATCH(板配筋填充)""G_SLAB_OUT(板分界)""G_SLAB_TEXT(板号及板厚)""G_SYMBOL(符号)""G_TEXT(文字)""G_REFER(索引)"))

  10.   (setq color_list '("9""255""3""11""2""3""1""3""8""2"
  11.   "20""3""2""2""7""2""2""40""40"
  12.   "6""8""2""150""7""2""1""1""4""1"
  13.   "2""2""2""3""11""203""2""3""2""3")
  14.   )
  15.   
  16.   (setq linetype_list '("_AXIS100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""CONTINUOUS""CONTINUOUS"
  17.   "CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"
  18.   "CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""_DASHED100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"
  19.   "CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"))
  20.   
  21.   (setq linewidth_list '("0.13""0.3""0.13""0.13""0.13""0.13""0.13""0.13""0.13""0.25"
  22.   "0.5""0.13""0.25""0.25""0.25""0.25""0.25""0.25""0.25"
  23.   "0.45""0.13""0.25""0.45""0.25""0.25""0.13""0.13""0.45""0.13"
  24.   "0.13""0.25""0.25""0.13""0.13""0.25""0.25""0.13""0.25""0.13"))
  25.   
  26.   (setq num (vl-position (strcase (vl-princ-to-string  layerAlias)) layerAliases_list))
  27.   (if num
  28.   (progn
  29.   (setq layname (nth num layer_list))
  30.   ;查找图层
  31.   (if ( = (tblsearch "LAYER" layname) nil)
  32.    
  33.     (progn
  34.     (setq     laycolor  (nth num color_list)
  35.           linetype  (nth num linetype_list)
  36.           linewidth (nth num linewidth_list)   
  37.           )

  38.     ; (command   "layer"       "m"             layname
  39.            ; "c"         laycolor          layname
  40.            ; "l"           linetype           layname
  41.            ; "lw"          linewidth      layname
  42.      ; ""
  43.     ; )
  44.     (make_layer layname linetype (atoi laycolor) (fix (* 100 (atof linewidth))))
  45.     (setvar "clayer" layname)
  46.     );progn
  47.     (setvar "clayer" layname)
  48.   
  49.   );if
  50.   );progn
  51.   );if num
  52.   (princ)
  53.   );defun
值得注意的是,entmake与command,对于在此的应用,其速度区别,并不会影响体验。且必须明白,线型设置是图层设置的前置条件。

其他
最后说一个修订云线命令,自动放在在非打印图层里。
  1. ;修订云线RECloud Rectangle
  2. (defun C:revr()
  3. (command "layer"   "m"        "注释"
  4.       "c"     "35"           "注释"
  5.         "p"        "n"            "注释"
  6.         ""
  7.     )
  8. (setq t1(getpoint "\n输入第一点"))
  9. (setq t2(getcorner t1 "\n输入对角点"))
  10. ;(command "rectangle" "w" "50" t1 t2)
  11. (setq oldplwid (getvar "PLINEWID" ))
  12. (setvar "PLINEWID" 50)
  13. (command "rectangle"  t1 t2)
  14. (command "revcloud" "a" "150" "450" "s" "c" "o" (entlast) "")
  15. (setvar "PLINEWID" oldplwid)
  16. (princ)
  17. )
这个绘图初始化,或许只是对我这种纯cad画结构图显得有用。也欢迎大家指正与补充,特免费奉送。

本帖子中包含更多资源

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

x

评分

参与人数 5明经币 +9 金钱 +24 收起 理由
bzhjl + 1 赞一个!
自贡黄明儒 + 1 很给力!
Gu_xl + 3 + 24 很好!
flyfox1047 + 1 赞一个!
xyp1964 + 3 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2014-10-20 13:45 | 显示全部楼层
谢谢分享。
回复 支持 0 反对 1

使用道具 举报

发表于 2014-5-7 21:45 来自手机 | 显示全部楼层
赞一个,!
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-7 10:11 | 显示全部楼层
CAD绘图初始化探讨与setup函数解析,赞一个,!
 楼主| 发表于 2014-5-7 22:13 | 显示全部楼层
同时,也必须明白,文字样式设置,是复杂线型设置的前提。
发表于 2014-5-7 23:56 | 显示全部楼层
;;删除acaddoc.lsp  是不是只删路径下面的呀,但很多这个文件都在附在DWG文件夹里面的.可能删不干净呀.
发表于 2014-5-8 09:41 | 显示全部楼层
呵呵,纯CAD画图的顶一下
 楼主| 发表于 2014-5-8 10:35 | 显示全部楼层
429014673 发表于 2014-5-7 23:56
;;删除acaddoc.lsp  是不是只删路径下面的呀,但很多这个文件都在附在DWG文件夹里面的.可能删不干净呀.

那个比较初级,而且需要自动加载才有效。有专门介绍acaddoc.lsp清理一文,acaddoc.lsp病毒破防(重磅解析源码级别)
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580
 楼主| 发表于 2014-5-8 19:24 | 显示全部楼层
  1. (write-line ltdetail)
  2. (write-line ltdefine)
复制代码
应为
  1. (write-line ltdetail f)
  2. (write-line ltdefine f)
复制代码
发表于 2014-5-9 13:24 | 显示全部楼层
不错,学习林兄大作。
发表于 2014-5-18 16:06 | 显示全部楼层
谢谢楼主的分享,试用了,非常好,收藏备用了!
发表于 2014-5-18 17:02 | 显示全部楼层
不错不错,学习了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 20:30 , Processed in 0.786903 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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