蔡__洛 发表于 2012-11-23 16:56:33

自己写的坐标变换函数!不需要设置坐标系就可以做变换!

;;;■=========点的坐标从世界坐标变换至对象坐标=========
;;;参数(<表>点 <图元名>对象)=======
;;;-----返回值:<表>新点坐标
(defun trans-ucs-w->obj (in_pt in_obj / pt m_ret xu yu zu angu xp yp zp x1 y1 z1 x y z ent_obj )
(if (and in_pt in_obj )
    (progn
      (setq ent_obj (entget in_obj))
      (setq pt (cdr(assoc '10 ent_obj)))
      (setq xu(car pt))      
    (setq yu(cadr pt))      
    (setq zu (caddr pt))
   (setq angu(cdr(assoc '50 ent_obj)))
   (setq xp (car in_pt))      
    (setq yp (cadr in_pt))   
    (setq zp (caddr in_pt))      
    (setq x1 (- xp xu))   
    (setq y1 (- yp yu))      
    (setq z1 (- zp zu))      
    (setq x (+ (* x1 (cos angu)) (* y1 (sin angu))))      
    (setq y (- (* y1 (cos angu)) (* x1 (sin angu))))      
    (setq z z1)      
    (setq m_ret (list x y z))      
))
m_ret
)
;;;■=========点的坐标从对象坐标变换至世界坐标=========
;;;参数(<表>点 <图元名>对象)=======
;;;-----返回值:<表>新点坐标
(defun trans-ucs-obj->w (in_pt in_obj / pt m_ret xu yu zu angu xp yp zp x1 y1 z1 x y z )
(if (and in_pt in_obj )
    (progn
      (setq pt (trans-ucs-w->obj '(0.0 0.0 0.0) in_obj))
      (setq xu(car pt))      
    (setq yu(cadr pt))      
    (setq zu (caddr pt))
   (setq angu(* -1.0 (cdr(assoc '50 (entget in_obj)))))
   (setq xp (car in_pt))      
    (setq yp (cadr in_pt))   
    (setq zp (caddr in_pt))      
    (setq x1 (- xp xu))   
    (setq y1 (- yp yu))      
    (setq z1 (- zp zu))      
    (setq x (+ (* x1 (cos angu)) (* y1 (sin angu))))      
    (setq y (- (* y1 (cos angu)) (* x1 (sin angu))))      
    (setq z z1)      
    (setq m_ret (list x y z))      
))
m_ret
)来明经混了两个月了,得到了很多帮助,自己也写了不少代码!今天发上来一个自己重写的坐标变换函数,欢迎大家使用,指正! 个人感觉比较方便,不需要设置新坐标系就可以执行变换,只要传入对象名,既可以自动变换并输出对象坐标系下的新坐标,同时不影响当前ucs。trans-ucs-w->obj 与trans-ucs-obj->w 两个函数互为逆向操作,前者变换至对象坐标,后者由对象坐标变回到世界坐标。今后还会多多发源码的!



http://bbs.mjtd.com/xwb/images/bgimg/icon_logo.png 该贴已经同步到 蔡__洛的微博

树櫴希德 发表于 2024-6-28 08:24:29

太强大了 顶顶收藏

zhouren_cmi 发表于 2012-11-23 17:01:49

谢谢高手分享源码。

USER2128 发表于 2012-11-23 18:09:16

想给楼主封个赏,但找不到按钮,也许权限不够。在此只能精神上支持你了

chenlight 发表于 2012-11-23 19:24:06

绝对要顶,正寻找这方面的代码,不期就到了!不懂的地方要向你请教了!

vlisp2012 发表于 2012-11-23 21:22:00

向高手学习了!!!

夏雨雪 发表于 2012-11-24 08:42:56

还是不太明白怎么用

kwok 发表于 2012-11-24 10:42:48

源代码要支持

wuqiu1986 发表于 2012-11-30 17:07:10

支持开源的

Q1241274614 发表于 2012-11-30 18:42:19

本帖最后由 Q1241274614 于 2012-12-1 21:42 编辑

首先感谢楼主的源码,楼主能不能看看这种坐标系怎么转换,谢谢!

已知:1.空间3点 A B C,D为平面ABC内点。
         2.A为UCS系原点,D为UCS系内坐标点(list AEED)
求:D点WCS坐标。

HGHG011 发表于 2013-1-23 02:51:29

哥们怎么操作这个
我载入程序后 怎么搞?
页: [1] 2
查看完整版本: 自己写的坐标变换函数!不需要设置坐标系就可以做变换!