Anuncios

The Autodesk Community Forums has a new look. Read more about what's changed on the Community Announcements board.

EnM4st3r
en respuesta a: prestin_unique

i also tried to change Lee Macs Quick Mirror to do that

;; Original code by Lee Mac: https://www.lee-mac.com/quickmirror.html
;;
;; Changed to try mirroring objects along a curve 



;; Mirror SelectionSet about selected object
(defun c:QM   nil (QuickMirror nil nil))

(defun QuickMirror ( single delete / *error* _StartUndo _EndUndo doc ent ss sscount sel p1 p2 o ) (vl-load-com)
  ;; © Lee Mac 2011

  (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 sscount 0)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))

  (if (or single (setq ss (ssget "_:L" '((0 . "INSERT")))))
    (progn
      (while (not ent)
        (setq ent (car (setq sel (entsel "\nSelect Mirror Object: "))))
      )
      (while (< sscount (sslength ss))
        (cond
          (
            (and sel
              (not
                (vl-catch-all-error-p
                  (setq p1
                    (vl-catch-all-apply 'vlax-curve-getClosestPointto
                      (list (car sel) (trans (cdr (assoc 10 (entget (ssname ss sscount)))) 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
              (progn
                (vla-mirror (setq o (vlax-ename->vla-object (ssname ss sscount))) 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))
              )
            )
            (setq sscount (1+ sscount))
            (_EndUndo doc)
          )
        ) 
      )
    )
  )
  (princ)
)