Annonces

Les forums de la communauté Autodesk ont un nouveau look. Pour en savoir plus sur ce qui a changé, consultez le tableau des annonces de la communauté.

macro pour soustraire l'interférence de deux solides dans AutoCAD

BruLemi
Advocate

macro pour soustraire l'interférence de deux solides dans AutoCAD

BruLemi
Advocate
Advocate

Bonjour,

Savez-vous s'il existe une macro qui ferait la soustraction de l'interférence entre deux solides en 1 ou 2 clic!!?

...ça pourrait fonctionner un peu comme la commande miroir qui demande si on veut effacer les objets sources ou non.

Ça serait pratique pour trouer les murs dans lesquels mes tuyaux passent!!! 🙂

Merci à l'avance!

Bruno Lemieux
Tech. Concepteur, Mécanique Industrielle
Services d’ingénierie – Canada
SNC-Lavalin inc.
0 J'aime
Répondre
Solutions acceptées (1)
504 Visites
3 Réponses
Replies (3)

_gile
Mentor
Mentor

Salut,

 

Tu peux utiliser le LISP Soustrac.lsp sur cette page qui propose de conserver les objets soustaits.



Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

_gile
Mentor
Mentor
Solution acceptée

Dérivé du LISP sus cité,  la commande LISP PERCER demande à l'utilisateur de sélectionner "les solides à enlever de .." (les murs) puis "les solides à soustraire .." (tuyaux) et perce les murs en conservant les tuyaux.

 

(defun c:percer (/ *error* ss1 ss2 n lst)
  (vl-load-com)
  (or *acdoc*
      (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object)))
  )
  (defun *error* (msg)
    (and
      msg
      (/= msg "Fonction annulée")
      (princ (strcat "\nErreur: " msg))
    )
    (vla-EndUndoMark *acdoc*)
    (princ)
  )
  (princ
    "\nSélectionnez les solides à enlever de .."
  )
  (if
    (setq ss1 (ssget '((0 . "3DSOLID"))))
     (if (and
	   (princ
	     "\nSélectionnez les solides à soustraire .."
	   )
	   (setq ss2 (ssget '((0 . "3DSOLID"))))
	 )
       (progn
	 (vla-StartUndoMark *acdoc*)
	 (repeat (setq n (sslength ss2))
	   (setq
	     lst
	      (cons
		(vlax-ename->vla-object (ssname ss2 (setq n (1- n))))
		lst
	      )
	   )
	 )
	 (repeat (setq n (sslength ss1))
	   (setq
	     obj (vlax-ename->vla-object (ssname ss1 (setq n (1- n))))
	   )
	   (foreach o lst
	     (and (= (vla-get-ObjectName obj) (vla-get-ObjectName o))
		  (vla-Boolean obj acSubtraction (vla-copy o))
	     )
	   )
	 )
	 (*error* nil)
       )
     )
  )
)


Gilles Chanteau
Programmation AutoCAD LISP/.NET
GileCAD
GitHub

0 J'aime

BruLemi
Advocate
Advocate

Wow!!! En plein dans le mille!!!! Merci beaucoup!!!

Bruno Lemieux
Tech. Concepteur, Mécanique Industrielle
Services d’ingénierie – Canada
SNC-Lavalin inc.
0 J'aime