本帖最后由 林霄云 于 2014-1-10 16:10 编辑
文字反转,扩展对外部参照支持
原版本详见基于中点的文字反转v2源代码解析及测试 (支持块内文字 UCS)http://bbs.mjtd.com/forum.php?mo ... 923&fromuid=7303580
在一般情况下是还行得通,但是由于在本质上,未考虑块及外部参照的基点、比例、角度,故v2版本有着天生的缺陷。
在解决这个问题的思路是获取块相应参数,进行转换。- (setq x-scale (cdr (assoc 41 ent))
- y-scale (cdr (assoc 42 ent))
- z-scale (cdr (assoc 43 ent))
- pt-blk (cdr (assoc 10 ent))
- ang-blk(cdr (assoc 50 ent)))
同时,对点列表进行转换,定义转换函数 transform,输入各参数,和需要转换的点列表,返回转换后的点列表。- (defun transform(x-sc y-sc z-sc pt0 ang pt-list / pt-l dist self-ang pt-sc) ;转换函数 Designed by 林霄云 ,2014年1月9日
- (setq pt-l '())
- (foreach pt pt-list
- (setq pt-sc (list (* x-sc (car pt)) (* y-sc (cadr pt)) (* x-sc (caddr pt))))
- (setq dist (distance '(0.0 0.0 0.0) pt-sc))
- (setq self-ang (angle '(0.0 0.0 0.0) pt-sc ))
- (setq pt-l (cons (polar pt0 (+ ang self-ang) dist) pt-l))
- )
- (reverse pt-l)
- );defun
对主函数进行修改,加上转换,如下- (setq pt-list (get-textbox entn ))
- (setq pt-list (transform x-scale y-scale z-scale pt-blk ang-blk pt-list));加上转换语句
测试结果详见附图
结论:本文探索出对块与外部参照其内部对象的修改方法,能够准确定位其内部对象。且算法结构经得起推敲。
|