明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2279|回复: 9

[已解答] GRREAD在UCS坐标系下不行,如何解决?

[复制链接]
发表于 2016-2-24 08:27 | 显示全部楼层 |阅读模式
本帖最后由 clh521 于 2016-2-24 08:36 编辑

这个源码,在世界坐标系是可以的,在用户坐标系就不行了,如何解决?
源码如下:
结合grread entdel  entmake  实现动态创建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))
)

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2016-2-24 09:40 | 显示全部楼层
  (CONS 10 (trans pt 1 0))
 楼主| 发表于 2016-2-24 10:46 | 显示全部楼层
ivde 发表于 2016-2-24 09:40
(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))
)
发表于 2016-2-24 16:50 | 显示全部楼层
问题在mktxt函数,它生成的文字在WCS,不在UCS,而grread返回的点为UCS。
如要mktxt函数生成的文字在UCS,需要将各种参数(点、角度等)都转换到UCS决定的OCS(该OCS的z轴与UCS的z轴平行,x和y轴不一定与UCS的xy轴平行,原点在WCS原点),并要用到210组码决定z轴向量。
发表于 2016-2-24 17:33 | 显示全部楼层
建议:
1)不要不停地删除文字又重建文字,只建立一个,然后修改(entmake创建时文字在WCS)
2)建议坐标点转换到世界坐标,直接使用ActiveX修改文字
 楼主| 发表于 2016-2-24 21:47 | 显示全部楼层
kozmosovia 发表于 2016-2-24 17:33
建议:
1)不要不停地删除文字又重建文字,只建立一个,然后修改(entmake创建时文字在WCS)
2)建议坐标 ...

那段源码是在网上搜到的,想依葫芦画瓢用在我的程序上,没想到在UCS坐标系下不行,怎么改?
发表于 2016-2-25 10:44 | 显示全部楼层
(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))
)
 楼主| 发表于 2016-2-25 16:00 | 显示全部楼层
kozmosovia 发表于 2016-2-25 10:44
(DEFUN ddtxt (txt height / N POS RUN VLO)
  (if (entmake (LIST
                 '(0 . "TEXT")

测试了下,程序运行后得不到正确的结果啊
发表于 2016-2-25 16:32 | 显示全部楼层
本帖最后由 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)
           )

  )
)
 楼主| 发表于 2016-2-26 08:20 | 显示全部楼层
liu_kunlun 发表于 2016-2-25 16:32
试一下这个:
(DEFUN        mktxt (txt height pt / vz)
  (setq vz (trans '(0. 0. 1.) 1 0))

早上一上班就试了一下,得到了正确的结果,谢谢,其他好多的entmake在用户坐标系下生成图元的程序都可以参照你这个函数了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 20:35 , Processed in 0.296037 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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