找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 622|回复: 5

[编程申请]:大侠们请帮忙啊

[复制链接]
发表于 2004-6-18 12:54:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
能否实现一个和 镜像 相类似的命令,但是不同的是镜像在操作完之后原物还保留,而我需要实现的命令是将原物删除,

哪位大侠肯帮忙一下???
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-18 13:03:19 | 显示全部楼层
不用啦,镜像命令本身就有这个功能:看看执行命令后的提示<N/Y>?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 13:25:44 | 显示全部楼层

Re: [编程申请]:大侠们请帮忙啊

最初由 firemaner 发布
[B]能否实现一个和 镜像 相类似的命令,但是不同的是镜像在操作完之后原物还保留,而我需要实现的命令是将原物删除,

哪位大侠肯帮忙一下??? [/B]

给你写一个吧:

  1.   [FONT=courier new]
  2. (defun c:cs_mir        (/)
  3.   (cond
  4.     ((setq ss (ssget))
  5.      (princ "\n选择对称轴线")
  6.      (if (and (car (setq ent (zntq '((0 . "line")))))
  7.               (= (type (cadr ent)) 'list)
  8.          )
  9.        (setq ent     (car ent)
  10.              ent_lst (entget ent)
  11.              pt1     (cdr (assoc 10 ent_lst))
  12.              pt2     (cdr (assoc 11 ent_lst))
  13.        )
  14.        (setq pt2 (getpoint (setq pt1 (cadr ent)) "\n第二点:"))
  15.      )
  16.      (if (and pt1 pt2)
  17.        (progn
  18.          (setq osmode  (getvar "osmode")
  19.                cmdecho (getvar "cmdecho")
  20.          )
  21.          (setvar "osmode" 0)
  22.          (setvar "cmdecho" 0)
  23.          (command "MIRROR" ss "" pt1 pt2 "yes");;;如果不删除,可以将YES改为NO即可
  24.          (setvar "osmode" osmode)
  25.          (setvar "cmdecho" cmdecho)
  26.        )
  27.      )
  28.     )
  29.   )
  30.   (princ)
  31. )
  32. (defun zntq (nam / pt ss_name biaoji ss)
  33.   (setq biaoji t)
  34.   (while biaoji
  35.     (setq pt (grread t 4 2))
  36.     (cond
  37.       ((= 5 (car pt))
  38.        (setq ss (ssget (cadr pt) nam))
  39.        (if ss_name
  40.          (redraw ss_name 4)
  41.        )
  42.        (setq ss_name nil)
  43.        (if ss
  44.          (progn
  45.            (setq ss_name (ssname ss 0))
  46.            (redraw ss_name 3)
  47.          )
  48.        )
  49.       )
  50.       ((= 3 (car pt))
  51.        (setq ss (ssget (cadr pt) nam))
  52.        (if ss_name
  53.          (redraw ss_name 4)
  54.        )
  55.        (setq ss_name nil)
  56.        (if ss
  57.          (progn
  58.            (setq ss_name (ssname ss 0))
  59.            (redraw ss_name 3)
  60.          )
  61.        )
  62.        (setq biaoji nil)
  63.       )
  64.       ((or (= (car pt) 25)
  65.            (and        (= (car pt) 2)
  66.                 (or (= (cadr pt) 13)
  67.                     (= (cadr pt) 32)
  68.                 )
  69.            )
  70.        )
  71.        (setq biaoji nil
  72.              ss_name nil
  73.        )
  74.       )
  75.       (t (princ))
  76.     )
  77.   )
  78.   (if ss_name
  79.     (redraw ss_name 4)
  80.   )
  81.   (list ss_name (cadr pt))
  82. )
  83.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-18 17:00:21 | 显示全部楼层

Re: Re: [编程申请]:大侠们请帮忙啊

最初由 lijiao 发布
[B]
给你写一个?.. [/B]

随手写的,步骤,效果大同小异:
但我觉得,还是应该动态显示镜像物体的好,直观。哪位接着来?继续~
[php]
;;mir=不保留镜像,支持点选对称轴线(line).
(defun c:mir ( / ss p1 p2 z1 e)
  (princ "\选择镜像实体:")
  (setq ss (ssget)
        p1 (getpoint "\n点取对称轴/对称轴第一点:")
        z1 (car(nentselp p1)))
  (if (and z1 (setq e (entget z1))(= "LINE" (cdr(assoc 0 e))))
      (setq p1 (cdr(assoc 10 e))
            p2 (cdr(assoc 11 e)))
      (setq p2 (getpoint p1 "\n第二点:"))
  )
  (vl-cmdf "_.mirror" ss "" p1 p2 "Y")
)
[/php]

"但我觉得,还是应该动态显示镜像物体的好,直观。"
就像这样:[php]
(defun c:mir ( / ss p1 p2 z1 e)
  (princ "\选择镜像实体:")
  (setq ss (ssget)
        p1 (getpoint "\n点取对称轴/对称轴第一点:")
        z1 (car(nentselp p1)))
  (if (and z1 (setq e (entget z1))(= "LINE" (cdr(assoc 0 e))))
      (setq p1 (cdr(assoc 10 e))
            p2 (cdr(assoc 11 e)))
  )
  (vl-cmdf "_.mirror" ss "" p1 )
  (if p2 (vl-cmdf p2) (vl-cmdf pause))
  (vl-cmdf "Y")
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-6-18 17:20:57 | 显示全部楼层
是不是可以这样呢?
[php](defun c:mir(/ oldcmd)
  (setq oldcmd (getvar "cmdecho"))
  (setvar "cmdecho" 1)
  (command "_.mirror" (ssget) "" pause pause "y")
  (setvar "cmdecho" oldcmd)
  (princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-19 09:06:03 | 显示全部楼层
完善了一下,应该能够达到实战的要求:

  1.   [FONT=courier new]
  2. (defun c:cs_mir        (/ CMDECHO ENT ENT_LST FS OSMODE PT PT1 PT2 p1 SS)
  3.   (princ "\n选择对称轴线")
  4.   (setq ent (zntq '((0 . "line"))))
  5.   (cond
  6.     ((car ent)
  7.      (setq ent           (car ent)
  8.            ent_lst (entget ent)
  9.            pt1           (cdr (assoc 10 ent_lst))
  10.            pt2           (cdr (assoc 11 ent_lst))
  11.      )
  12.     )
  13.     ((= (type (cadr ent)) 'list)
  14.      (setq pt2 (getpoint (setq pt1 (cadr ent)) "\n第二点:"))
  15.     )
  16.   )
  17.   (if (and pt1 pt2)
  18.     (progn
  19.       (setq osmode  (getvar "osmode")
  20.             cmdecho (getvar "cmdecho")
  21.             shanchu "no"
  22.       )
  23.       (setvar "osmode" 0)
  24.       (setvar "cmdecho" 0)
  25.       (princ "\n选择需要镜像的实体(右击退出)/<删除实体>")
  26.         (grdraw pt1 pt2 1 1)
  27.       (while (and (setq ss (zntq nil))
  28.                   (or (= (type (cadr ss)) 'list)
  29.                       (= (cadr ss) 13)
  30.                       (= (cadr ss) 32)
  31.                       )
  32.              )
  33.         (grdraw pt1 pt2 1 1)
  34.         (cond
  35.           ((car ss)
  36.             (command "MIRROR" ss "" pt1 pt2 shanchu)
  37.           )
  38.           ((= (type (cadr ss)) 'list)
  39.             (if        (setq p1 (getcorner (setq pt (cadr ss))))
  40.               (progn
  41.                 (if (> (car p1) (car pt))
  42.                   (setq fs "w")
  43.                   (setq fs "c")
  44.                 )
  45.                 (if (setq ss (ssget fs pt p1))
  46.                   (command "MIRROR" ss "" pt1 pt2 shanchu)
  47.                 )
  48.               )
  49.             )
  50.           )
  51.           (t (if (= shanchu "yes")
  52.                (progn
  53.                  (princ "\n选择需要镜像的实体(右击退出)/<删除实体>")
  54.                  (setq shanchu "no")
  55.                  )
  56.                (progn
  57.                  (princ "\n选择需要镜像的实体(右击退出)/<不删除实体>")
  58.                  (setq shanchu "yes")
  59.                  )
  60.                )
  61.            )
  62.         )
  63.       )
  64.       (redraw)
  65.       (setvar "osmode" osmode)
  66.       (setvar "cmdecho" cmdecho)
  67.     )
  68.   )
  69.   (princ)
  70. )
  71. (defun zntq (nam / pt ss_name biaoji ss)
  72.   (setq biaoji t)
  73.   (while biaoji
  74.     (setq pt (grread t 4 2))
  75.     (cond
  76.       ((= 5 (car pt))
  77.        (setq ss (ssget (cadr pt) nam))
  78.        (if ss_name
  79.          (redraw ss_name 4)
  80.        )
  81.        (setq ss_name nil)
  82.        (if ss
  83.          (progn
  84.            (setq ss_name (ssname ss 0))
  85.            (redraw ss_name 3)
  86.          )
  87.        )
  88.       )
  89.       ((= 3 (car pt))
  90.        (setq ss (ssget (cadr pt) nam))
  91.        (if ss_name
  92.          (redraw ss_name 4)
  93.        )
  94.        (setq ss_name nil)
  95.        (if ss
  96.          (progn
  97.            (setq ss_name (ssname ss 0))
  98.            (redraw ss_name 3)
  99.          )
  100.        )
  101.        (setq biaoji nil)
  102.       )
  103.       ((or (= (car pt) 25)
  104.            (and        (= (car pt) 2)
  105.                 (or (= (cadr pt) 13)
  106.                     (= (cadr pt) 32)
  107.                 )
  108.            )
  109.        )
  110.        (setq biaoji nil
  111.              ss_name nil
  112.        )
  113.       )
  114.       (t (princ))
  115.     )
  116.   )
  117.   (if ss_name
  118.     (redraw ss_name 4)
  119.   )
  120.   (list ss_name (cadr pt))
  121. )
  122.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-27 05:23 , Processed in 0.182024 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表