请帮忙用autolisp编写一个已知平面二点对齐UCS的lisp。

已知Autocad 中平面二点坐标。但用ID命令查与当前世界坐标系中UCS中的坐标对不上,请编写一个autolisp程序把UCS对齐到当前二点定义的坐标系中去。程序请写充分些,考虑到各种情况和错误。谢谢。
"已知Autocad 中平面二点坐标"是指图纸上标注的吗?

当然,是图上已经标出来的。但与实际坐标不符。所以才要转UCS。

但是仅有两个点是无法确定唯一的坐标系的,以这两点的连线为轴会有无数个坐标系可以满足! 三点确定一个平面,同样要确定唯一坐标系也是需要三点的!
代码给你,如果第三点不确定,只能保证给定的两点转换后坐标是对的!
(defun c:ducs()
(setq os (getvar "osmode"))
(setq cm (getvar "cmdecho"))
(setvar "osmode" 9)
(setvar "cmdecho" 0)
(command "ucs" "w")
(setq p1 (getpoint "\n请选取第一点P1:"))
(setq p2 (getpoint "\n请选取第二点P2:"))
(setq p3 (getpoint "\n请选取第三点P3:"))
(setvar "osmode" 0)
(initget 1 )
(setq s1 (getpoint "\n请输入第一点P1实际坐标x1,y1,z1:"))
(initget 1 )
(setq s2 (getpoint "\n请输入第二点P2实际坐标x2,y2,z2:"))
(initget 1 )
(setq s3 (getpoint "\n请输入第三点P3实际坐标x3,y3,z3:"))
(setq l1 (distance p1 p2))
(setq l2 (distance s1 s2))
(setq x "Yes")
(if (> (abs (- l1 l2)) 1);误差控制
(progn
(alert "数据误差较大请点{确定}后选择是否继续")
(initget 1 "Yes No")
(setq x (getkword "\n是否继续? (Yes 或 No)"))
)
)
(IF (= "Yes" X)
(progn
(setq ltm (ssadd))
(command "line" "0,0,0" "1,0,0" "")
(ssadd (entlast) ltm)
(command "line" "0,0,0" "0,1,0" "")
(ssadd (entlast) ltm)
(command "align" ltm "" s1 p1 s2 p2 s3 p3)
(setq LINDAT (ssname ltm 0))
(setq LINdate (entget LINDAT))
(setq uc1 (cdr (assoc '10 LINdate)))
(setq uc2 (cdr (assoc '11 LINdate)))
(setq LINDAT (ssname ltm 1))
(setq LINdate (entget LINDAT))
(setq uc3 (cdr (assoc '11 LINdate)))
(command "erase" ltm "")
(command "ucs" "3" uc1 uc2 uc3)
)
)
(setvar "osmode" os)
(setvar "cmdecho" cm)
(princ)
)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-07
你是不是说,缺省的Z轴就是原来的Z轴啊!?不过是要旋转一下UCS而已吧!?

这个属于3维在二维中的借用,学好了三维设计,这个一点都不麻烦。

这个不用这么麻烦的,沿其中一点做XY面的垂线,在动UCS的时候,Z轴点选在这垂线上就中了!还要写程序!?汗!搞麻烦了。
第2个回答  2011-01-08
这不用编程吧,直接 UCS 命令就行了啊
相似回答