找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 943|回复: 6

[每日一码] 一个镜像的VLISP代码

[复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-9-22 19:44:44 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 Lisphk 于 2016-9-22 19:50 编辑

一个镜像的VLISP代码

一个镜像的VLISP代码


  1. ;;镜像      
  2. (defun c:tt (/ *error* der ent j p1 p2 pt ss uflag)
  3.   (vl-load-com)
  4.   (defun *error* (msg)
  5.     (and
  6.       uflag
  7.       (vla-endundomark doc)
  8.     )
  9.     (or
  10.       (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  11.       (princ (strcat "\n** Error: " msg " **"))
  12.     )
  13.     (princ)
  14.   )
  15.   (setq doc (cond
  16.               (doc)
  17.               ((vla-get-activedocument (vlax-get-acad-object)))
  18.             )
  19.   )
  20.   (if (setq j -1
  21.             ss (ssget "_:L")
  22.       )
  23.     (while (progn
  24.              (setq ent (entsel "\nSelect Mirror Line: "))
  25.              (cond
  26.                ((vl-consp ent)
  27.                  (if (not (vl-catch-all-error-p (setq pt
  28.                                                       (vl-catch-all-apply
  29.                                                                           (function vlax-curve-getclosestpointto)
  30.                                                                           (list
  31.                                                                                 (car ent)
  32.                                                                                 (cadr ent)
  33.                                                                           )
  34.                                                       )
  35.                                                 )
  36.                           )
  37.                      )
  38.                    (progn
  39.                      (setq uflag (not (vla-startundomark doc)))
  40.                      (setq der (angle '(0 0 0)
  41.                                       (vlax-curve-getfirstderiv
  42.                                                                 (car ent)
  43.                                                                 (vlax-curve-getparamatpoint
  44.                                                                                             (car ent) pt
  45.                                                                 )
  46.                                       )
  47.                                )
  48.                      )
  49.                      (mapcar
  50.                        (function set)
  51.                        '(p1 p2)
  52.                        (mapcar
  53.                          (function vlax-3d-point)
  54.                          (list pt (polar pt der 1.))
  55.                        )
  56.                      )
  57.                      (while (setq ent (ssname ss (setq j (1+ j))))
  58.                        (vla-mirror (vlax-ename->vla-object ent) p1 p2)
  59.                      )
  60.                      (setq uflag (vla-endundomark doc))
  61.                    )
  62.                    (princ "\n** Invalid Object Selected **")
  63.                  )
  64.                )
  65.                (t
  66.                  (princ "\n** Nothing Selected **")
  67.                )
  68.              )
  69.            )
  70.     )
  71.   )
  72.   (princ)
  73. )

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1304个

财富等级: 财源广进

发表于 2016-9-23 00:23:08 | 显示全部楼层
牛叉呀,强强强
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8727个

财富等级: 富甲天下

发表于 2016-9-23 07:16:03 | 显示全部楼层
谢谢 Lisphk 分享学习了!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2016-9-23 08:56:03 | 显示全部楼层
;; Mirror SelectionSet about selected object
;;框选对象镜像
(defun c:ww   nil (QuickMirror nil nil))

;; Mirror SelectionSet about selected object, delete SelectionSet
;;框选对象镜像,并删除原框选线
(defun c:wwa  nil (QuickMirror nil   t))


(defun QuickMirror ( single delete / *error* _StartUndo _EndUndo doc ss sel p1 p2 i o ) (vl-load-com)


  (defun *error* ( msg )
    (if doc (_EndUndo doc))
    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
        (princ (strcat "\n** Error: " msg " **")))
    (princ)
  )

  (defun _StartUndo ( doc ) (_EndUndo doc)
    (vla-StartUndoMark doc)
  )

  (defun _EndUndo ( doc )
    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
      (vla-EndUndoMark doc)
    )
  )

  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

  (if (or single (setq ss (ssget "_:L")))
    (while
      (progn (setvar 'ERRNO 0) (setq sel (entsel "\n请选择对象镜像: "))
        (cond
          (
            (=  7 (getvar 'ERRNO)) (princ "\n** 错了,再试一次 **")
          )
          (
            (and sel
              (not
                (vl-catch-all-error-p
                  (setq p1
                    (vl-catch-all-apply 'vlax-curve-getClosestPointto
                      (list (car sel) (trans (cadr sel) 1 0))
                    )
                  )
                )
              )
            )

            (setq p2
              (polar p1
                (angle '(0. 0. 0.)
                  (vlax-curve-getFirstDeriv (car sel)
                    (vlax-curve-getParamatPoint (car sel) p1)
                  )
                )
                1.
              )
            )

            (setq p1 (vlax-3D-point p1) p2 (vlax-3D-point p2))

            (_StartUndo doc)
            (if ss
              (repeat (setq i (sslength ss))
                (vla-mirror (setq o (vlax-ename->vla-object (ssname ss (setq i (1- i))))) p1 p2)
                (if delete  (vla-delete o))
              )
              (progn
                (vla-mirror (setq o (vlax-ename->vla-object (car sel))) p1 p2)
                (if delete  (vla-delete o))
              )
            )
            (_EndUndo doc)
          )
        )
      )
    )
  )
  (princ)
)

评分

参与人数 1D豆 +5 收起 理由
Lisphk + 5 热心帮忙奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6468个

财富等级: 富甲天下

发表于 2016-9-23 13:26:29 | 显示全部楼层
很强啊……
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 5586个

财富等级: 富甲天下

发表于 2016-9-24 18:00:26 | 显示全部楼层
感谢楼上的两位!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-4-8 15:35:59 | 显示全部楼层
感谢两位大神
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 12:11 , Processed in 0.191813 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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