图形旋转,坐标不变,有没有高手可以解决?
各位高手,小弟有个问题,好久了,一直没有解决,万能的明经有没有办法啊,我是搞土木桥梁的,比如说一个正交直线桥,在CAD里面画出桩位图,画出来的路线图是斜的,有没有办法把图纸旋转正交,沿正Y方向,而且各个点的坐标不变!就象下面图示的这样?可以桥线为 Y 轴建一 ucs,plan 命令将视图配合到当前 ucs,将图框和里面的些文字需要的话旋转到 0 °,然后在 ucs 的 wcs 选项返回原来的坐标系统。需要的话,可以在刚才的 ucs 里命名保存下,以后可以直接再回到这个 ucs 状态以对图面进行操作,比如添加文字说明之类;需要重新生成坐标列表的话,再返回 wcs;如果坐标列表程序是自己的话,修改下以 wcs 而非 ucs 生成坐标,也就无须返回 wcs 了。
(defun C:Qq() (command "ucsfollow" "0" "UCS" "OB") (PRINC))
;局部坐标系,不旋转模型空间
(defun C:Q1() (command "ucsfollow" "1" "UCS" "OB") (PRINC))
;局部坐标系,旋转模型空间
(DEFUN C:Qw () (COMMAND "ucsfollow" "0" "UCS" "W") (PRINC))
;世界坐标系
(DEFUN C:Q3 () (COMMAND "ucsfollow" "1" "UCS" "W") (PRINC))
;世界坐标系,旋转模型空间 (defun ug() ;获取ucs角度
( setq ug1(getvar"ucsxdir" ))
( setq x1 (car ug1))
( setq y1 ( car (cdr ug1)))
( setq ug2 (/ y1 x1))
( setq ug3 (atan ug2))
)
(defun c:fa (/ ent1 pt_START pt_END)
(ug)
(setq ent1 (entsel "\n请选择对象:"))
(cond
((= ENT1 NIL) (CHSNAP))
(
(= (cdr (assoc 0 (entget (car ent1)))) "LWPOLYLINE")
(CHSNAP)
)
(
(=
(cdr (assoc 0 (entget (car ent1))))
"LINE"
)
(progn
(setq pt_START (cdr (assoc 10 (entget (car ent1)))))
(setq pt_END (cdr (assoc 11 (entget (car ent1)))))
(setvar "snapang" (- (angle pt_START pt_END) ug3 ))
)
)
)
(setvar "orthomode" 1)
(princ)
)
(DEFUN
CHSNAP
(/ PT1 PT2)
(setq pt1 (getpoint "\n请选择第一点:"))
(setq pt2 (getpoint "\n请选择第二点:"))
(setvar "snapang" (angle pt1 pt2))
)
(defun c:af()
(setvar "snapang"0)
)
;这个主要是通过修改snapang这个变量,来旋光标方向,还需完善,我上网下载的。 看是不是你想要的
vip-happy 发表于 2012-11-15 20:02 static/image/common/back.gif
看是不是你想要的
你没发现你的每个桩基的坐标都变化了吗? dunkel 发表于 2012-11-15 08:48 static/image/common/back.gif
就象下面图示的这样?可以桥线为 Y 轴建一 ucs,plan 命令将视图配合到当前 ucs,将图框和里面的些文字需要 ...
每个点的坐标变化了吗? 坐标系统不变或者回复了原来的,各点的坐标当然不会发生变化,又不是对实体进行了移动或旋转。 楼主可以在布局里旋转处理! 本帖最后由 ll_j 于 2012-11-19 16:41 编辑
看看我这段程序能不能用,这是我以前一个程序的一部分,刚才调整了一下。
(defun hh_()
(princ "\n字高 <")
(princ h_)
(setq h__ (getdist pt1 ">: "))
(if (/= h__ nil)
(progn
(setq h_ h__)
(setvar "textsize" h_)
)
)
(setq pt2 nil)
)
(defun scc_()
(princ "\n坐标比例 <")
(princ sca_)
(setq sca__ (getreal ">: "))
(if (/= sca__ nil) (setq sca_ sca__))
(setq pt2 nil)
)
(defun mktext(:str :pt10 / :sty);写文字
(setq :pt10(trans :pt10 1 0))
(entmake
(list
'(0 . "TEXT")
(cons 1 :str)
(cons 10 :pt10)
(cons 11 :pt10)
(cons 7 (setq :sty(getvar "textstyle")))
(cons 40 h_)
(cons 41 (cdr (assoc 41 (tblsearch "style" :sty))))
(cons 50 (angle (trans '(0 0 0) 1 0) (trans '(1 0 0) 1 0)))
'(71 . 0)
(cons 72 0)
)
)
)
(defun c:idd(/ px pt0 pt1 pt2 pt3 pt4 lx pt1x pt2y jd h__ sca__) ;;标注点坐标于图形屏幕
(setvar "unitmode" 0)
(setq pt1 (getpoint "\n给出测量点:")
h__ (getvar "textsize")
sca__ 1.0
pt2 nil
)
(if (or (= h_ nil) (/= h_ h__)) (setq h_ h__))
(if (= sca_ nil) (setq sca_ sca__))
(if (= ou_ nil) (setq ou_ "上下"))
(if (= sy_ nil) (setq sy_ "大地坐标"))
(while (= pt2 nil)
(princ (strcat "\n坐标系统:" sy_ "; 输出模式:" ou_ "; 字高:" (rtos h_ 2 2) "; 坐标比例" (rtos sca_ 2 2) "。"))
(initget "Out Coo Height Scale")
(setq pt2 (getpoint pt1 "\n坐标系统C / 输出模式O / 字高H / 坐标比例S / < 给出输出点 >: "))
(cond
((= pt2 "Height") (hh_))
((= pt2 "Scale") (scc_))
((= pt2 "Coo")
(if (= sy_ "大地坐标")
(setq sy_ "用户坐标")
(if (= sy_ "用户坐标")
(setq sy_ "世界坐标")
(setq sy_ "大地坐标")
)
)
(setq pt2 nil)
)
((= pt2 "Out") (if (= ou_ "水平") (setq ou_ "上下") (setq ou_ "水平")) (setq pt2 nil))
(tnil)
)
)
(if (or (= sy_ "大地坐标") (= sy_ "世界坐标")) (setq pt0 (trans pt1 1 0)) (setq pt0 pt1))
(setq pt1x(rtos (* (car pt0) sca_) 2 3)
pt1y(rtos (* (cadr pt0) sca_ ) 2 3)
)
(if (= sy_ "大地坐标") (setq px pt1y pt1y pt1x pt1x px))
(if (= ou_ "上下")
(progn
(setq pt1x (strcat "X=" pt1x)
pt1y (strcat "Y=" pt1y)
lx (+ (max (caadr (textbox (list (cons 1 pt1x)))) (caadr (textbox (list (cons 1 pt1y))))) (* 0.4 h_))
)
(if (>= (car pt2) (car pt1))
(setq pt3 (list (+ (car pt2) (* 0.2 h_)) (+ (cadr pt2) (* 0.4 h_)) 0.0)
pt4 (list (+ (car pt2) (* 0.2 h_)) (- (cadr pt2) (* 1.4 h_)) 0.0)
jd 0.0
)
(setq pt3 (list (+ (car pt2) (* 0.2 h_) (- lx)) (+ (cadr pt2) (* 0.4 h_)) 0.0)
pt4 (list (+ (car pt2) (* 0.2 h_) (- lx)) (- (cadr pt2) (* 1.4 h_)) 0.0)
jd pi
)
)
(mktext pt1x pt3)
(mktext pt1y pt4)
(command "line" pt1 pt2 (polar pt2 jd lx) "")
)
(progn
(setq pt3 pt2)
(mktext pt1x pt3)
(setq pt4 (list (+ (car pt2) (caadr (TEXTBOX (entget(entlast)))) h_) (cadr pt2) 0.0))
(mktext pt1y pt4)
)
)
(princ)
)
页:
[1]