标准化标注源码解析与测试(支持UCS,智能标注样式)
本帖最后由 林霄云 于 2014-5-7 22:04 编辑标准化标注源码解析与测试——支持UCS,智能标注样式
自写完箍筋拉筋符号后——拉筋箍筋符号源码解析与测试(支持UCS、形式切换、智能比例、统一命令)
http://bbs.mjtd.com/forum.php?mo ... 193&fromuid=7303580内心无比空虚,我在结构专业标准化制图中越走越深,对于标注的标准化,我有了点想法。标注样式智能化,当然很多实现的思路,我想我的思路或许值得探讨。
调用函数DEA(defun C:dea()
;DE Advanced标注标准化命令
;Designed by 林霄云
;需要支持循环
(while (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))
(command "DIMALIGNED" pt1 pt2 pt3)
(princ)
);while
)
(princ "\nDEA DEAdvanced标注命令加载成功 \nDesigned by 林霄云 2014年2月20日")
(princ "\n顺时针标注在上,逆时针标注在下,scalesetup设置比例,快捷键scset,默认比例1:100")
(princ)主函数调用了一全局比例作为参数,因此,需要一个接口设置此全局比例。并且,对每次调用比例设置时,自动更改当前的标柱样式以匹配。(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)
(setqtemp-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 输入处理
(iftemp-s;处理默认,nil则不进行设置,是不行的。
(progn
(setq hnu:dimscale temp-s)
(princ (strcat "\n当前比例设置为1:" (itoa hnu:dimscale)))
)
);if 输入处理
(if (/= hnu:dimlfac 1)
(setq dimname (strcat "G_DS_" (itoa hnu:dimscale) "(x" (itoa hnu:dimlfac) ")" ));设置大样标注样式名称
(setq dimname (strcat "G_DS_" (itoa hnu:dimscale)));设置一般图标注样式名称
);修正标注样式名称
(setq text-style "G_text");大家得修改这个,不提供接口,本人有函数生成。make_textstyle
(make_dimstyle dimname hnu:dimscale (/ 1.0 hnu:dimlfac) text-style) ;1.0很重要。两者都是整数,则结果取整了。
;更改比例,同时设置标注样式。
(princ)
)必须得注意到,全局比例和测量比例因子很重要。其皆作为标注样式名称的一部分,作为生成标注样式的参数。由为重要的是,作为全局变量保存。
自然需要生成标注样式代码make_dimstyle(defun make_dimstyle (dimname global-sc measure-sc text-style)
;返回值:生成标注样式,置为当前标注样式。
;Designed by 林霄云 2014年2月20日
;dimname 标注样式名称 global-sc全局比例因子 measure-sc测量比例因子 text-style标注文字样式
(if (= (tblsearch "dimstyle" dimname) nil)
(progn
(……);一系列的变量设置
(command "dimstyle" "s" dimname)
(princ (strcat "\n当前标准样式为" dimname))
);progn
(progn
(command "dimstyle" "r" dimname)
(princ (strcat "\n当前标准样式为" dimname))
)
);if
);defun结果:智能的设置标注样式,结合智能设置图层,像标准化更进一步。另详附图
还不错,希望楼主多研发些好用的插件 补充一下,使用command line时,需要取消捕捉,修改代码如下
原代码(command "DIMALIGNED" pt1 pt2 pt3)修改为(setq oldosmode (getvar "osmode"))
(setvar "osmode" 0)
(command "DIMALIGNED" pt1 pt2 pt3)
(setvar "osmode" oldosmode)及时设置,这样是可以避免捕捉丢失。 可惜没币了,下载不了 版主可否送我一个币呀!! dear sir,
add dialog box for scale its convenient sachindkini 发表于 2014-2-21 20:33 static/image/common/back.gif
dear sir,
add dialog box for scale its convenient
Thanks for your interest.and I am sorry I can't agree with you.reasons as follows,I do like the version posted .it is simple,left-hand hotkey operations,no mouse location,less harm to eyes .and most of all,it can be downloaded and modified bygifted guyswho ,I guess ,are paid more! 林大师,乐于助人,赞一个!能帮我解决这个问题吗?http://bbs.mjtd.com/thread-109252-1-1.html 很不错!!!! 有错误,用不了 myjping 发表于 2014-2-25 10:03 static/image/common/back.gif
有错误,用不了
不会有错误的。有段代码还是贴出来吧!自行修改。必须确保文字样式的存在,否则标注样式不能生成。(至于补充在哪里,我就不多说了)(defun make_textstyle( stylename )
;stylename 字体样式名称
;(setq stylename "G_hy_text")
(if (null (tblobjname "STYLE" stylename) )
(entmake (list '(0 . "STYLE")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbTextStyleTableRecord")
'(70 . 0)
'(42 . 300) ;默认字高
'(3 . "hysz.shx") ;此处自行修改
'(4 . "hyfs.shx") ;此处自行修改
(cons 2 stylename)
'(40 . 0.0) ;字高
'(41 . 0.7) ;字宽比例
'(50 . 0.0) ;默认旋转角度
)
)
);if
)