程序为借鉴论坛里代码,拼接而成,希望实现自动建立多重引线样式,2014测试结果,说参数太少,但样式建立了,利用的DXF组码基本上没有起作用啊!求解!- (defun AddMLeaderStyle (style / _catchapply dict item)
- (defun _catchapply (_function _parameters / result)
- (if (not
- (vl-catch-all-error-p
- (setq result (vl-catch-all-apply _function _parameters))
- )
- )
- result
- )
- )
- (cond ((not (setq dict
- (_catchapply
- 'vla-item
- (list (vla-get-dictionaries
- (vla-get-activedocument (vlax-get-acad-object))
- )
- "ACAD_MLEADERSTYLE"
- )
- )
- )
- )
- nil
- )
- ((setq item (_catchapply 'vla-getobject (list dict style))))
- ((_catchapply
- 'vla-addobject
- (list dict style "AcDbMLeaderStyle")
- )
- )
- )
- )
- ;;*****************************************************************************
- ;;功 能:绘图程序的初始化处理,记录当前层名、线型、颜色、捕捉方式、文本样式、文本高度,
- ;; 控制点标记可见方式、主单位值消零处理方式、命令行回显方式、然后关闭目标捕捉,
- ;; 设置线形随层、颜色随层、设置命令行不回显、不显示控制点标记、对主单位值后续零作消零处理
- ;;说 明:和函数YL_end配对使用。
- (defun YL_begin ()
- (setq oderr *error*) ;;保存原来的*error*
- (setq *error* YL_err) ;;将*error*用自己的错误处理函数替代
- (setq odltp (getvar "celtype")) ;;记录当前线型设置
- (setq odclr (getvar "cecolor")) ;;记录当前颜色设置
- (setq odosm (getvar "osmode")) ;;记录当前捕捉方式
- (setq odlay (getvar "clayer")) ;;记录当前层
- (setq odsty (getvar "textstyle")) ;;记录当前文本样式
- (setq odtsz (getvar "textsize")) ;;记录当前文本高度
- (setq odbpm (getvar "blipmode")) ;;记录当前控制点标记是否可见
- (setq odzin (getvar "dimzin")) ;;记录主单位值消零处理方式
- (setq odcmd (getvar "cmdecho")) ;;记录命令行回显方式
- (setvar "celtype" "bylayer") ;;设置线形随层
- (setvar "cecolor" "bylayer") ;;设置颜色随层
- (setvar "cmdecho" 0) ;;设置命令行不回显
- (setvar "blipmode" 0) ;;不显示控制点标记
- (setvar "dimzin" 8) ;;对主单位值后续零作消零处理,因为DIMZIN 对 AutoLISP rtos 和 angtos 函数执行实数向字符串转换操作有影响。
- (setvar "osmode" 0) ;;关闭对象捕捉方式
- )
- ;;*****************************************************************************
- ;;YL_end
- ;;功 能:程序结束,恢复程序开始前的设置。
- ;; 恢复YL_begin设置的系统变量表中的数值。
- ;;说 明:和函数YL_begin配对使用。
- (defun YL_end ()
- (setvar "celtype" odltp)
- (setvar "cecolor" odclr)
- (setvar "osmode" odosm)
- (setvar "textstyle" odsty)
- (setvar "textsize" odtsz)
- (setvar "blipmode" odbpm)
- (setvar "dimzin" odzin) ;;恢复主单位值消零处理方式
- (command "layer" "s" odlay "")
- (setvar "cmdecho" odcmd)
- (setq *error* oderr) ;;恢复原来的*error*
- (princ)
- )
- ;;*****************************************************************************
- ;;YL_err
- ;;功 能:错误处理函数。
- (defun YL_err (msg)
- (princ (strcat "\n错误:" msg "\n")) ;;打印错误原因
- (YL_end) ;;调用函数YL_end恢复程序开始前的设置
- (setq *error* oderr) ;;恢复原来的*error*
- (princ)
- )
- (defun c:test (/ odscal scal nam nam1 txt en1)
- (YL_begin) ;;初始化处理
- (princ "\n按给定比例建立尺寸标注样式程序!")
- (setq odscal (getvar "USERR1")) ;;取系统变量"USERR1"的值为默认比例因子
- (if (equal odscal 0.0 0) ;;如果系统变量的值为0.0(容许误差为0.1)
- (progn ;;则设置
- (setq odscal 100) ;;首次运行,设默认比例因子为100
- (setvar "USERR1" odscal) ;;系统变量userr1存储默认比例因子
- )
- )
- (setq scal (getreal (strcat "\n 请输入比例<" (rtos odscal) ">:")))
- (if (= scal nil) (setq scal odscal)) ;;如果用户直接回车,则使用默认的比例值
- (setq odscal scal)
- (if (not (tblsearch "layer" "-标注")) ;;判断是否存在-标注层,无则创建。
- (command "layer" "m" "-标注" "c" "3" "" "l" "continuous" "" "")
- )
- (setq nam1 (strcat "ST-1比" (rtos scal 2)))
- (if (tblsearch "DIMSTYLE" nam1) ;;判断是否存在nam1标注样式,有则设为当前,无则创建。
- (progn
- (command "DIMSTYLE" "R" nam1)
- (setq txt (strcat "比例尺为 1:" (rtos scal 2) " 尺寸标注样式已存在,名为 " nam1 " 现已设为当前样式!"))
- )
- (progn
- (command "layer" "s" "-标注" "")
- (command"insert" "jt" "0,0" 1 1 0) ;;在图中插入用户自定义的箭头(jt.dwg文件应放在CAD的收索路径中)
- (setq en1 (entlast)) ;;返回图形中最后一个未被删除的图元名
- (entdel en1) ;;删除刚插入的箭头实体,但图形中保留了块的定义。
- (if (tblsearch "style" "bzHZTXT") ;;判断是否存在bzHZTXT字体,有则设为当前,无则创建。
- (setvar "textstyle" "bzHZTXT")
- (command"style" "bzHZTXT" "hztxt_e,hztxt" 0 0.7 0 "n" "n" "n")
- )
- (setvar"DIMTOL" 0);;是否使用公差极限偏差
- (setvar"DIMLIM" 0);;是否使用公差界限
- (setvar"DIMTIH" 0);;是否使用文字在内对齐
- (setvar"DIMTOH" 0);;是否使用文字在外对齐
- (setvar"DIMSE1" 0);;隐藏显示尺寸界线1
- (setvar"DIMSE2" 0);;隐藏显示尺寸界线2
- (setvar"DIMALT" 0);;是否显示换算单位
- (setvar"DIMTOFL" 1);;是否强制关闭尺寸线
- (setvar"DIMSAH" 1);;控制尺寸线箭头块的显示
- (setvar"DIMTIX" 1);;文字始终保持在尺寸界线之间
- (setvar"DIMSOXD" 0);;隐藏显示外侧尺寸线
- (setvar"DIMSD1" 0);;隐藏显示尺寸线1
- (setvar"DIMSD2" 0);;隐藏显示尺寸线2
- (setvar"DIMUPT" 0);;手动放置文字
- (setvar"DIMTOLJ" 1);;公差位置垂直
- (setvar"DIMALTD" 2);;换算单位精度
- (setvar"DIMZIN" 8);;消零(0~15之间)
- (setvar"DIMAZIN" 2);;角度消零(0~3之间)
- (setvar"DIMJUST" 0);;文字水平位置,0置中,1第一条尺寸界线,2第二条尺寸界线,3第一条尺寸界线上方,4第二条尺寸界线上方
- (setvar"DIMFIT" 5);;调整文字选项(0~5)
- (setvar"DIMTZIN" 8);;公差消零(0~15)
- (setvar"DIMALTZ" 0);;公差消零(1~15)
- (setvar"DIMALTTZ" 0);;换算公差消零(1~15)
- (setvar"DIMTAD" 1);;文字垂直位置,0置中,1上方,2外部,3JIS
- (setvar"DIMUNIT" 2);;主单位格式1科学2小数3工程4建筑5分数6建筑,分数格式=2非堆叠,长度单位=4建筑7分数,分数格式=2非堆叠,长度单位=5分数 8windows桌面
- (setvar"DIMAUNIT" 1);;角度格式0十进制度数1度分秒2百分度3弧度
- (setvar"DIMDEC" 0);;主单位线性标注精度为(0~8)
- (setvar"DIMADEC" 4);;角度精度0~8
- (setvar"DIMTDEC" 0);;公差精度0~8
- (setvar"DIMALTU" 2);;换算单位格式1~8
- (setvar"DIMALTTD" 2);;换算公差精度0~8
- (setvar"DIMSCALE" scal);;调整使用全局比例数
- (setvar"DIMASZ" 1);;箭头大小
- (setvar"DIMEXO" 0.8);;尺寸界限起点偏移量
- (setvar"DIMDLI" 1);;尺寸基线间距
- (setvar"DIMEXE" 1);;尺寸超出界限量(超出尺寸线)
- (setvar"DIMRND" 0);;舍入
- (setvar"DIMDLE" 0);;尺寸线超出标记量
- (setvar"DIMTP" 0);;公差极限偏差上限
- (setvar"DIMTM" 0);;公差极限偏差下限
- (setvar"DIMLWD" -1);;为尺寸线指定线宽
- (setvar"DIMLWE" -1);;为尺寸界线指定线宽
- (setvar"DIMTXT" 3.0);;文字高度
- (setvar"DIMCEN" 2.5);;圆心标记大小
- (setvar"DIMTSZ" 0);;箭头为细斜线(倾斜)的大小值,最终值乘以2
- (setvar"DIMALTF" 25.4);;换算比例因子
- (setvar"DIMLFAC" 1);;测量单位比例因子
- (setvar"DIMTVP" 0);;控制标注文字在尺寸线上方或下方的垂直位置
- (setvar"DIMTFAC" 1);;公差格式高度比例
- (setvar"DIMGAP" 0.3);;文字偏移量
- (setvar"DIMCLRD" 256);;为尺寸线、箭头和标注引线指定颜色
- (setvar"DIMCLRE" 256);;为尺寸界线指定颜色
- (setvar"DIMCLRT" 2);;为标注文字指定颜色
- (setvar"DIMDSEP" ".") ;;设置小数点的符号
- (setvar"DIMASSOC" 1) ;;创建非关联标注对象。
- (command "DIMTXSTY" "bzHZTXT");;指定标注的文字样式
- (command "DIMLDRBLK" "_DOT");;设置引线的箭头
- (command "DIMBLK1" "JT");;设置尺寸线第一个端点的箭头
- (command "DIMBLK2" "JT") ;;设置尺寸线第二个端点的箭头
- (command "DIMSTYLE" "S" nam1)
- (setq txt (strcat "比例尺为 1:" (rtos scal 2) " 的尺寸标注样式已建立,名为“ " nam1 "”。并已设为当前标注样式。"))
- )
- )
- (if (= (setq tst (tblobjname "style" "引线")) nil)
- (progn
- (setq obj (vla-add (vla-get-TextStyles (vla-get-ActiveDocument (vlax-get-acad-object))) "引线"))
- (vla-put-width obj 0.75)
- (vl-cmdf "style" "引线" "hztxt_e,hztxt" 0 0.7 0 "n" "n" "n")
- ;(vla-setFont obj "hztxt_e,hztxt" :vlax-false :vlax-false 1 0)
- (setq tst (tblobjname "style" "引线"))
- )
- )
- ;(SETQ N2 (GETVAR "DIMSCALE"));调整使用全局比例数
- (setq DICEN (namedobjdict))
- (setq str (entget dicen))
- (setq str1 (member '(3 . "ACAD_MLEADERSTYLE") str))
- (setq str1 (entget (cdar (cdr str1))))
- (setq str2 (member '(3 . "Standard") str1))
- (setq ty (cdr (cadr str2)))
- (setq datalist
- (append
- (list '(0 . "MLEADERSTYLE") '(100 . "AcDbMLeaderStyle") '(3 . "引线") (cons 342 tst))
- '((179 . 2);文字附着点
- (170 . 2);类容类型
- (171 . 1);绘制多重引线次序类型
- (172 . 0);绘制引线次序类型
- (90 . 2);最大引线点数
- (40 . 1.0471976);第一段角度
- (41 . 1.5708);第二段角度
- (173 . 1);引线类型
- (290 . 1);启用基线
- (42 . 0.8);基线间隙
- (291 . 1);启用基线1启用,0关
- (43 . 2.0);基线长度
- ;(3 . "多重引线");字体样式
- (43 . 2.0);基线长度
- ;(341 . 0);箭头ID
- (44 . 1.0);箭头大小
- ;;; (300 . "sargtaery") ;默认多行文字内容
- ;;;;(342 . <图元名: 7ffff643910>) ;多行文字样式
- (174 . 5);左对齐位置文字连接位置类型 - 左5=最后一行下划线
- (178 . 5);右对齐位置 文字连接位置类型 - 右
- (175 . 1);文字角度
- (176 . 7);文字对齐类型
- (93 . -1023410174);字体颜色
- (45 . 3.5);字高
- (292 . 0);启用文字边框
- (297 . 0);文字始终左对齐
- (46 . 5.0);对齐空间
- (47 . 1.0);X 轴上的块内容比例
- (49 . 1.0);Y 轴上的块内容比例
- (140 . 1.0);Z 轴上的块内容比例
- (293 . 1);启用块内容比例
- (141 . 0.0);块内容旋转
- (294 . 1);启用块内容旋转
- (177 . 0);块内容连接类型
- (142 . 3);比例
- ;(cons 142 N2)
- (295 . 0);覆盖特性值
- (296 . 0);注释性
- (143 . 0.15);打断大小
- (271 . 0);多行文字内容的文字附着方向:0 = 水平1 = 垂直
- (272 . 9);底部文字附着方向:9 = 居中10 = 下划线并居中
- (273 . 9);顶部文字附着方向:9 = 居中10 = 上划线并居中
- )
- )
- )
- (setq xname (entmakex datalist))
- ; (setq dictionary
- ; (list '(0 . "DICTIONARY")
- ; '(100 . "AcDbDictionary")
- ; '(3 . "Standard")
- ; (cons 350 ty)
- ; '(3 . "123")
- ; (cons 350 xname)
- ; )
- ; )
- ;(setq xname (entmakex dictionary))
- ;(dictremove DICEN "ACAD_MLEADERSTYLE")
- ;(dictadd (namedobjdict) "ACAD_MLEADERSTYLE" xname)
- (if (setq obj (AddMLeaderStyle nam1))
- (progn ;(vla-put-textstyle tst ctxtstyle)
- ;(vla-put-textheight obj my_txt_h)
- ;(vla-put-arrowsize key5)
- ;(vla-put-ArrowType key1)
- (setvar "CMLEADERSTYLE" nam1)
- )
- )
- (princ txt)
- (setvar "USERR1" scal) ;;系统变量userr1存储默认比例因子
- (YL_end) ;;恢复程序开始前的设置
- (princ)
- )
|