明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2577|回复: 10

[提问] 关于标注样式的全局比例的小数问题(求完善)

[复制链接]
发表于 2015-5-17 16:11 | 显示全部楼层 |阅读模式
本帖最后由 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)


 楼主| 发表于 2015-5-18 18:47 | 显示全部楼层
没人会吗,没什么人来论坛?
 楼主| 发表于 2015-5-19 19:23 | 显示全部楼层
顶起求助版主请进
 楼主| 发表于 2015-5-23 13:03 | 显示全部楼层
求修改,高手请进
发表于 2015-5-23 14:40 | 显示全部楼层
这种工作不需要用LISP来处理,自己设置好 Annotative 的 Dimstyle 就可以了。
发表于 2015-5-23 14:44 | 显示全部楼层
是全局比例变量吗
 楼主| 发表于 2015-5-23 19:54 | 显示全部楼层
这个好处是能用命令快速切换各种比例样式的标注,比那什么样板好
 楼主| 发表于 2019-3-20 16:56 | 显示全部楼层
e2002 发表于 2015-5-23 14:40
这种工作不需要用LISP来处理,自己设置好 Annotative 的 Dimstyle 就可以了。

不懂,求指导
 楼主| 发表于 2019-3-20 16:57 | 显示全部楼层
有没有大佬帮改下,能输入比如1:2.5这种比例的
发表于 2019-3-20 20:20 | 显示全部楼层

楼主将近4年以后才回来看这个问题...

Annotative(注释性),这个已经在大约10年前AutoCAD中加入的强大功能,至今还有这么多用户闻所未闻,感觉Adsk的人需要思考一下...

另外,希望用户遇到问题,先看帮助文档,再上网搜索,如此之后还没有找到答案,再到这里提问。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 17:43 , Processed in 1.498692 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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