wangxf888 发表于 2020-9-1 21:11:43

请教关于如何获取镜像后的图元 !

   想跟各位老大请教个代码,代码想要达到的效果就是执行镜像命令MI后,接下来输入移动或复制命令时,可输入P键,能获取到镜像后的图元,方便操作,正常镜像命令后输入P是获取的镜像前的图元。此问题论坛上很早就有相关讨论,但没找到完整能用的代码,水平太有限,拼凑了半天论坛上的代码也没有成功,恳请大佬出手相助! 谢谢! 附上在论坛搜到的一段代码,应该是Caoyin老大写的:
;;获取在图元 ent 之后产生的图元的选择集 ,ent不存在时返回nil
(defun entbackss(ent / backss)
(if ent
    (progn
      (setq backss (ssadd))
      (while (setq ent (entnext ent))
        (if (not (member (cdr (assoc 0 (entget ent)))
                       '("ATTRIB" "VERTEX" "SEQEND")))
          (setq backss (ssadd ent backss))
          )
        )
      (if (zerop (sslength backss))
        (setq backss NIL)
        )
      backss
      )
    )
)
(princ)

start4444 发表于 2020-9-1 21:11:44

本帖最后由 start4444 于 2020-9-6 02:23 编辑

你感觉这样改造镜像命令好吗?就是每次都必须运行多余的代码,不管你要不要后续操作,上面那个多好啊,想要操作再搞

(defun c:tt5 (/ enlast entx ss ss_new)
(setq ss (ssget) enlast (entlast))
(command "MIRROR" ss "" pause pause pause)
(setq ss_new (ssadd))
(if (while (setq entx (entnext enlast)) (setq ss_new (ssadd entx ss_new) enlast entx)) (setq ss ss_new))
(command "select" ss "")
(princ)
)

自贡黄明儒 发表于 2020-9-1 21:15:00

用命令反应器

wangxf888 发表于 2020-9-1 21:25:20

不会啊!老大!这个回复速度真是有点激动!!

李钊伟2012 发表于 2020-9-1 23:46:32

记得有个批量形心面积的代码,处理完闭合线段生成面预,从而获取星星面积,里面有个步骤就是删除生成的***,你可以找找,或者加我

start4444 发表于 2020-9-2 09:26:19

有个笨方法但是很实用,倒退一步,提取entlast,再前进一步,提取新图元集合,同样适用 copy 操作,有个前提是镜像之后不能动,动了后退就没效了。

xvjiex 发表于 2020-9-2 13:30:29

本帖最后由 xvjiex 于 2020-9-2 13:49 编辑

简单一点:
(command ".mirror" ent "" pt1 pt2 "n")
(command ".copy" ent "" pt1 pt2);ent为镜像后的图元,不用输入p。

ZZXXQQ 发表于 2020-9-2 14:02:55

;取得镜像或复制后的图元 ZZXXQQ 2020-9-2
(defun ssplast ( / sslast)
(if (setq ss (ssget "P"))
    (repeat (setq i (sslength ss))
      (setq a (entlast))
      (ssadd a sslast)
      (ssdel a)
    )
    (repeat i
      (ssdel (ssname (setq i (1- i))))
    )
    sslast
)
)
(princ)

wangxf888 发表于 2020-9-3 01:16:46

谢谢大家的热心及时回复,谢谢Z版,我把以前在咱们论坛上搜到的优化过的复制命令给各位老大过目下,这个命令可以达到复制命令后,可以用P来选择复制后的图元,我尝试改为镜像命令,调试了几次没有成功,水平太菜,没办法,恳请各位根据这个代码调整后,能用于镜像命令,(代码作者忘了是哪位大佬了,见谅!)
(defun c:tt ()
(setq a (cadr (ssgetfirst)))
(if a
    (setq ss a)
    (setq ss (ssget))
    )
(setvar "cmdecho" 0)
(command "undo" "g")

(if ss
    (progn
      (initget "M ")
      (setq p1 (getpoint "\n多重复制(M)/指定基点: "))
      (cond
        ((= p1 "M")
       (princ "\n多重复制....")
       (setq pt Nil)
       (setq p1 (getpoint "指定基点: "))
       (princ "\n")
       (if p1
           (progn
             (princ "\n已指定基准点\n")
             (while (not (equal p1 pt 1e-4))
             (setq ent (entlast))
             (setq pt p1)
             (princ "指定下一点: ")
             (vl-cmdf "copy" ss "" "non" pt pause)
             (setq tempss ss)
             (setq ss (entbackss ent))
             (setq p1 (getvar "lastpoint"))
             )
             (command "._erase" ss "")
             (command "select" tempss "")
             )
           (princ "\n未指定基准点,程序结束\n")
           )
       )
        (T
       (if p1
           (progn
             (setq ent (entlast))
             (princ "指定下一点: ")
             (command "copy" ss "" "non" p1 pause)
             (setq tempss ss)
             (setq pt (getvar "lastpoint"))
             (setq ss (entbackss ent))
             (if (null ss)
             (setq ss (ssadd))
             )

             (if (equal p1 pt 1e-4)
             (progn
               (command "._erase" ss "")
               (command "select" tempss "")
               )
             (command "select" ss "")
             )
             )
           )
       )
        )
      )
    )
(command "undo" "e")
(princ))
;;获取在图元 ent 之后产生的图元的选择集 ,ent不存在时返回nil
(defun entbackss(ent / backss)
(if ent
    (progn
      (setq backss (ssadd))
      (while (setq ent (entnext ent))
        (if (not (member (cdr (assoc 0 (entget ent)))
                       '("ATTRIB" "VERTEX" "SEQEND")))
          (setq backss (ssadd ent backss))
          )
        )
      (if (zerop (sslength backss))
        (setq backss NIL)
        )
      backss
      )
    )
)
(princ)

wangxf888 发表于 2020-9-3 23:07:02

start4444 发表于 2020-9-2 09:26
有个笨方法但是很实用,倒退一步,提取entlast,再前进一步,提取新图元集合,同样适用 copy 操作,有个前 ...

老大拜托帮忙解决下我请教的这个选择镜像后图元的问题,这个问题对你来说肯定很简单,恳请帮忙解决下,我原来求助过的问题,也是你帮忙解决的。拜托了!:handshake
页: [1] 2
查看完整版本: 请教关于如何获取镜像后的图元 !