找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1306|回复: 29

[求助] 坐标系问题求助

[复制链接]

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2018-3-31 21:00:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
(vl-cmdf "ucs" "e" e)
这句怎么写成LISP呀...写到程序里太慢了..请大师指导哈..谢谢了..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 51个

财富等级: 招财进宝

发表于 2018-3-31 21:46:26 | 显示全部楼层
设置对象的UCS,要通过实体得到 原点、X轴向量、Y轴向量,然后就可以设置UCS了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2018-4-1 00:08:53 | 显示全部楼层
你要实现各种对象的ECS的原点,X轴向量,Y向量的函数

搜狗截图20180401000626.gif 搜狗截图20180401000448.gif 搜狗截图20180401000354.gif 搜狗截图20180401000338.gif 搜狗截图20180401000148.gif 搜狗截图20180401000003.gif
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2018-4-1 01:27:00 | 显示全部楼层
学习一下。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-1 04:58:22 | 显示全部楼层
newer 发表于 2018-4-1 00:08
你要实现各种对象的ECS的原点,X轴向量,Y向量的函数

因为不懂矩阵..所以一直也不会写..因为不能理解透呀..斑竹能帮我写个函数吗..其实就是想写ucs下文字框..找了半天也没看到能用代码呢...用这个命令也就几句话...但太慢了..文字多了速度不能忍受哈..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2018-4-1 05:18:54 来自手机 | 显示全部楼层
自定义对象的ecs难得到吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-1 05:20:27 | 显示全部楼层
xinxirong 发表于 2018-4-1 05:18
自定义对象的ecs难得到吗?

