275437962 发表于 2013-12-22 16:10:34

autolisp如何实现符号旋转

本帖最后由 275437962 于 2013-12-26 20:12 编辑

将CAD中,某层中的所有块的角度都旋转180度!不管原来它们角度是否相同!

llsheng_73 发表于 2013-12-22 22:52:28

本帖最后由 llsheng_73 于 2013-12-23 12:30 编辑

(if(setq m -1 ss(ssget"X"'((0 . "INSERT")(8 . "图层名"))))
(repeat(sslength ss)
    (entmod(setq m(1+ m)
   e(entget(ssname ss m))
   e(subst'(50 . pi)(assoc 50 e)e)))))

275437962 发表于 2013-12-22 23:25:41

llsheng_73 发表于 2013-12-22 22:52 static/image/common/back.gif
(if(setq m -1 ss(ssget"X"'((0 . "INSERT")(8 . "图层名"))))
(repeat(sslength ss)
    (entmod(setq ...

你好,这段代码怎么执行啊

ZZXXQQ 发表于 2013-12-23 08:00:52

;块变180度 ZZXXQQ 2013.12.23
(defun c:tt ()
(if (setq s1 (entsel "\n单选图块: ")) (progn
(setq en (car s1) ln (assoc 8 (entget en)))
(if (and (princ "\n选择图块: ") (setq ss (ssget (list '(0 . "INSERT") ln)))) (progn
   (setq i -1)
   (repeat (sslength ss)
    (setq ent (entget(ssname ss (setq i (1+ i)))))
    (entmod (subst (cons 50 180) (assoc 50 ent) ent))
   )
))
))
(princ)
)

275437962 发表于 2013-12-23 11:35:33

ZZXXQQ 发表于 2013-12-23 08:00 static/image/common/back.gif


大侠,不是这样子的,也是我没有说清楚,我的意思是,所有块都各自旋转180度,旋转后,它们的方向不应都一样,如原来角度是380的,旋转后变成200;原来角度是60的,旋转后变成240;原来角度是280的,旋转后变成100,诸如此类。。

自贡黄明儒 发表于 2013-12-23 11:41:03

本帖最后由 自贡黄明儒 于 2013-12-23 11:52 编辑

275437962 发表于 2013-12-23 11:35 http://bbs.mjtd.com/static/image/common/back.gif
大侠,不是这样子的,也是我没有说清楚,我的意思是,所有块都各自旋转180度,旋转后,它们的方向不应都一 ...

你把(entmod (subst (cons 50 180) (assoc 50 ent) ent))
改成(entmod (subst (cons 50 (+ (cdr (assoc 50 ent) pi))) (assoc 50 ent) ent))不就得了?

275437962 发表于 2013-12-23 12:08:34

自贡黄明儒 发表于 2013-12-23 11:41 static/image/common/back.gif
你把(entmod (subst (cons 50 180) (assoc 50 ent) ent))
改成(entmod (subst (cons 50 (+ (cdr (asso ...

按你说的改了,不行,没有反应,符号没有变化

自贡黄明儒 发表于 2013-12-23 13:11:35

275437962 发表于 2013-12-23 12:08 static/image/common/back.gif
按你说的改了,不行,没有反应,符号没有变化

;块变180度 ZZXXQQ 2013.12.23
(defun c:w1 (/ EN ENT I LN S1 SS)
(if (setq s1 (entsel "\n单选图块: "))
    (progn
      (setq en (car s1)
          ln (assoc 8 (entget en))
      )
      (if (and (princ "\n选择图块: ")
             (setq ss (ssget (list '(0 . "INSERT") ln)))
          )
        (progn
          (setq i -1)
          (repeat (sslength ss)
          (setq ent (entget (ssname ss (setq i (1+ i)))))
          (entmod
              (subst (cons 50 (+ (cdr (assoc 50 ent)) pi)) (assoc 50 ent) ent)
          )
          )
        )
      )
    )
)
(princ)
)

自贡黄明儒 发表于 2013-12-23 13:30:55

275437962 发表于 2013-12-23 12:08 http://bbs.mjtd.com/static/image/common/back.gif
按你说的改了,不行,没有反应,符号没有变化
;;块旋转180 这个要好些,可用于带属性的块 自贡黄明儒2013年12月23日
(defun c:w1 (/ E EN I LN P10 S1 SS)
(if (setq s1 (entsel "\n单选图块: "))
    (progn
      (setq ln (assoc 8 (entget (car s1))))
      (princ "\n选择图块: ")
      (if (setq ss (ssget (list '(0 . "INSERT") ln)))
      (repeat      (setq i (sslength ss))
          (setq e (ssname ss (setq i (1- i))))
          (setq p10 (vlax-3d-point (cdr (assoc 10 (entget e)))))
          (vla-rotate (vlax-ename->vla-object e) p10 pi)
      )
      )
    )
)
(princ)
)

275437962 发表于 2013-12-23 14:22:48

自贡黄明儒 发表于 2013-12-23 13:30 static/image/common/back.gif


谢谢了,很好用,麻烦你了!!!
页: [1]
查看完整版本: autolisp如何实现符号旋转