实体选择集-->旋转-->新选择集问题
如题:1: 如果构件选择集(setq s(ssget))后,对实体旋转或移动,操作完成后,发现,其中各个实体名,是不变的。
2:既然实体名没有变,那么继续用 选择集 S,进行后续编程,为什么失效呢?
如之奈何????
如果这样不可以用选择集 S ;那么,如何取得旋转、移动之后,这部分实体的新的选择集?
经验证:下面的方法亦然不会奏效。。。。。
[*];;;;(setq ss1 (entlast)) ;;;;;;构造最后一个实体选择集
[*]
[*];;;;;;;(setq s (last_ent ss1));;;;;;;旋转定位后,产生的选择集
看来大家不积极,那么我发段没调试成功的代码吧。希望有人能发现这段代码要解决的啥问题?解决了是很有用的。
[*]
[*];;; ---------------------------------------------------------
[*](defun c:CCJ (/ s ss pt1 pt2 nam n p ang)
[*](command)
[*](setq s (ssget))
[*](princ "\n选择要旋转的对象:")
[*](setq pt2 (nth 1 (grread 5)))
[*](setq pt1 90)
[*]
[*](setq e (entlast));最后一个图元
[*](setq ss (ssadd))
[*](command "ROTATE" s "" pt2 pt1 "")
[*](command "MOVE" s "" pt2)
[*](while (setq e (entnext e));把旋转后的图元,逐一加进选择集
[*] (setq ss (ssadd e ss))
[*])
[*];;;;;;;;;以下更新旋转、移动后实体表,重新构件新选择集SS
[*];;;;;;;(setq s (last_ent ss1));;;;;;;旋转定位后,产生的选择集
[*](setq p (sslength ss))
[*](setq n 0)
[*](setq p (- p 1))
[*](while (<= n p)
[*] (setq nam (ssname ss n))
[*] (setq pt1 (entget nam))
[*] (if(OR (="TEXT" (cdr(assoc 0 pt1)))(="MTEXT" (cdr(assoc 0 pt1))))
[*] (progn
[*] (command ".JUSTIFYTEXT" nam "" "M")
[*] (setq ang (cdr(assoc 50 pt1)))
[*] (if (and (>= ang (/ pi 2)) (<= ang pi)) ;;;;;第二象限
[*] (setq ang (+ pi ang ))
[*] )
[*] (if (and (> angpi) (<= ang (* 1.5 pi))) ;;;;;第三象限
[*] (setq ang (- ang pi))
[*] )
[*] (setq pt1 (subst (cons 50 ang) (assoc 50 pt1) pt1));;;;;实体表更新【角度】
[*] (entmod pt1)
[*] (entupd nam)
[*] (command ".JUSTIFYTEXT" nam "" "L");;;;;;改回文字为左定位
[*] )
[*] )
[*] (setq n (+ 1 n))
[*])
[*])
看来大家不积极,那么我发段没调试成功的代码吧。希望有人能发现这段代码要解决的啥问题?解决了是很有用的。
;;; ---------------------------------------------------------
(defun c:CCJ (/ s ss pt1 pt2 nam n p ang)
(command)
(setq s (ssget))
(princ "\n选择要旋转的对象:")
(setq pt2 (nth 1 (grread 5)))
(setq pt1 90)
(setq e (entlast));最后一个图元
(setq ss (ssadd))
(command "ROTATE" s "" pt2 pt1 "")
(command "MOVE" s "" pt2)
(while (setq e (entnext e));把旋转后的图元,逐一加进选择集
(setq ss (ssadd e ss))
)
;;;;;;;;;以下更新旋转、移动后实体表,重新构件新选择集SS
;;;;;;;(setq s (last_ent ss1));;;;;;;旋转定位后,产生的选择集
(setq p (sslength ss))
(setq n 0)
(setq p (- p 1))
(while (<= n p)
(setq nam (ssname ss n))
(setq pt1 (entget nam))
(if(OR (="TEXT" (cdr(assoc 0 pt1)))(="MTEXT" (cdr(assoc 0 pt1))))
(progn
(command ".JUSTIFYTEXT" nam "" "M")
(setq ang (cdr(assoc 50 pt1)))
(if (and (>= ang (/ pi 2)) (<= ang pi)) ;;;;;第二象限
(setq ang (+ pi ang ))
)
(if (and (> angpi) (<= ang (* 1.5 pi))) ;;;;;第三象限
(setq ang (- ang pi))
)
(setq pt1 (subst (cons 50 ang) (assoc 50 pt1) pt1));;;;;实体表更新【角度】
(entmod pt1)
(entupd nam)
(command ".JUSTIFYTEXT" nam "" "L");;;;;;改回文字为左定位
)
)
(setq n (+ 1 n))
)
)
试试ssget "P" 给你参考一下
(defun c:rt ( / sspp pt ss)(princ "快速旋转<90°逆时针>")
(setq ss(ssget ":s"))
(if(= ss nil)(setq ss sso)(setq sso ss))
(if(= sso nil)(princ "\n没有选择对象"))
(setq pt (centerp sso)) ;;;;centerp 包围盒的中心
(setq pt (trans pt 0 1))
(setvar 'cmdecho 0)
(command "_.rotate" sso "" "NON" pt -90)
(setvar 'cmdecho 1)
(prin1))
菜卷鱼 发表于 2019-6-13 08:40
给你参考一下
不能 用啊,缺少函数 296715530 发表于 2019-12-31 13:31
不能 用啊,缺少函数
;;;;;centerp 包围盒的中心
没发这个函数,论坛里很多 菜卷鱼 发表于 2020-1-4 08:45
;;;;;centerp 包围盒的中心
没发这个函数,论坛里很多
不懂函数,发个完整的呗, 296715530 发表于 2020-1-5 22:04
不懂函数,发个完整的呗,
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109639&fromuid=399892
菜卷鱼 发表于 2020-1-6 08:28
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109639&fromuid=399892
选择对象: 指定对角点:
; 错误: 参数类型错误: lentityp <Selection set: 1120>
命令:
页:
[1]