应该不是难..而是我不会呢..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-1 06:34:00 | 显示全部楼层
(defun c:tbox ( / a i ss s1 box)
  (setq ss (ssget '((0 . "text")))
        i -1
        a (rtos (* (getvar "cdate") 1e8))
  )
  (vl-cmdf "ucs" "s" a)
  (while (setq s1 (ssname ss (setq i (1+ i))))
  (vl-cmdf "ucs" "e" s1)
  (setq box (textbox (entget s1)))
  (vl-cmdf "rectang" (car box) (cadr box))
)
(vl-cmdf "ucs" "r" a)
)
用command 就这几行..但效率太低了..还是要麻烦大师帮忙写个效率高的版本..谢谢了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5060个

财富等级: 富甲天下

发表于 2018-4-1 11:39:20 来自手机 | 显示全部楼层
boundingbox 或者自己计算textbox
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-4-1 20:25:19 | 显示全部楼层
q3_2006 发表于 2018-4-1 04:58
因为不懂矩阵..所以一直也不会写..因为不能理解透呀..斑竹能帮我写个函数吗..其实就是想写ucs下文字框.. ...



UCS文本框.gif

纯LISP的,用下面
  1. (defun c:tt ()
  2.   (princ "\n拾取文字<退出>:")
  3.   (if (setq ss (ssget '((0 . "TEXT"))))
  4.     (progn (setq i -1)
  5.            (while (setq e (ssname ss (setq i (1+ i))))
  6.              (setq box (textbox (entget e))
  7.                    p1  (car box)
  8.                    p3  (cadr box)
  9.                    p2  (list (car p3) 0.0 0.0)
  10.                    p4  (list (car p1) (cadr p3) 0.0)
  11.                    box (list p1 p2 p3 p4)
  12.                    obj (vlax-ename->vla-object e)
  13.                    ori (vla-get-insertionpoint obj)
  14.                    ori (xd::vla:variant->value ori)
  15.                    ang (vla-get-rotation obj)
  16.                    vx  (mapcar '- (polar ori ang 1.0) ori)
  17.                    vx  (xd::vec:normalize vx)
  18.                    vy  (xd::vec:perp vx)
  19.                    mat (xd::mat:aligncoordsys (list ori vx vy) 0)
  20.                    box (xd::object:transform box mat)
  21.              )
  22.              (entmake (list '(0 . "LWPOLYLINE")
  23.                             '(100 . "AcDbEntity")
  24.                             '(410 . "Model")
  25.                             '(100 . "AcDbPolyline")
  26.                             '(62 . 2)
  27.                             '(90 . 4)
  28.                             '(70 . 1)
  29.                             (cons 10 (car box))
  30.                             (cons 10 (cadr box))
  31.                             (cons 10 (caddr box))
  32.                             (cons 10 (last box))
  33.                       )
  34.              )
  35.            )
  36.     )
  37.   )
  38.   (princ)
  39. )



用XDRX API的,就简单多了。
  1. (defun c:tt ()
  2.   (princ)
  3.   (if (and (xdrx_initssget "拾取文字<退出>:")
  4.            (setq ss (xdrx_ssget '((0 . "TEXT"))))
  5.       )
  6.     (progn (setq box (xdrx_entity_getproperty ss "textbox")
  7.                  box (apply 'append box)
  8.            )
  9.            (mapcar '(lambda (x)
  10.                       (xdrx_polyline_make x t)
  11.                       (xdrx_setpropertyvalue (entlast) "color" 2)
  12.                     )
  13.                    box
  14.            )
  15.     )
  16.   )
  17.   (princ)
  18. )


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2018-4-1 22:14:48 | 显示全部楼层
q3_2006 发表于 2018-4-1 06:34
(defun c:tbox ( / a i ss s1 box)
  (setq ss (ssget '((0 . "text")))
        i -1

不用把矩阵想的多复杂,记住几件事
1、两个坐标系间点的变换是通过矩阵实现的
2、记住变换矩阵的函数

看下图,对于文字,TEXTBOX得到的两个角点坐标是文字自身坐标系表示的,这个坐标系的原点就是文字的插入点(WCS),X轴方向,就是夹角的文字方向,Y轴就是垂直于X轴的方向。
矩阵变换函数里面的 源坐标系是用 (原点(WCS) X轴向量 Y向量)表示的。X向量是X轴上任一点 - 原点,也就是(mapcar '- p2 p1),然后用单位向量函数变成单位向量。 Y轴用向量的垂向量函数通过X算出。这样文字坐标系就得到了。

看图,现在你要把TEXTBOX得到的文字坐标系的四个角点,变换到WCS下,然后画框

搜狗截图20180401220421.gif

WCS坐标系表示有两种方法

1、原点(0,0,0),X轴(1.0 0.0 0.0),Y轴(0.0 1.0 0.0)
2、用数字0

所以WCS下四个角点坐标就是 四个点分别作用变换矩阵就得到了。

变换矩阵是 (xd::mat:aligncoordsys ((文字的原点) 文字的X轴 文字的Y轴 ) 0)
点变换函数可以用 XD::Object:Transform 也可以用 XD::Point:Transfrom
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-2 05:06:10 | 显示全部楼层
marting 发表于 2018-4-1 22:14
不用把矩阵想的多复杂,记住几件事
1、两个坐标系间点的变换是通过矩阵实现的
2、记住变换矩阵的函数

这么晚还回复帖子,太感谢了,矩阵太难理解了,平移还勉强能明白但加上旋转缩放就完全搞不懂了...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-2 05:31:17 | 显示全部楼层
marting 发表于 2018-4-1 20:25
纯LISP的,用下面

xd::vec:normalize
xd::vec:perp
这两个函数没找到
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

发表于 2018-4-2 08:26:11 | 显示全部楼层
q3_2006 发表于 2018-4-2 05:31
xd::vec:normalize
xd::vec:perp
这两个函数没找到

加载 通用LISP函数库就有了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

 楼主| 发表于 2018-4-2 08:56:59 | 显示全部楼层
Lisphk 发表于 2018-4-2 08:26
加载 通用LISP函数库就有了。

这我当然知道呀....但看不到代码..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-3-28 23:45 , Processed in 0.284474 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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