用第3种方法,其实很简单也容易理解。第5种方法理解稍复杂点,但过程却更简单。
先把事情做出来,做多了自己慢慢领会。
条件:已知CAD中A、B两点,所标注的坐标点为A'(a,b),B‘(c,d)
要求:使A、B两点的用户坐标变为(a,b)、(c,d)
步骤:
1,画出直线A'B'。镜像A'B'。指定镜像线的第一点:捕捉A'点;指定镜像线的第二点:打开正交,沿X轴方向拉,点左键。设镜像生成的线为A'C。
2,下拉菜单>工具>新建UCS>对象>点取A'C直线靠A'的一端。做成一个新的坐标系统,
这样坐标系统做好了,但这时A‘点成了新的坐标原点,这不是我们要的坐标原点。
3,画直线从A'(0,0)到坐标(a,b),设直线为A‘D。移动或复制直线A'D,起点捕捉D点,终点捕捉A点。设这新的直线为AE。
4,下拉菜单>工具>新建UCS>原点,捕捉点取E点。
这样坐标原点OK,好了,可以标坐标点了,要注意坐标取值要用的是“用户坐标”,不是“世界坐标”。四个柱点中心的坐标值都对得上,那就证明做对了。
过程很简单,是不是?
这个很简单啊,先定一个点的坐标,把图该点对上去。如(750,20000),现在CAD上找到这个点(可以用多段线来找),然后把图的B点一到上面去。
再找第二个点,(700,19000),然后通过旋转命令将其对上去,这样图就对号了。
在命令行中输入id,即可查询其他点的坐标了。
注意:一般工程中默认北为X方向,东为Y方向,和CAD是相反的,所以必须先输Y坐标,再输入X坐标。
我们现在放样就是这样得出坐标的。从设计院得到的图只标有控制点坐标,但是没対正,其他点坐标没法算。拿到图后自己対正,用鼠标一点,坐标就出来了,很方便。
不行的话你把图发过来我帮你対正坐标。
代码给你,是三维坐标对齐的,二维的也能用用记事本存为DUCS.LSP加载运行即可!
(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)
)
首先说明,俺不使用CAD已好多年!现在用的是CATIA,不过想来大同小异!
我的想法是,在CAD中,或是其它绘图软件中,原则上不使用数学计算法,而一定要使用几何法!因为数学法不可避免地存在着误差!
如果让我来做,我想把你手里的图完全在原坐标系中再画一遍!(虽然说是重新画一遍,但不会有多复杂),方法是这样的:
1.在一个新坐标系中,分别按照A、B两点的坐标,画出AB线段;
2.把原图所有元素复制过来,经过旋转和移动(当然是参照AB线段了!),还原图形在原始坐标中的位置;
3.剩下的工作应该很简单了吧!
不好意思,回头看看,和你的第三种方法是一样的!
不管怎么说,个人倾向于这一种方法;
这个很简单,用一个命令就行了,我经常这样做,但我不告诉你