- 积分
- 289
- 明经币
- 个
- 注册时间
- 2010-11-27
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 nishuihanjian 于 2015-10-20 19:06 编辑
这是我参照论坛前辈的源码修改称符合机械行业的,还有一点瑕疵,问题如下:
1、怎么让他的文字和箭头效果最佳,也就是调整里面的第一项
2、怎么让他支持放大倍数支持到0.5,1.5,2.5,3.5……这样的倍数
如果解决以上两个问题那么这个工作效率提高几十倍,几乎是最好的设置程序。
(defun make_textstyle( stylename )
;stylename 字体样式名称
;(setq stylename "STD")
(if (null (tblobjname "STYLE" stylename) )
(entmake (list '(0 . "STYLE")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbTextStyleTableRecord")
'(70 . 0)
'(42 . 300) ;默认字高
'(3 . "gbenor.shx")
'(4 . "gbcbig.shx")
(cons 2 stylename)
'(40 . 0.0) ;字高
'(41 . 0.7) ;字宽比例
'(50 . 0.0) ;默认旋转角度
)
)
);if
)
(defun make_dimstyle (dimname global-sc measure-sc text-style)
;返回值:生成标注样式,置为当前标注样式。
;dimname 标注样式名称 global-sc全局比例因子 measure-sc测量比例因子 text-style标注文字样式
(if (= (tblsearch "dimstyle" dimname) nil)
(progn
;(setup_STD)
(setvar "DIMDSEP" ".") ;小数分隔符
(setvar "DIMADEC" 1) ;角度小数位数
(setvar "DIMALT" 0) ;选定的换算单位
(setvar "DIMALTD" 1) ;换算单位小数位数
(setvar "DIMALTF" 25.400) ;换算单位比例因子
(setvar "DIMALTRND" 0.000) ;换算单位舍入值
(setvar "DIMALTTD" 3) ;换算公差小数位数
(setvar "DIMALTTZ" 0) ;换算公差消零
(setvar "DIMALTU" 2) ;换算单位
(setvar "DIMALTZ" 1) ;换算单位消零
(setvar "DIMASZ" 2.5) ;箭头大小
(setvar "DIMATFIT" 0) ;箭头和文字调整
(setvar "DIMAUNIT" 0) ;角度单位格式
(setvar "DIMAZIN" 2) ;角度消零
(setvar "DIMBLK" ".") ;箭头块名
(setvar "DIMBLK1" ".") ;第一个箭头块名
(setvar "DIMBLK2" ".") ;第二个箭头块名
(setvar "DIMCEN" 0.090) ;圆心标记大小
(setvar "DIMCLRD" 0) ;尺寸线和引线颜色
(setvar "DIMCLRE" 0) ;尺寸界线颜色
(setvar "DIMCLRT" 0) ;标注文字颜色
(setvar "DIMDEC" 1) ;小数位数
(setvar "DIMDLE" 0.000) ;尺寸线
(setvar "DIMDLI" 0.000) ;尺寸线间距
(setvar "DIMEXE" 1.250) ;尺寸界线在尺寸线上
(setvar "DIMEXO" 1.000) ;尺寸界线原点偏移
(setvar "DIMFRAC" 0) ;分数格式
(setvar "DIMGAP" 1) ;尺寸线和文字的间距
(setvar "DIMJUST" 1) ;尺寸线上的文字对正
(setvar "DIMLDRBLK" ".") ;引线块名
(setvar "DIMLFAC" measure-sc) ;测量单位比例因子
(setvar "DIMLIM" 0) ;生成标注界限
(setvar "DIMLUNIT" 2) ;线性单位格式
(setvar "DIMLWD" -2) ;尺寸线和引线线宽
(setvar "DIMLWE" -2) ;尺寸界线线宽
(setvar "DIMRND" 0.000) ;舍入值
(setvar "DIMSAH" 1) ;独立的箭头块
(setvar "DIMSCALE" global-sc) ;全局比例因子
(setvar "DIMSD1" 0) ;隐藏第一条尺寸线
(setvar "DIMSD2" 0) ;隐藏第二条尺寸线
(setvar "DIMSE1" 0) ;隐藏第一条尺寸界线
(setvar "DIMSE2" 0) ;隐藏第二条尺寸界线
(setvar "DIMSOXD" 0) ;隐藏外侧尺寸线
(setvar "DIMTAD" 1) ;文字位于尺寸线上方
(setvar "DIMTDEC" 2) ;公差小数位数
(setvar "DIMTFAC" 0.7) ;公差文字高度比例因子
(setvar "DIMTIH" 0) ;尺寸界线内侧的文字水平放置
(setvar "DIMTIX" 1) ;将文字放置于尺寸界线内侧
(setvar "DIMTM" 0.000) ;下偏差
(setvar "DIMTMOVE" 0) ;文字移动
(setvar "DIMTOFL" 1) ;强制在尺寸界线内侧画尺寸线
(setvar "DIMTOH" 0) ;外侧文字水平放置
(setvar "DIMTOL" 0) ;公差标注
(setvar "DIMTOLJ" 1) ;公差垂直对齐
(setvar "DIMTP" 0.000) ;上偏差
(setvar "DIMTSZ" 0.000) ;标记大小
(setvar "DIMTVP" 0.000) ;文字垂直位置
(setvar "DIMTXSTY" text-style) ;文字样式
(setvar "DIMTXT" 3.5) ;文字高度
(setvar "DIMTZIN" 0) ;公差消零
(setvar "DIMUPT" 0) ;用户定位的文字
(setvar "DIMZIN" 8) ;消零
(setvar "DIMTAD" 1) ;标注文字在尺寸线上方
(setvar "DIMJUST" 0) ;标注文字在尺寸线上方
(command "dimstyle" "s" dimname)
(princ (strcat "\n当前标准样式为" dimname))
);progn
(progn
(command "dimstyle" "r" dimname)
(princ (strcat "\n当前标准样式为" dimname))
)
);if
);defun
;全局变量 hnu:scale
(if (null hnu:dimscale)
(setq hnu:dimscale 1)
);if
(if (null hnu:dimlfac)
(setq hnu:dimlfac 1)
);if
(make_textstyle "STD")
(if (/= hnu:dimlfac 1)
(setq dimname (strcat "STD_" (itoa hnu:dimscale) "(x" (itoa hnu:dimlfac) ")" ));设置大样标注样式名称
(setq dimname (strcat "STD_" (itoa hnu:dimscale)));设置一般图标注样式名称
);修正标注样式名称
(make_dimstyle dimname hnu:dimscale (/ 1.0 hnu:dimlfac) "STD" ) ;1.0很重要。两者都是整数,则结果取整了。
;(make_dimstyle "STD_100" 100 1 "STD")
(defun C:scalesetup ( / dimname temp-s temp-fac)
;返回值:标注比例设置,同时修改(无则生成)当前标注样式。
;Designed by 程浩 2014年2月20日
(princ "比例设置,为1:150时,输入150;1:100时,输入100")
(princ (strcat "\n当前比例 " (itoa hnu:dimscale)))
(initget 6)
(setq temp-s (getint (strcat "\n新比例<" (itoa hnu:dimscale) ">")))
(initget 6)
(setq temp-fac (getint "\n当前比例下,输入测量值为标注替代值的倍数<1>"))
(if temp-fac
(setq hnu:dimlfac temp-fac)
(setq hnu:dimlfac 1)
);if 输入处理
(if temp-s ;处理默认,nil则不进行设置,是不行的。
(progn
(setq hnu:dimscale temp-s)
(princ (strcat "\n当前比例设置为1:" (itoa hnu:dimscale)))
)
);if 输入处理
(if (/= hnu:dimlfac 1)
(setq dimname (strcat "STD_" (itoa hnu:dimscale) "(x" (itoa hnu:dimlfac) ")" ));设置大样标注样式名称
(setq dimname (strcat "STD_" (itoa hnu:dimscale)));设置一般图标注样式名称
);修正标注样式名称
(setq text-style "STD")
(make_textstyle text-style)
(make_dimstyle dimname hnu:dimscale (/ 1.0 hnu:dimlfac) text-style) ;1.0很重要。两者都是整数,则结果取整了。
;更改比例,同时设置标注样式。
(princ)
)
(defun C:STD()
(C:scalesetup)
)
(defun C:dea( / pt1 pt2 self-ang a d pt3)
;DE Advanced标注标准化命令
;支持循环
(setq pt1 (getpoint "\n第一点<exit>"))
(setq pt2 (getpoint pt1 "\n第二点"))
(setq self-ang (angle pt1 pt2))
(setq a (* pi 0.5))
(if (or (< (car pt1) (car pt2))
(and (= (car pt1) (car pt2))(< (cadr pt1) (cadr pt2)))
)
(setq d (* 6 hnu:dimscale ))
);if
(if (or (> (car pt1) (car pt2))
(and (= (car pt1) (car pt2))(> (cadr pt1) (cadr pt2)))
)
(setq d (* 8 hnu:dimscale ))
);if
(setq pt3 (polar pt2 (+ self-ang a) d))
;(setq oldosmode (getvar "osmode"))
;(setvar "osmode" 0)
(command "DIMALIGNED" "non" pt1 "non" pt2 "non" pt3)
; (setvar "osmode" oldosmode)
(while (setq pt1 pt2
pt2 (getpoint "\n下一点<exit>"))
(command "DIMALIGNED" "non" pt1 "non" pt2 "non" pt3)
);while 支持连续标注
(princ)
)
(princ "\nDEA DEAdvanced标注命令加载成功 \nDesigned by 程浩 2014年2月20日")
(princ "\n顺时针标注在上,逆时针标注在下,scalesetup设置比例,快捷键STD,默认比例1:100")
(princ)
|
|