Aller au contenu

Piping 3D


(gile)

Messages recommandés

Ayant répondu à une demande sur le forum Autodesk, je tenais à en faire aussi profiter les membres de CADxp.

 

Le LISP extrude un "anneau" (région) dont les diamètres extérieurs et intérieurs sont spécifiés par l'utilisateur sur tous les chemins (arc, cercle, ellipse, ligne, polyligne 2D 3D ou lw, spline plane) sélectionnés. Les chemins sont supprimé si la variable DELOBJ est supérieure à 0.

 

Curve2Pipe peut être utilisé sur des polylignes 3d avec des "raccords" (faits avec 3dPolyFillet), le processus peut être un peu long si les nombres de "raccords" et de segments par arcs sont importants.

 

 

;;; CURVE2PIPE -Gilles Chanteau- (gile) 07/04/07
;;; Extrude un anneau (région) suivant le(s) chemin(s) spécifié(s).
;;; (arc, cercle, ellipse, ligne, polyligne 2D 3D ou lw, spline plane)
;;; Spécifier les diamètres extérieurs et intérieurs et sélectionner le(s) chemin(s)
;;; Si la variable DELOBJ est supérieure à 0 les chemins sont supprimés.
;;;
;;; Révision 20/12/07
;;; conservation des dernières valeurs entrées dans le dessin
;;; ajout d'un raccourci : C2P

