- 积分
- 1643
- 明经币
- 个
- 注册时间
- 2013-6-20
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
;;原创: eachy
1 首先要简单了解下线形的定义(转贴自联机帮助)
例如,名为 DASHDOT 的线型定义为
*DASHDOT,Dash dot __ . __ . __ . __ . __ . __ . __ . __
A,.5,-.25,0,-.25
这表示一种重复图案,以 0.5 个图形单位长度的划线开头,然后是 0.25 个图形单位
长度的空移、一个点和另一个 0.25 个图形单位长度的空移。 该图案延续至直线的全
长,并以 0.5 个图形单位长度的划线结束。 该线型如下所示。
__ . __ . __ . __ . __ . __ . __ . __
2 再看看联机帮助中的 DXF 组码中TABLE部分的LTYPE
40 图案总长度
49 虚线、点或空间长度(每个元素一个条目)
3 实际测试
以 HIDDEN 为例,Load Hidden 线形,然后
_$ (tblsearch "ltype" "hidden")
((0 . "LTYPE") (2 . "HIDDEN") (70 . 0) (3 . "Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ _")
(72 . 65) (73 . 2) (40 . 9.525) (49 . 6.35) (49 . -3.175))
_$
再看Hidden定义
*HIDDEN,Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ __
A, 6.35, -3.175
然后看看当前的 Ltscale
_$ (getvar "ltscale")
1.0
从中可以看到 Code 40 = Code 49 + (abs Code 49),也就是一个线形周期的总长度,
试着改变 Ltscale 为 3
_$ (setvar "ltscale" 3)
3
_$ (tblsearch "ltype" "hidden")
((0 . "LTYPE") (2 . "HIDDEN") (70 . 0) (3 . "Hidden __ __ __ __ __ __ __ __ __ __ __ __ __ _")
(72 . 65) (73 . 2) (40 . 9.525) (49 . 6.35) (49 . -3.175))
_$
可以看到图面的线形放大了,而 Table 中的 Hidden 是不变的,当然 *.lin 中的定义也没变
用Dist粗略测量一下这个图上实际周期长度和Ltscale的关系,可以得出
图上一个周期的长度 = Code 40 x Ltscale
这就可以用来方便控制线形比例了,我们不必关心Ltscale是多少,只要确定这个实际周期长度
就可以反算出 Ltscale了
根据上面的测试整理的代码,这就是某些专业软件中指定线形周期功能的 Lisp 实现,很简单的
(defun c:tt (/ e d el lay lt l)
(if (and (setq e (car (entsel "\n选择线形实体: ")));_不要选Continuous,没有意义
(setq d (getdist "\n指定周期长度: "));_根据出图的大小确定或输入
)
(progn
(setq el (entget e)
lay (assoc 8 el)
)
(if (not (setq lt (cdr (assoc 6 el))));_ 如果指定了线形
(setq lt (cdr (assoc 6 (tblsearch "layer" lay))));_ 线形是随层的
)
(setq l (cdr (assoc 40 (tblsearch "ltype" lt))));_
(command ".ltscale" (/ d l));_计算需要的合适比例
)
)
(princ)
)
|
|