- 积分
- 25842
- 明经币
- 个
- 注册时间
- 2013-12-26
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
CAD绘图初始化探讨暨setup函数解析
在前文中,出现大量的setup函数,这个究竟做了什么事情。首先得探讨一下绘图初始化。
墙线绘制源码解析(支持UCS,偏心或居中布置,厚度设置,自动填充)
http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580
绘图初始化
结构绘图,有线型,文字样式,标注样式,图层的统一要求。(为何统一,自行领悟)
是故,初始化首要问题是处理线型,文字,标注,图层的设置。其次才是CAD操作的变量设置,比如取消捕捉z坐标值osnapz=1。- ;设置主程序
- (defun C:init()
- (vl-load-com)
- (setvar "cmdecho" 0)
- (ShaDu)
- (setup_G_hei)
- (terpri)
- (setup_G_text)
- (terpri)
- (setup_LineType)
- (terpri)
- (setup_layers)
- (terpri)
- (setup_G_DS_100)
- (terpri)
- )
1,文字样式
为三种,黑体用于图名,宋体用于图签,仿宋用于其他- ; 设置当前文字样式-黑体
- (defun setup_G_hei ()
- (if ( = (tblsearch "style" "黑体") nil)
- (command "style" "黑体" "SIMHEI.TTF" "0" "0.8" "" "" "" ))
- (princ "黑体为当前文字样式")
- (princ)
- )
重要且各个公司不一致的地方在这个shx字体的设置,_bxsz.shx,_bxfs.shx分别问字母数字与大字体。各位务必根据实际使用情况修改。- ; 设置当前文字样式
- (defun setup_G_text ()
- (if ( = (tblsearch "style" "G_text") nil)
- (command "style" "G_text" "_bxsz.shx,_bxfs.shx" "0" "0.7" "" "" "" ""))
- (princ "G_text为当前文字样式")
- (princ)
- )
而通用函数提供make_textstyle是使用entmake函数,不具备command函数的当前设置功能。
2,线型
线型主要是针对虚线,轴线,和复杂线型的设置。不同的图纸比例对应不同线型的比例。
线型设置是比较复杂的,一般人不要懂。讲了也是无用。
代码步骤为:1,无线型时,加载。2,加载仍无时,修改线型文件,创建线型再加载。3,普通线型和复杂线型创建方式有区别。- (defun setup_LineType()
- (setvar "ltscale" 1000) ;确保lts为1000,当按1:100出图时
- (mapcar '(lambda(ltname ltdetail ltdefine);参数为三个,名称,说明,格式
- (if ( = (tblsearch "LTYPE" ltname) nil)
- ;当前列表没有ltname,尝试加载之
- (progn
- (setq acadlinPath (findfile "acad.lin"))
- (if acadlinPath
- (command "linetype" "l" ltname acadlinPath ""))
-
- ;加载后,再次检测
- (if ( = (tblsearch "LTYPE" ltname) nil)
- ;还是没有,则创建线型。
- (progn
- (command "linetype" "c" ltname acadlinPath ltdetail ltdefine "")
- ;创建线型后加载之。
- (command "linetype" "l" ltname acadlinPath "")
-
- );progn
- );if
-
- );progn
-
- );if
- (princ ltname);输出加载线型
- );lambda
- '("_DASHED100" "_AXIS100" )
- '("_DASHED100 -- -- -- -- -- -- -- -- -- --" "_AXIS100 _________________._________________" )
- '("0.3,-0.1" "2.5,-0.1,0.25,-0.1" )
- );mapcar
- ;*A_LINE,---- A ---- A ---- A----
- ;A,.75,-.125,["A",黑体,S=0.25,R=0.0,X=-0.085,Y=-0.125],-.125
- ;复杂线型加载
-
- (mapcar '(lambda(ltname ltdetail ltdefine);参数为三个,名称,说明,格式
- (if ( = (tblsearch "LTYPE" ltname) nil)
- ;当前列表没有ltname,尝试加载之
- (progn
- (setq acadlinPath (findfile "acad.lin"))
- (if acadlinPath
- (command "linetype" "l" ltname acadlinPath ""))
-
- ;加载后,再次检测
- (if ( = (tblsearch "LTYPE" ltname) nil)
- ;还是没有,则创建线型。
- (progn
- (setq f (open acadlinPath "a") )
- (write-line ltdetail)
- (write-line ltdefine)
- (close f)
- ;创建线型后加载之。
- (command "linetype" "l" ltname acadlinPath "")
-
- );progn
- );if
- );progn
- );if
- (princ ltname);输出加载线型
- );lambda
- '("A_LINE" )
- '("*A_LINE,---- A ---- A ---- A----" )
- '("A,.75,-.125,["A",黑体,S=0.25,R=0.0,X=-0.085,Y=-0.125],-.125")
- );mapcar
- );defun
- ;创建线型后,必须进行加载才能使用该线型。
- ;不能使用 LINETYPE 命令创建复杂线型。
3,标注样式
不是很多人懂标注样式里的设置。让人觉得相当遗憾。
我想多说几句,又觉多说无益,还是自行领悟吧!然,必须强调的是,文字是符号性的东西,与图纸比例相关。
举个例子:让人比较容易理解的设置是,比如,文字高度设为3,将全局比例设为100,如此,文字高度为300。出图效果为3mm(图纸比例为1:100时),还有一个测量比例因子。详本人文章智能生成标注样式一文,标准化标注源码解析与测试(支持UCS,智能标注样式)http://bbs.mjtd.com/forum.php?mo ... amp;fromuid=7303580
4,图层
图层包括设置与调用(指设为当前)。一般图层名为较为复杂的名称如"G-AXIS(主轴线)"
调用时,使用别名,是比较合适的,如去掉前缀与中文解释后的axis。
使用entmake生成图层- (defun make_layer(layername code-6 code-62 code-370)
- (if (null (tblobjname "LAYER" layername) )
- (entmake (list '(0 . "LAYER")
- '(100 . "AcDbSymbolTableRecord")
- '(100 . "AcDbLayerTableRecord")
- '(70 . 0)
- (cons 2 layername)
- (cons 6 code-6) ;线型Continuous
- (cons 62 code-62) ;颜色
- (cons 370 code-370) ;线宽,整数,50表示0.50 9表示0.09
- )
- )
- );if
- );defun
而我常用的调用函数即setup为- (defun setup(layerAlias)
- (setq layerAliases_list '("AXIS""AXIS_TEXT""LABEL""SLAB_HATCH""STAIR""TABLE""TITLE""AZ""AZ_HATCH""AZ_TEXT"
- "BAR""BAR_P""BAR_TEXT""BEAM_BAR""BEAM_IN""BEAM_OUT""BEAM_TEXT""CBEAM_TEXT""CBEAM_BAR"
- "COL""COL_HATCH""COL_TEXT""COL_U""CAP""CP_TEXT""DIM_IN""DIM_OUT""GZ""GZ_HATCH"
- "GZ_TEXT""OUTLINE""PILE""PILE_X""SLAB_BAR_HATCH""SLAB_OUT""SLAB_TEXT""SYMBOL""TEXT""REFER"))
- (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(暗柱号)"
- "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(次梁钢筋文字)"
- "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(构造柱填充)"
- "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(索引)"))
- (setq color_list '("9""255""3""11""2""3""1""3""8""2"
- "20""3""2""2""7""2""2""40""40"
- "6""8""2""150""7""2""1""1""4""1"
- "2""2""2""3""11""203""2""3""2""3")
- )
-
- (setq linetype_list '("_AXIS100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""CONTINUOUS""CONTINUOUS"
- "CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"
- "CONTINUOUS""CONTINUOUS""CONTINUOUS""_DASHED100""_DASHED100""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"
- "CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS""CONTINUOUS"))
-
- (setq linewidth_list '("0.13""0.3""0.13""0.13""0.13""0.13""0.13""0.13""0.13""0.25"
- "0.5""0.13""0.25""0.25""0.25""0.25""0.25""0.25""0.25"
- "0.45""0.13""0.25""0.45""0.25""0.25""0.13""0.13""0.45""0.13"
- "0.13""0.25""0.25""0.13""0.13""0.25""0.25""0.13""0.25""0.13"))
-
- (setq num (vl-position (strcase (vl-princ-to-string layerAlias)) layerAliases_list))
- (if num
- (progn
- (setq layname (nth num layer_list))
- ;查找图层
- (if ( = (tblsearch "LAYER" layname) nil)
-
- (progn
- (setq laycolor (nth num color_list)
- linetype (nth num linetype_list)
- linewidth (nth num linewidth_list)
- )
-
- ; (command "layer" "m" layname
- ; "c" laycolor layname
- ; "l" linetype layname
- ; "lw" linewidth layname
- ; ""
- ; )
- (make_layer layname linetype (atoi laycolor) (fix (* 100 (atof linewidth))))
- (setvar "clayer" layname)
- );progn
- (setvar "clayer" layname)
-
- );if
- );progn
- );if num
- (princ)
- );defun
值得注意的是,entmake与command,对于在此的应用,其速度区别,并不会影响体验。且必须明白,线型设置是图层设置的前置条件。
其他
最后说一个修订云线命令,自动放在在非打印图层里。- ;修订云线RECloud Rectangle
- (defun C:revr()
- (command "layer" "m" "注释"
- "c" "35" "注释"
- "p" "n" "注释"
- ""
- )
- (setq t1(getpoint "\n输入第一点"))
- (setq t2(getcorner t1 "\n输入对角点"))
- ;(command "rectangle" "w" "50" t1 t2)
- (setq oldplwid (getvar "PLINEWID" ))
- (setvar "PLINEWID" 50)
- (command "rectangle" t1 t2)
- (command "revcloud" "a" "150" "450" "s" "c" "o" (entlast) "")
- (setvar "PLINEWID" oldplwid)
- (princ)
- )
这个绘图初始化,或许只是对我这种纯cad画结构图显得有用。也欢迎大家指正与补充,特免费奉送。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|