(defun c:curve2pipe (/	       Space	 ext_rad   int_rad   ss
	     obj       start	 ext_circ  int_circ  ext_reg
	     int_reg   norm
	    )

 (vl-load-com)

 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (or (vlax-ldata-get "Curve2Pipe" "dia")
     (vlax-ldata-put "Curve2Pipe" "dia" 50.0)
 )
 (or (vlax-ldata-get "Curve2Pipe" "ep")
     (vlax-ldata-put "Curve2Pipe" "ep" 2.0)
 )
 (setq	Space
 (if (= 1 (getvar "CVPORT"))
   (vla-get-PaperSpace *acdoc*)
   (vla-get-ModelSpace *acdoc*)
 )
 )
 (if (setq ext_rad (getdist (strcat "\nDiamètre extérieur 				     (rtos (vlax-ldata-get "Curve2Pipe" "dia"))
			     ">: "
		     )
	    )
     )
   (vlax-ldata-put "Curve2Pipe" "dia" ext-rad)
   (setq ext_rad (vlax-ldata-get "Curve2Pipe" "dia"))
 )
 (setq	ext_rad	(/ ext_rad 2.0)
int_rad	ext_rad
 )
 (while (    (if	(setq int_rad (getdist (strcat "\nÉpaisseur 				       (rtos (vlax-ldata-get "Curve2Pipe" "ep"))
			       ">: "
		       )
	      )
)
     (vlax-ldata-put "Curve2Pipe" "ep" int_rad)
     (setq int_rad (vlax-ldata-get "Curve2Pipe" "ep"))
   )
 )
 (if (setq ss
     (ssget
       '((-4 . "[b]		 (0 . "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE")
	 (-4 . "[b]		 (0 . "POLYLINE")
	 (-4 . "[b]		 (-4 . "&")
	 (70 . 112)
	 (-4 . "NOT>")
	 (-4 . "AND>")
	 (-4 . "[b]		 (0 . "SPLINE")
	 (-4 . "&")
	 (70 . 8)
	 (-4 . "AND>")
	 (-4 . "OR>")
	)
     )
     )
   (progn
     (vla-StartUndoMark *acdoc*)
     (foreach path (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
(setq obj (vlax-ename->vla-object path))
(setq start (vlax-curve-getPointAtParam
	      obj
	      (vlax-curve-getStartParam obj)
	    )
)
(setq ext_circ (vla-addCircle
		 Space
		 (vlax-3d-Point start)
		 ext_rad
	       )
)
(setq int_circ (vla-addCircle
		 Space
		 (vlax-3d-Point start)
		 (- ext_rad int_rad)
	       )
)
(setq norm (vunit (vlax-curve-getFirstDeriv
		    obj
		    (vlax-curve-getStartParam obj)
		  )
	   )
)
(vla-put-Normal ext_circ (vlax-3d-point norm))
(vla-put-Normal int_circ (vlax-3d-point norm))
(setq
  ext_reg (car (vlax-invoke Space 'addRegion (list ext_circ)))
)
(setq
  int_reg (car (vlax-invoke Space 'addRegion (list int_circ)))
)
(vla-Boolean ext_reg acSubtraction int_reg)
(vla-addExtrudedSolidAlongPath Space ext_reg obj)
(mapcar 'vla-delete (list ext_circ int_circ ext_reg))
(if (	  (vla-delete obj)
)
     )
     (vla-EndUndoMark *acdoc*)
   )
   (princ "\nEntrée non valide.")
 )
 (princ)
)

;; VUNIT
;; Retourne le vecteur unitaire d'un vecteur
;;
;; Argument : un vecteur

(defun vunit (v)
 ((lambda (l)
    (if (/= 0 l)
      (mapcar (function (lambda (x) (/ x l))) v)
    )
  )
   (distance '(0 0 0) v)
 )
)

(defun c:c2p () (c:curve2pipe))

[Edité le 3/4/2007 par (gile)][Edité le 1/7/2008 par (gile)]

 

[Edité le 9/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Exemple en images.

 

Soient 3 polylignes optimisées jointives construites sur 3 plans (SCU) différents. Les arcs sont faits avec l'option arc ou la commande raccord :

 

http://img20.imageshack.us/img20/5061/c2p1ln0.png

 

Lancer la commande, spécifier les diamètres et sélectionner les polylignes :

 

Commande: c2p

 

Diamètre extérieur: 300

 

Diamètre intérieur: 200

 

Choix des objets: Spécifiez le coin opposé: 3 trouvé(s)

 

On pourra ensuite unir les 3 solides.

 

 

http://img367.imageshack.us/img367/1046/c2p2oh9.png

 

 

On peut préférer travailler avec des polylignes 3D

 

http://img50.imageshack.us/img50/448/c2p3vd3.png

 

Les polylignes 3D ne sont constituées que de segments droit, le LISP 3dPolyFillet permet de faire des "raccords" sur les polylignes 3D.

Commande:

3DPOLYFILLET

Paramètres courants. Segments: 10 Rayon: 0.0000

Sélectionnez le premier segment ou [segments/Rayon]: r

 

Spécifiez le rayon : 500

 

Sélectionnez le premier segment ou [segments/Rayon]: s

 

Spécifiez le nombre de segments pour les arcs : 10

 

Sélectionnez le premier segment ou [segments/Rayon]:

Sélectionnez le deuxième segment ou [Tous]: t

 

http://img238.imageshack.us/img238/8786/c2p4gj8.png

 

Exécuter Curve2Pipe :

 

http://img380.imageshack.us/img380/189/c2p5dz0.png

[Edité le 1/4/2007 par (gile)]

 

[Edité le 1/7/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 1 an après...

J'ai découvert il y a peu un site pour les images avec hébergement gratuit soit disant à vie...

 

Si cela est vrai, cela peut être intéressant pour le sujet que l'on aimerai gardé illustré dans le temps.

 

Je ne l'ai pas encore essayé!

 

le site:

 

http://mabul.org/

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Ne marche pas chez moi (V2007)

Choisi la 1ère méthode polylignes 2D

 

Message renvoyé :

Commande: c2p

Diamètre extérieur <50>:

Épaisseur <3>:

Choix des objets: Spécifiez le coin opposé: 2 trouvé(s)

Choix des objets: ; erreur: no function definition: VUNIT

 

J'ai loupé quelque chose c'est sûr ... mais quoi ???

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité