GRREAD在UCS坐标系下不行,如何解决?
本帖最后由 clh521 于 2016-2-24 08:36 编辑这个源码,在世界坐标系是可以的,在用户坐标系就不行了,如何解决?
源码如下:
结合grread entdelentmake实现动态创建TEXT的代码如下:
(DEFUN ddtxt (txt height / el run n)
(DEFUN mktxt (txt height pt)
(entmake (LIST
'(0 . "TEXT")
(CONS 10 pt)
(CONS 40 height)
(CONS 1 txt)
(CONS 7 (GETVAR "TEXTSTYLE"))
)
)
)
(SETQ run T)
(WHILE (AND run (SETQ n (GRREAD T 1)))
(COND ((= 5 (CAR n));;;移动鼠标
(AND el (ENTDEL el))
(mktxt txt height (CADR n))
(SETQ el (ENTLAST))
)
((= 3 (CAR n));;;点击左键
(AND el (ENTDEL el))
(mktxt txt height (CADR n))
(SETQ run nil)
)
)
)
)
(defun c:tt()
(ddtxt (getstring "\n文字内容:") (/ (getvar "viewsize")10))
)
(CONS 10 (trans pt 1 0)) ivde 发表于 2016-2-24 09:40 static/image/common/back.gif
(CONS 10 (trans pt 1 0))
还是不行呢?
(DEFUN ddtxt (txt height / el run n)
(DEFUN mktxt (txt height pt)
(entmake (LIST
'(0 . "TEXT")
(CONS 10 (trans pt 1 0));;这里已经改了,还是不行
(CONS 40 height)
(CONS 1 txt)
(CONS 7 (GETVAR "TEXTSTYLE"))
)
)
)
(SETQ run T)
(WHILE (AND run (SETQ n (GRREAD T 1)))
(COND ((= 5 (CAR n));;;移动鼠标
(AND el (ENTDEL el))
(mktxt txt height (CADR n))
(SETQ el (ENTLAST))
)
((= 3 (CAR n));;;点击左键
(AND el (ENTDEL el))
(mktxt txt height (CADR n))
(SETQ run nil)
)
)
)
)
(defun c:t5()
(ddtxt (getstring "\n文字内容:") (/ (getvar "viewsize")10))
) 问题在mktxt函数,它生成的文字在WCS,不在UCS,而grread返回的点为UCS。
如要mktxt函数生成的文字在UCS,需要将各种参数(点、角度等)都转换到UCS决定的OCS(该OCS的z轴与UCS的z轴平行,x和y轴不一定与UCS的xy轴平行,原点在WCS原点),并要用到210组码决定z轴向量。 建议:
1)不要不停地删除文字又重建文字,只建立一个,然后修改(entmake创建时文字在WCS)
2)建议坐标点转换到世界坐标,直接使用ActiveX修改文字 kozmosovia 发表于 2016-2-24 17:33 static/image/common/back.gif
建议:
1)不要不停地删除文字又重建文字,只建立一个,然后修改(entmake创建时文字在WCS)
2)建议坐标 ...
那段源码是在网上搜到的,想依葫芦画瓢用在我的程序上,没想到在UCS坐标系下不行,怎么改? (DEFUN ddtxt (txt height / N POS RUN VLO)
(if (entmake (LIST
'(0 . "TEXT")
(list 10 0. 0. 0.)
(CONS 40 height)
(CONS 1 txt)
(CONS 7 (GETVAR "TEXTSTYLE"))
)
)
(setq vlo (vlax-ename->vla-object (entlast)))
)
(SETQ run T)
(WHILE (AND vlo run (SETQ n (GRREAD T 1)))
(if (member (car n) '(5 3))
(setq pos (vlax-3d-point (trans (cadr n) 1 0))
pos (vla-put-insertionpoint vlo pos)
run (= (car n) 5)
)
)
)
)
(defun c:tt ()
(ddtxt (getstring "\n文字内容:") (/ (getvar "viewsize") 10))
) kozmosovia 发表于 2016-2-25 10:44 static/image/common/back.gif
(DEFUN ddtxt (txt height / N POS RUN VLO)
(if (entmake (LIST
'(0 . "TEXT")
测试了下,程序运行后得不到正确的结果啊 本帖最后由 liu_kunlun 于 2016-2-25 16:43 编辑
试一下这个:
(DEFUN mktxt (txt height pt / vz)
(setq vz (trans '(0. 0. 1.) 1 0))
(entmake (LIST
'(0 . "TEXT")
(CONS 10 (trans pt 1 vz))
(CONS 40 height)
(CONS 1 txt)
(CONS 7 (GETVAR "TEXTSTYLE"))
(cons 50 (angle '(0. 0. 0.) (trans '(1. 0. 0.) 1 vz t)))
(cons 210 vz)
)
)
) liu_kunlun 发表于 2016-2-25 16:32 static/image/common/back.gif
试一下这个:
(DEFUN mktxt (txt height pt / vz)
(setq vz (trans '(0. 0. 1.) 1 0))
早上一上班就试了一下,得到了正确的结果,谢谢,其他好多的entmake在用户坐标系下生成图元的程序都可以参照你这个函数了
页:
[1]