ke55555 发表于 2012-11-14 16:38:12

图形旋转,坐标不变,有没有高手可以解决?

各位高手,小弟有个问题,好久了,一直没有解决,万能的明经有没有办法啊,我是搞土木桥梁的,比如说一个正交直线桥,在CAD里面画出桩位图,画出来的路线图是斜的,有没有办法把图纸旋转正交,沿正Y方向,而且各个点的坐标不变!

dunkel 发表于 2012-11-15 08:48:11

就象下面图示的这样?可以桥线为 Y 轴建一 ucs,plan 命令将视图配合到当前 ucs,将图框和里面的些文字需要的话旋转到 0 °,然后在 ucs 的 wcs 选项返回原来的坐标系统。需要的话,可以在刚才的 ucs 里命名保存下,以后可以直接再回到这个 ucs 状态以对图面进行操作,比如添加文字说明之类;需要重新生成坐标列表的话,再返回 wcs;如果坐标列表程序是自己的话,修改下以 wcs 而非 ucs 生成坐标,也就无须返回 wcs 了。

fcut2004 发表于 2012-11-15 08:55:38

(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))
;世界坐标系,旋转模型空间

fcut2004 发表于 2012-11-15 08:58:58

(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:16

看是不是你想要的



ke55555 发表于 2012-11-15 20:37:43

vip-happy 发表于 2012-11-15 20:02 static/image/common/back.gif
看是不是你想要的

你没发现你的每个桩基的坐标都变化了吗?

ke55555 发表于 2012-11-15 20:38:15

dunkel 发表于 2012-11-15 08:48 static/image/common/back.gif
就象下面图示的这样?可以桥线为 Y 轴建一 ucs,plan 命令将视图配合到当前 ucs,将图框和里面的些文字需要 ...

每个点的坐标变化了吗?

dunkel 发表于 2012-11-16 08:56:25

坐标系统不变或者回复了原来的,各点的坐标当然不会发生变化,又不是对实体进行了移动或旋转。

江湖远人 发表于 2012-11-17 12:08:06

楼主可以在布局里旋转处理!

ll_j 发表于 2012-11-19 16:40:22

本帖最后由 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]
查看完整版本: 图形旋转,坐标不变,有没有高手可以解决?