Aller au contenu

Tuyau 3D pour autocad 2007


Messages recommandés

Posté(e)

Je vous propose un lisp que je me suis fais pour tracer du TUYAU 3D avec Autocad 2007 seulement, car la commande "balayage" est utilisée.

Il comprend 2 commandes :

"TU" pour générer un tube suivant un axe qui peut être : ligne, arc, cercle, hélice etc. et polylign 3d, pratique avec "polyfillet" de Gilles.

Et "TUY" qui permet de tracer directement un tuyau en 3d avec ses coudes.

Pour les 2 : si épaisseur différente de 0, le tube est creux, (ce qui est plutôt normal pour un tube), sinon il est tracé en forme de barre pleine. (Ce qui est plutôt normal pour une barre)

L'inconvénient de "TUY" c'est que les coudes et les longueurs droites du tuyau tracé ne sont pas liés.

Son avantage, c'est qu' il corrige les distances trop courtes pour placer un coude ,on peut démarrer ou finir avec un coude ,ou encore faire un coude seul et aussi une succession de coudes, pour cela il suffit que l'espacement entre points d'épures soit plus court que le ou les coudes , avant ou après ou les 2.Et c'est facile à modifier et à refaire depuis l'axe avec "TU".

Je dois avouer que j'ai galéré avec la correction automatique car j'ai cumulé les erreurs. Ben ouais que voulez-vous, avec une pincée de neurones lispeurs ankylosés par l'inaction, l'accouchement a été pénible, mais je suis assez content du résultat, même s'il reste des imperfections.

Pour finir j'espère qu'il vous sera utile et que vous l'adapterez à vos besoins ou que ça vous amusera de faire des tuyaux dans tous les sens, surtout en couleurs, c'est très jolie.

PS: le choix des "DN" est dispo dans le menu contextuel, ainsi que l'option "Epaisseur",

et le DN21 est en réalité du DN15 rayon 38.

 

;; TUY.LSP    usegomme    le 06-02-2007 corrigé le 19-08-08
;; Tuyau 3d à partir d' autocad 2007 
;;;
(defun diam-t3d (/ diam dn)  
(cond
   ((and (/= tuy:dn "Autre") (/= tuy:dn " ") (/= tuy:dn nil))
     (setq dn tuy:dn)
     (initget "Autre")
     (setq dn (getreal (strcat "\nDiametre en DN [8/10/15/21/20/25/32/40/50/65/80/100/125/150/200/250/300/350/400/450/500/600/Autre en mm] DN<" (rtos dn 2 0) ">: ")))    
   )
   (T 
     (initget "Autre")
     (setq dn (getreal (strcat "\nDiametre en DN [8/10/15/21/20/25/32/40/50/65/80/100/125/150/200/250/300/350/400/450/500/600/Autre en mm] : ")))
   ) 
 ) 
 (cond
   ((and (/= dn "A") (/= dn nil))(setq tuy:dn dn))
   ((= dn nil) (if tuy:dn (setq dn tuy:dn)))
   ((= dn "A") (setq dn nil))
 )
 
 (cond
   ((= dn 8) (setq diam 13.5  rayo 20 ))
   ((= dn 10) (setq diam 17.2  rayo 25 ))
   ((= dn 15) (setq diam 21.3  rayo 27.5 ))
   ((= dn 21) (setq diam 21.3  rayo 38 )) ; dn15 inox
   ((= dn 20) (setq diam 26.9 rayo 28.5)) 
   ((= dn 25) (setq diam 33.7 rayo 38))
   ((= dn 32) (setq diam 42.4 rayo 47.5))
   ((= dn 40) (setq diam 48.3 rayo 57))
   ((= dn 50) (setq diam 60.3 rayo 76))  
   ((= dn 65) (setq diam 76.1 rayo 95))
   ((= dn 80) (setq diam 88.9 rayo 114.5))
   ((= dn 100) (setq diam 114.3 rayo 152.5))
   ((= dn 125) (setq diam 139.7 rayo 190.5))
   ((= dn 150) (setq diam 168.3 rayo 228.5))
   ((= dn 200) (setq diam 219.1 rayo 305))
   ((= dn 250) (setq diam 273 rayo 381))
   ((= dn 300) (setq diam 323.9 rayo 457))
   ((= dn 350) (setq diam 355.6 rayo 533.5))
   ((= dn 400) (setq diam 406.4 rayo 609.5))
   ((= dn 450) (setq diam 458 rayo 686))
   ((= dn 500) (setq diam 508 rayo 762))
   ((= dn 600) (setq diam 610 rayo 914))
   ( T      
     (cond
       ((and tuy:dia tuy:ray)
         (setq diam (getdist (strcat "\nDiametre Exterieur Tuyauterie ou 2 pts <" (rtos tuy:dia 2 4) ">: ")))
         (setq rayo (getdist (strcat "\nRayon coude ou 2 pts <" (rtos tuy:ray 2 4) ">: ")))
         (if diam (setq tuy:dia diam) (setq diam tuy:dia))
         (if rayo (setq tuy:ray rayo) (setq rayo tuy:ray))
       )
       (T
         (setq diam (getdist "\nDiametre Exterieur Tuyauterie ou 2 pts : "))
         (setq rayo (getdist "\nRayon coude , 2 pts ou <>: "))
         (if (= rayo nil) (setq rayo (* diam 1.1)))                                            
         (setq tuy:dia diam tuy:ray rayo)
       )
     )
   )
 )
 (setq ddia (/ diam 2))
 (if (not (> rayo ddia)) (setq rayo (* ddia 1.1)))
)

(defun tubage (ent pt / lent )
 ;change proprietes de l'axe
 (setq lent (entget ent))
 ;; si le code 62 pour la couleur est présent ... ;; Salut Gilles
 (if (assoc 62 lent)
   ;; ... le remplacer par un nouveau
   (setq lent (subst (cons 62 6)  ;;Nouvelle couleur  magenta
     (assoc 62 lent) lent)    
   )
   ;; sinon, en ajouter un
   (setq lent (append lent (list (cons 62 6))))  ;; magenta
 ) 
 ;; idem pour type de ligne
 (if (assoc 6 lent)
   (setq lent (subst (cons 6 "AXES2")  
     (assoc 62 lent) lent)    
   )
   (setq lent (append lent (list (cons 6 "AXES2"))))  
 )   
 (entmod lent)  
 (generetube ent pt)
)

(defun generetube (ent pt / circonftuy)
 (if (or (= tuy:ep nil) (= tuy:ep 0.0))
   (progn
     (command "_circle" "_none" pt ddia )
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)  ;; balayage
     (if circonftuy (entdel circonftuy))
   ) 
   (progn
     (command "_circle" "_none" pt ddia)
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if (= 2 (getvar "delobj"))(entdel ent))
     (if circonftuy (entdel circonftuy))
     (setq tubext (entlast))
     (command "_circle" "_none" pt (- ddia tuy:ep))
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if circonftuy (entdel circonftuy))
     (command "_subtract" tubext "" "_L" "")   
   )
 )
)

(defun descoude ( L1 L2 pt long)
 (command "_fillet" L1 L2)           ;; raccord
 (setq coude (entlast))
 (if (or del1 (if dminp (= (- long dminp) dmin) (= long dmin)))
   (entdel L1) (tubage L1 pt)   ; efface axe si longueur nulle ou tube
 )
 (setq del1 nil)
 (tubage coude pt)
)

(defun deterdmin ( / a a90 p)        ;; determine la distance mini pour placer un coude
 (if dmin (setq dminp dmin))                          ;;; dminp = dmin du coude precedent
 (if (= b (+ d01 d10)) (setq a180 t) (setq a180 nil)) ;; si angle 180 pas de coude mais prolongement
 (if (or (= d01 (+ b d10)) (= d10 (+ b d01)))
   (setq a0 t) (setq a0 nil)                           ;; si angle 0   pas possible  alors arret
 )
 (if (= (* b b) (+ (* d01 d01) (* d10 d10)))           ;; si angle 90  dmin = rayon
   (setq a90 t dmin rayo) (setq a90 nil)
 )
 (if (and (not a0) (not a90)(not a180))                 ;;; si autre alors calcul
   (progn 
     (setq p (/ (+ d01 d10 b) 2))   ;;; p=1/2 perimetre
     (setq a (abs (atan (sqrt (/ (* (- p d01)(- p d10)) (* p (- p b)))))))  ;; 1/2 angle
     (setq dmin (* (cos a) (/ rayo (sin a))))
   )
 )
)

(defun onfekoi (L1 L2 pt1 pt2 pt3 d1 d2)
 (cond
   (a180 (tubage L1 pt2))                                             ;; angle 180 pas de coude mais continu
   (a0 (tubage L1 pt2) (entdel L2) (setq p0 nil p1 nil))   ;; angle 0 conserve 1er segment ; efface 2eme et arret 
   ((and (not a0) (not a180))
     (if (> rayo 0)
       (cond
         ((and (if dminp (>= (- d1 dminp) dmin) (>= d1 dmin)) (>= d2 dmin) )   
           (descoude L1 L2 pt2 d1)                                    ;; ok longueur 
         )
         ((or (if dminp (< (- d1 dminp) dmin) (< d1 dmin))
             (< d2 dmin)
           )
           (correction L1 L2 pt1 pt2 pt3 d1 d2)          ;;;; trop court donc correction
         )
       )        
       (tubage L1 pt2)  ;;;  si rayon 0    pas de raccordement   ;; ne devrait plus etre utile
     )
   )
 )
)

(defun correction (L1 L2 pt1 pt2 pt3 d1 d2)  
 (setq lg (if dminp (+ dmin dminp) dmin))
 (if (< d1 lg)
   (progn          
     (setq pt1 (trans (cdr (assoc 10 (entget L1))) 0 1))   ;; retrouve 1er sommet
     (redefsommet pt1 pt2 d1 dmin)                              ;; redefini   2eme
     (entdel L1)                                                             ;; efface segment
     (command "_line" "_none" pt1 "_none" sbn "")  ;; le redessine  ; sbn = nouv sommet
     (setq L1 (entlast) )
     (command "_move" L2 "" "_none" pt2 "_none" sbn)  ;; deplace 2eme segment
     (setq pt2 sbn del1 t)
   )    ;;; progn
 )  ;;; if
 (cond
   ((> d2 dmin)        
     (setq pt3 (trans (cdr (assoc 11 (entget L2))) 0 1))        ;;; retrouve 3eme sommet
     (if (= dp t) (setq p1 pt3 p0 pt2) (setq p0 pt3 p1 pt2) )
     (descoude L1 L2 pt2 lg)  ;; pas modif ok
   )
   ((= d2 dmin)
     (descoude L1 L2 pt2 lg)  
     (entdel L2)
     (setq p0 nil p1 nil)     ;;; arret sur coude 
   )
   ((< d2 dmin)           ;; modification L2 
     (if (< d1 lg)
       (progn
         (setq pt2 sbn)
         (setq pt3 (trans (cdr (assoc 11 (entget L2))) 0 1))
         (setq d1 lg)
       )
     )
     (redefsommet pt2 pt3 d2 dmin)        
     (command "_move" L2 "" "_none" pt3 "_none" sbn)
     (descoude L1 L2 pt2 d1)    
     (entdel L2)
     (setq p0 nil p1 nil)     ;;; arret sur coude      
   )
 )
)

(defun redefsommet (sa sb ab dist / h a za zb z y x b bn hn ap psbn)
 (setq h (- (caddr sb)(caddr sa)))         ;;; hauteur triangle
 (if (= h 0.0)   ;; si parallele plan xy
   (progn
     (setq a (angle sa sb))
     (setq sbn (polar sa a dist))
   )
   ;; si vertical suivant axe Z
   (if (and (= (rtos (car sa) 2 1) (rtos (car sb) 2 1)) ;; probleme de precision avec deplacement ligne
       (= (rtos (cadr sa) 2 1) (rtos (cadr sb) 2 1))
     )
     (progn
       (setq za (caddr sa) zb (caddr sb))
       (if (> za zb)
         (setq z (- za dist))
         (setq z (+ za dist))
       )
       (setq x (car sa) y (cadr sa))
       (setq sbn (list x y z))                      ;;; nouv sommet b
     )
     ;; orientation quelconque
     (progn    
       (setq b (sqrt (- (* ab ab) (* h h))))    ;;; base triangle
       (setq hn (/ (* h dist) ab))                  ;;; nouvelle hauteur
       (setq bn (/ (* b dist) ab))                  ;;; nouvelle base
       (setq ap (angle sa sb))                  ;;; angle projeté de ab
       (setq psbn (polar sa ap bn))          ;;; projection nouv sommet b
       (setq z (+ (caddr sa) hn))               ;;; z nouv pb
       (setq x (car psbn))
       (setq y (cadr psbn))
       (setq sbn (list x y z))                      ;;; nouv sommet b
     )      
   ) 
 )
)

(defun c:TUY (/ p0 p1 L01 L10 coude mtrim ent eptub )      
 (diam-t3d)
 (setq p1 nil dmin nil dminp nil L10 nil del1 nil)
 (if (not (tblsearch "ltype" "axes2")) (command "_-linetype" "_l" "AXES2" "" ""))
 (setvar "FILLETRAD" rayo) (setq mtrim (getvar "trimmode"))(setvar "trimmode" 1)                       
 (if (not tuy:ep) (setq tuy:ep 0))
 (setq p0 "Epaisseur")
 (while (= p0 "Epaisseur")
   (initget "Epaisseur")
   (setq p0 (getpoint (strcat "\nPOINT DE DEPART ,[Epaisseur] = "(rtos tuy:ep 2 4)" :")))
   (if (= p0 "Epaisseur")
     (progn
       (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (setq tuy:ep eptub))
     ) 
   )
 )
 (while p0  
   (if p1  (setq pd p1))                                        ;;; pd  point de depart
   (setq p1 (getpoint p0 "\nPoint suivant  : ")) 
   (if p1
     (progn
       (command "_line" "_none" p0 "_none" p1 "")
       (setq L01 (entlast) d01 (distance p0 p1) dp t)       ;;;  dp = dernier point p1   
       (if l10      ;;; si plusieurs boucles ;;;;;;;
         (progn
           (setq b (distance p1 pd))                              ;;; b  base triangle
           (deterdmin) 
           (onfekoi L10 L01 pd p0 p1 d10 d01)           
         )
       ) 
       (if p0 (setq pd p0))
       (if p1  (setq p0 (getpoint p1 "\nPoint suivant  : ")))
       (if p0
         (progn 
           (command "_line" "_none" p1 "_none" p0 "")
           (setq l10 (entlast) d10 (distance p1 p0) dp nil)
           (setq b (distance p0 pd))
           (deterdmin) 
           (onfekoi L01 L10 pd p1 p0 d01 d10) 
         ) 
       )
     )
     ;;; si p1 nil
     (progn
       (if (and l10 p0 ) (tubage l10 p0))   ;; si plusieurs boucles ;;;;;;; 
       (setq p0 nil)      
     )
   )   ;;;; fin if p1   
 )   ;;; fin while 
 (if (and l01 p1)(tubage l01 p1))     ;;;; termine dernier tronçon
 (setvar "trimmode" mtrim)
 (princ)
)

(defun c:TU (/ sel typent ent pt eptub )
 (diam-t3d)
 (if (not tuy:ep) (setq tuy:ep 0))
 (initget "Epaisseur") 
 (while
   (setq sel (entsel 
(strcat "\nSélectionner l'AXE du TUBE ,[Epaisseur] = "(rtos tuy:ep 2 4)" :"))) 
   (if (= sel "Epaisseur")
     (progn
       (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (setq tuy:ep eptub))
     ) 
     (progn
       (setq typent (cdr (assoc 0 (entget (setq ent(car sel))))))
       (cond
         ((or (= typent "LINE")(= typent "ARC")(= typent "POLYLINE")(= typent "LWPOLYLINE") 
             (= typent "ELLIPSE")(= typent "CIRCLE")(= typent "SPLINE")(= typent "HELIX")
           )
           (setq pt (cadr sel))
           (generetube ent pt)
         )
       )
     )
   )  ;; if
 )
 (princ)
)
(prompt "\n Taper : TUY pour tuyau 3D ou : TU pour tube 3D suivant un axe")
(princ)

 

[Edité le 19/8/2008 par usegomme]

  • Réponses 68
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

  • 1 an après...
Posté(e)

Salut, pour que lisp fonctionne correctement quelque soit la valeur de la variable DELOBJ 0 , 1 ou 2 , j'ai corrigé la fonction "generetube" et la commande " TU ".

(avec -2 ce n'est pas correct).

 

(defun generetube (ent pt / circonftuy)
 (if (or (= tuy:ep nil) (= tuy:ep 0.0))
   (progn
     (command "_circle" "_none" pt ddia )
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)  ;; balayage
     (if circonftuy (entdel circonftuy))
   ) 
   (progn
     (command "_circle" "_none" pt ddia)
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if (= 2 (getvar "delobj"))(entdel ent))
     (if circonftuy (entdel circonftuy))
     (setq tubext (entlast))
     (command "_circle" "_none" pt (- ddia tuy:ep))
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if circonftuy (entdel circonftuy))
     (command "_subtract" tubext "" "_L" "")   
   )
 )
) 

 

(defun c:TU (/ sel typent ent pt eptub )
 (diam-t3d)
 (if (not tuy:ep) (setq tuy:ep 0))
 (initget "Epaisseur") 
 (while
   (setq sel (entsel 
(strcat "\nSélectionner l'AXE du TUBE ,[Epaisseur] = "(rtos tuy:ep 2 4)" :"))) 
   (if (= sel "Epaisseur")
     (progn
       (setq eptub 
(getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (setq tuy:ep eptub))
     ) 
     (progn
       (setq typent (cdr (assoc 0 (entget (setq ent(car sel))))))
       (cond
         ((or (= typent "LINE")(= typent "ARC")(= typent "POLYLINE")(= typent "LWPOLYLINE") 
             (= typent "ELLIPSE")(= typent "CIRCLE")(= typent "SPLINE")(= typent "HELIX")
           )
           (setq pt (cadr sel))
           (generetube ent pt)
         )
       )
     )
   )  ;; if
 )
 (princ)
) 

 

  • 2 semaines après...
Posté(e)

Bjr,

 

Super boulot chapeau bas :)

Ces Lisps vont bien me servir.

 

Juste une petite chose, une boite de dialogue ne serait pas de refus pour la convivialité et la facilité d'utilisation ...

Sans doute plus facile à dire qu'à faire ... :cool:

 

Quoiqu'il en soit merçi encore

 

[Edité le 27/8/2008 par thry0]

Posté(e)

Salut , j'ai un peu du mal à faire des cases de dialogue , je ne suis qu'un médiocre lispeur.

Ceci dit , les diametres et options sont disponibles au bouton droit , ça me semble suffisant.

Il est vrai que si tu utilises les épaisseurs de tube , il faut à chaque changement de diametre redéfinir l'épaisseur.Perso je préfère pas ,c'est bien plus simple à mettre en oeuvre , mais je sais qu'ils y en a qui ont besoin de connaitre le poids de la ferraille.

Si necessaire , j'ai déjà fait une version qui permet d'avoir des dimensions suivant une norme, mais c'est juste au niveau de la structure du lisp , car je ne me suis pas amusé à rentrer des normes qui ne me servent pas.

 

Posté(e)

Et pourtant c'est vrai, si tu étais connaisseur tu verrais que je suis à des années-lumières de nos ténors de Cadxp . Je ne suis que dans le registre lispeur-bricoleur , mais c'est tout de même bien pratique.

A+

 

Posté(e)

Bonjour,

ton lisp tuy est pas mal, mais est ce possible que tu y integre l'ep des tuyaux? et si possible la possibilité de ajouter un calo ou non avec son ep

 

avec ton pgm c'est possible d'extraire le nombre de coude et de donner une nuance et tout ca , merci

 

Posté(e)

Salut , je vois que tes demandes son toujours dans le même état d'esprit.

Tu as du mal à comprendre qu'on ne peut pas te faire un logiciel de tuyauterie et comme je l'ai dit juste au dessus , je suis bricoleur, pas programmeur.

Dans le lisp ,il y a l'option épaisseur , mais il faut la redéfinir pour chaque changement de diamètre.

Sinon il faudra en passer par les normes et définir une épaisseur par diamètre , ça c'est possible.

Intégré le calo au lisp serait compliqué , mais il est possible de faire qlq chose à part.

A voir selon quelle méthode.

Quant au comptage ,il ne faut pas y penser, je ne sais d'ailleurs pas comment faire.

Posté(e)

Bjr,

 

Sinon il faudra en passer par les normes et définir une épaisseur par diamètre

 

Pour ma part, j'utilise des tubes en pieds pouces et

pour un diamètre de tube donné, il peut exister plus d'une cinquantaine d'épaisseur possible ...

 

Bon courage ! ;)

  • 3 mois après...
Posté(e)

Salut , bon pour répondre à la demande d' etude0 j'ai intégré l' option calorifuge au lisp ,et c'est par son épaisseur que l'on définit sa présence ou non (épaisseur >0 = oui).

On peut aussi dessiner le calo seul pour le rajouter sur une tuyauterie soit en sélectionnant un axe ou par 2 points. commande : CALOS

Nota: un calque de couleur 9 est créer automatiquement pour le calo.

Si le calque courant est "VAPEUR" le calque du calo sera "VAPEUR-CALO".

J'ai aussi rajouté l'option : Norme , pour l'instant iln'y en a que 2.

Il y a toujours la cde : TU pour dessiner le tuyau en sélectionnant des axes et qui est complétée par la cde : CDT qui joint 2 axes et place un coude.

Il ya aussi TSA pour ceux qui ne veulent pas d'axe dans leurs tuyaux .bof!

Rappel c'est l'épaisseur donnée au tube qui définie si le tuyau et le calo sont dessinés en creux ou en plein. (une épaisseur négative de tube donne un tube plein et un calo creux).

Rappel également, un tuyau dessiné plein s'étire avec les poignées (trés pratique).

J'ai été long , aussi j'espère qu'etude0 n'a pas changé de métier entre temps .

 

;; usegomme 5-2-2007   8-4-2009  version 2.02
;; Tuyau 3d pour autocad à partir de version 2007
;; et avec ou sans calorifuge

(defun choixnorme ()
 (initget 1 "ISO3D ISO5D")   ;;;;   bit refus reponse nulle  
 (setq norme (getkword "\nChoisir une Norme [iSO3D/ISO5D] : ") )                                        
)

(Defun getDNtuy( a b d e f g / c) 
 ;(setq c (strcat  a d g "<" b ">" e f " "))
 (setq c (strcat  a d g "<" b ">" " "))
 (setq c (getreal  c))
)

(defun diam-t3d (/ dn diam)    
 (setq dn "Norme")
 (if (not norme) (setq norme "ISO3D"))  ;; par defaut
 (if (not epcalo)(setq epcalo 0))       ;; par defaut    
 ;(setq msgdn " DN:")
 (while (or(= dn "Norme")(= dn "Calo"))
   (if (> epcalo 0) (setq msgcalo "CALO ep" msgecalo (rtos epcalo 2 0))
     (setq msgcalo " Sans" msgecalo " calo")
   )
   (cond 
     ((= norme "ISO3D") (setq msgdn " DN:")
       (if
         (and (/= iso3d:dn "Autre")(/= iso3d:dn nil))
         (setq dn (rtos iso3d:dn 2 0)) (setq dn "Autre")                  
       ) 
       (setq choixdn
         (strcat "\n" msgcalo msgecalo " " norme " DN[8/10/15/21/20/25/32/40/50/65/80/100/125/150/200/250/300/350/400/450/500/600/Autre/Calo/Norme]")
       )                          
     )
     
     ((= norme "ISO5D") (setq msgdn " DN:")
       (if
         (and (/= iso5d:dn "Autre")(/= iso5d:dn nil))
         (setq dn (rtos iso5d:dn 2 0))(setq dn "Autre")                   
       )  
       (setq choixdn
         (strcat "\n" msgcalo msgecalo " " norme " DN[20/25/32/40/50/65/80/100/125/150/200/250/300/350/Autre/Calo/Norme]")
       )                                       
     ) 
     
   ) ;; fin cond
   
   (initget "Autre Norme Calo")
   (setq dn (getDNtuy choixdn dn norme  msgcalo msgecalo msgdn ))
   (if (= dn "Norme") (choixnorme))
   (if (= dn "Calo") 
     (if (setq epc (getdist (strcat "\nEpaisseur calo ou 2 pts <" (rtos epcalo 2 0) ">: ")))
       (setq epcalo epc epc nil)
     )
   )     
 ) ;; while dn= norme
 
 (cond
   ((= norme "ISO3D")(setq surep 0)
     (cond
       ((and (/= dn "A") (/= dn nil))(setq iso3d:dn dn))
       ((= dn nil) (if iso3d:dn (setq dn iso3d:dn)))       
     )      
     (cond
       ((= dn 8) (setq diam 13.5  rayo 20 ))
       ((= dn 10) (setq diam 17.2  rayo 25 ))
       ((= dn 15) (setq diam 21.3  rayo 28 )) ;27
       ((= dn 21) (setq diam 21.3  rayo 38 )) ; dn15 inox
       ((= dn 20) (setq diam 26.9  rayo 28.5)) 
       ((= dn 25) (setq diam 33.7 rayo 38)) 
       ((= dn 32) (setq diam 42.4  rayo 47.5)) 
       ((= dn 40) (setq diam 48.3 rayo 57))
       ((= dn 50) (setq diam 60.3 rayo 76))   
       ((= dn 65) (setq diam 76.1 rayo 95))
       ((= dn 80) (setq diam 88.9 rayo 114.5))
       ((= dn 100)(setq diam 114.3 rayo 152.5)) 
       ((= dn 125) (setq diam 139.7 rayo 190.5))  
       ((= dn 150) (setq diam 168.3 rayo 228.5)) 
       ((= dn 200) (setq diam 219.1 rayo 305))  
       ((= dn 250) (setq diam 273 rayo 381))  
       ((= dn 300) (setq diam 323.9 rayo 457))  
       ((= dn 350) (setq diam 355.6 rayo 533.5)) 
       ((= dn 400) (setq diam 406.4 rayo 609.5))
       ((= dn 450) (setq diam 458 rayo 686))
       ((= dn 500) (setq diam 508 rayo 762))
       ((= dn 600) (setq diam 610 rayo 914)) 
       (t  (autrediametre) )
     )     
   )
   
   ((= norme "ISO5D")(setq surep 0)
     (cond
       ((and (/= dn "A") (/= dn nil))(setq iso5d:dn dn))
       ((= dn nil) (if iso5d:dn (setq dn iso5d:dn)))     
     )
     (cond
       ((= dn 20) (setq diam 26.9  rayo 57.5)) 
       ((= dn 25) (setq diam 33.7 rayo 72.5)) 
       ((= dn 32) (setq diam 42.4  rayo 92.5)) 
       ((= dn 40) (setq diam 48.3 rayo 109.5)) 
       ((= dn 50) (setq diam 60.3 rayo 137.5))   
       ((= dn 65) (setq diam 76.1 rayo 175)) 
       ((= dn 80) (setq diam 88.9 rayo 207.5)) 
       ((= dn 100) (setq diam 114.3 rayo 270)) 
       ((= dn 125) (setq diam 139.7 rayo 330))  
       ((= dn 150) (setq diam 168.3 rayo 390)) 
       ((= dn 200) (setq diam 219.1 rayo 515))  
       ((= dn 250) (setq diam 273 rayo 650))  
       ((= dn 300) (setq diam 323.9 rayo 770))  
       ((= dn 350) (setq diam 355.6 rayo 850)) 
       (t  (autrediametre) )
     )   
   )       
   
 ) ; fin cond dn suivant norme
 (setq ddia (/ diam 2))
 (if (not (> rayo (+ ddia surep))) (setq rayo (* (+ ddia surep) 1.01)))  
)

(defun autrediametre ()
 (setq surep 0)
 (if (not tuy:dia)(if ddia (setq tuy:dia (* ddia 2))(setq tuy:dia 8)))   
 (setq diam (getdist (strcat "\nDiametre Exterieur Tuyauterie ou 2 pts <" (rtos tuy:dia 2 4) ">: ")))
 (if diam (setq tuy:dia diam) (setq diam tuy:dia))
 (if (not tuy:ray)(setq tuy:ray (* diam 1.01)))
 (setq rayo (getdist (strcat "\nRayon coude ou 2 pts <" (rtos tuy:ray 2 4) ">: ")))
 (if rayo (setq tuy:ray rayo) (setq rayo tuy:ray))
) 

(defun tubage (ent typ / lent)   
 ;change proprietes de l'axe
 (setq lent (entget ent))
 ;; si le code 62 pour la couleur est présent ...
 (if (assoc 62 lent)
   ;; ... le remplacer par un nouveau
   (setq lent (subst (cons 62 6)  ;;Nouvelle couleur  magenta
     (assoc 62 lent) lent)    
   )
   ;; sinon, en ajouter un
   (setq lent (append lent (list (cons 62 6))))  ;; magenta
 ) 
 ;; idem pour type de ligne
 (if (assoc 6 lent)
   (setq lent (subst (cons 6 "AXES2")  
     (assoc 62 lent) lent)    
   )
   (setq lent (append lent (list (cons 6 "AXES2"))))  
 )   
 (entmod lent)
 (setq pt (trans (cdr (assoc 10 (entget ent))) 0 1))
 (generetube ent pt typ)
)

(defun generetube (ent pt typ / circonftuy)
 (if (or (= tuy:ep nil) (<= tuy:ep 0.0))
   (progn
     (command "_circle" "_none" pt)
     (if (= typ 1) (command (+ ddia surep)) (command ddia))
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)  ;; balayage
     (if circonftuy (entdel circonftuy))
     (if (> epcalo 0) (progn (if (= 2 (getvar "delobj"))(entdel ent))
         (if (= (cdr (assoc 0 (setq lent (entget ent)))) "ARC")
           (if (> (cdr (assoc 40 lent)) (+ ddia epcalo))
             (if (< tuy:ep 0.0)(calocreux ent pt)(caloplein ent pt))
           )
           (if (< tuy:ep 0.0)(calocreux ent pt)(caloplein ent pt))
         )        
       )
     ) 
   ) 
   (progn
     (command "_circle" "_none" pt)
     (if (= typ 1) (command (+ ddia surep)) (command ddia))     
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if (= 2 (getvar "delobj"))(entdel ent))
     (if circonftuy (entdel circonftuy))
     (setq tubext (entlast))
     (command "_circle" "_none" pt (- ddia tuy:ep))
     (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
     (command "_sweep" "_L" "" ent)
     (if circonftuy (entdel circonftuy))
     (command "_subtract" tubext "" "_L" "")
     (if (> epcalo 0) (progn (if (= 2 (getvar "delobj"))(entdel ent))
         (if (= (cdr (assoc 0 (setq lent (entget ent)))) "ARC")
           (if (> (cdr (assoc 40 lent)) (+ ddia epcalo))(calocreux ent pt))
           (calocreux ent pt)
         )        
       )
     )           
   )
 )
)

(defun caloplein (ent pt / circonftuy calo)
 (command "_circle" "_none" pt(+ ddia epcalo))
 (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
 (command "_sweep" "_L" "" ent)  ;; balayage
 (setq calo (entlast))
 (if circonftuy (entdel circonftuy))
 (command "_change" calo "" "_p" "_layer" calqcalo "")
)

(defun calocreux (ent pt / circonftuy calo)
 (command "_circle" "_none" pt(+ ddia epcalo))
 (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
 (command "_sweep" "_L" "" ent)  ;; balayage 
 (if (= 2 (getvar "delobj"))(entdel ent))
 (if circonftuy (entdel circonftuy))
 (setq tubext (entlast))
 (command "_circle" "_none" pt ddia) 
 (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil))
 (command "_sweep" "_L" "" ent)
 (if circonftuy (entdel circonftuy))
 (command "_subtract" tubext "" "_L" "")
 (setq calo (entlast))
 (command "_change" calo "" "_p" "_layer" calqcalo "")
)


(defun descoude ( L1 L2 pt long)
 (command "_fillet" L1 L2)
 (setq coude (entlast))
 (if (or del1 (if dminp (= (- long dminp) dmin) (= long dmin)))
   (entdel L1) (tubage L1 lg)
 )
 (setq del1 nil)
 (tubage coude cd)
)

(defun deterdmin ( / a a90 p)        ;; determine la distance mini pour placer un coude
 (if dmin (setq dminp dmin))                              ;;; dminp = dmin du coude precedent
 (if (= b (+ d01 d10)) (setq a180 t) (setq a180 nil))      ;; si angle 180 pas de coude mais prolongement
 (if (or (= d01 (+ b d10)) (= d10 (+ b d01)))
   (setq a0 t) (setq a0 nil)                               ;; si angle 0   pas possible  alors arret
 )
 (if (= (* b b) (+ (* d01 d01) (* d10 d10)))                ;; si angle 90  dmin = rayon
   (setq a90 t dmin rayo) (setq a90 nil)
 )
 (if (and (not a0) (not a90)(not a180))                       ;;; si autre alors calcul
   (progn 
     (setq p (/ (+ d01 d10 b) 2))   ;;; p=1/2 perimetre
     (setq a (abs (atan (sqrt (/ (* (- p d01)(- p d10)) (* p (- p b)))))))  ;; 1/2 angle
     (setq dmin (* (cos a) (/ rayo (sin a))))
   )
 )
)

(defun onfekoi (L1 L2 pt1 pt2 pt3 d1 d2)
 (cond
   (a180 (tubage L1 lg))
   (a0 (tubage L1 lg) (entdel L2) (setq p0 nil p1 nil))
   ((and (not a0) (not a180))
     (if (> rayo 0)
       (cond
         ((and (if dminp (>= (- d1 dminp) dmin) (>= d1 dmin)) (>= d2 dmin) )
           (descoude L1 L2 pt2 d1)            
         )
         ((or (if dminp (< (- d1 dminp) dmin) (< d1 dmin))
             (< d2 dmin)
           )
           (correction L1 L2 pt1 pt2 pt3 d1 d2)  
         )
       )        
       (tubage L1 lg)  ;;;  si rayon 0    pas de raccordement
     )
   )
 )
)

(defun correction (L1 L2 pt1 pt2 pt3 d1 d2)  
 (setq lg (if dminp (+ dmin dminp) dmin))
 (if (< d1 lg)
   (progn          
     (setq pt1 (trans (cdr (assoc 10 (entget L1))) 0 1))
     (redefsommet pt1 pt2 d1 dmin)
     (entdel L1)
     (command "_line" "_none" pt1 "_none" sbn "")
     (setq L1 (entlast) )
     (command "_move" L2 "" "_none" pt2 "_none" sbn)
     (setq pt2 sbn del1 t)
   )    ;;; progn
 )  ;;; if
 (cond
   ((> d2 dmin)        
     (setq pt3 (trans (cdr (assoc 11 (entget L2))) 0 1))
     (if (= dp t) (setq p1 pt3 p0 pt2) (setq p0 pt3 p1 pt2) )
     (descoude L1 L2 pt2 lg)  ;; pas modif ok
   )
   ((= d2 dmin)
     (descoude L1 L2 pt2 lg)  
     (entdel L2)
     (setq p0 nil p1 nil)     ;;; arret sur coude 
   )
   ((< d2 dmin)           ;; modification L2 
     (if (< d1 lg)
       (progn
         (setq pt2 sbn)
         (setq pt3 (trans (cdr (assoc 11 (entget L2))) 0 1))
         (setq d1 lg)
       )
     )
     (redefsommet pt2 pt3 d2 dmin)        
     (command "_move" L2 "" "_none" pt3 "_none" sbn)
     (descoude L1 L2 pt2 d1)    
     (entdel L2)
     (setq p0 nil p1 nil)     ;;; arret sur coude      
   )
 )
)

(defun redefsommet (sa sb ab dist / h a za zb z y x b bn hn ap psbn)
 (setq h (- (caddr sb)(caddr sa)))         ;;; hauteur triangle
 (if (= h 0.0)   ;; si parallele plan xy
   (progn
     (setq a (angle sa sb))
     (setq sbn (polar sa a dist))
   )
   ;; si vertical suivant axe Z
   (if (and (= (rtos (car sa) 2 1) (rtos (car sb) 2 1)) ;; probleme de precision avec deplacement ligne
       (= (rtos (cadr sa) 2 1) (rtos (cadr sb) 2 1))
     )
     (progn
       (setq za (caddr sa) zb (caddr sb))
       (if (> za zb)
         (setq z (- za dist))
         (setq z (+ za dist))
       )
       (setq x (car sa) y (cadr sa))
       (setq sbn (list x y z))                      ;;; nouv sommet b
     )
     ;; orientation quelconque
     (progn    
       (setq b (sqrt (- (* ab ab) (* h h))))    ;;; base triangle
       (setq hn (/ (* h dist) ab))                  ;;; nouvelle hauteur
       (setq bn (/ (* b dist) ab))                  ;;; nouvelle base
       (setq ap (angle sa sb))                  ;;; angle projeté de ab
       (setq psbn (polar sa ap bn))          ;;; projection nouv sommet b
       (setq z (+ (caddr sa) hn))               ;;; z nouv pb
       (setq x (car psbn))
       (setq y (cadr psbn))
       (setq sbn (list x y z))                      ;;; nouv sommet b
     )      
   ) 
 )
)

(defun creercalqueCALO ();creer calque pour calorifuge
 (setq calqcalo (strcat (getvar "clayer") "-CALO"))
 (if (not (tblsearch "layer" calqcalo))
    ; s'il n'existe pas le calque est créé avec la couleur 9
   (command "_-layer" "_n" calqcalo "_co" "9" calqcalo "")
 )
)

(defun c:TUY (/ p0 p1 L01 L10 coude mtrim ent eptub)      
 (diam-t3d)
 (setq p1 nil dmin nil dminp nil L10 nil del1 nil cd 1 lg 0)
 (if (not (tblsearch "ltype" "axes2")) (command "_-linetype" "_l" "AXES2" "" ""))
 (if (> epcalo 0)(creercalquecalo))  
 (setvar "FILLETRAD" rayo) (setq mtrim (getvar "trimmode"))(setvar "trimmode" 1)                       
 (if (not tuy:ep) (setq tuy:ep 0))
 (setq p0 "Epaisseur")
 (while (= p0 "Epaisseur")
   (initget "Epaisseur")
   (setq p0 (getpoint (strcat "\nPOINT DE DEPART ou  = "(rtos tuy:ep 2 4)"  :")))
   (if (not p0) (setq p0 "Epaisseur"))
   (if (= p0 "Epaisseur")
     (progn
       (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (if (< eptub ddia)(setq tuy:ep eptub)))
     ) 
   )
 )
 (while p0  
   (if p1  (setq pd p1))                                        ;;; pd  point de depart
   (setq p1 (getpoint p0 "\nPoint suivant  : ")) 
   (if p1
     (progn
       (command "_line" "_none" p0 "_none" p1 "")
       (setq L01 (entlast) d01 (distance p0 p1) dp t)       ;;;  dp = dernier point p1        
       (if l10      ;;; si plusieurs boucles ;;;;;;;
         (progn
           (setq b (distance p1 pd))                         ;;; b  base triangle
           (deterdmin) 
           (onfekoi L10 L01 pd p0 p1 d10 d01)           
         )
       ) 
       (if p0 (setq pd p0))
       (if p1  (setq p0 (getpoint p1 "\nPoint suivant  : ")))
       (if p0
         (progn 
           (command "_line" "_none" p1 "_none" p0 "")
           (setq l10 (entlast) d10 (distance p1 p0) dp nil)
           (setq b (distance p0 pd))
           (deterdmin) 
           (onfekoi L01 L10 pd p1 p0 d01 d10) 
         ) 
       )
     )
     ;;; si p1 nil
     (progn
       (if (and l10 p0 ) (tubage l10 lg))   ;; si plusieurs boucles ;;;;;;; 
       (setq p0 nil)      
     )
   )   ;;;; fin if p1   
 )   ;;; fin while
 (if (and l01 p1)(tubage l01 lg))     ;;;; termine dernier tronçon
 (setvar "trimmode" mtrim)
 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:cdt (/ lo )   ;;  pour raccorder 2 axes et tracer un coude de tuy.
 (diam-t3d)
 (if (> epcalo 0)(creercalquecalo))
 (setq mtrim (getvar "trimmode"))
 (setvar "FILLETRAD" rayo) (setvar "trimmode" 1)
 (setq lo (entlast))
 (command "_fillet")
 (while (not (zerop (getvar "cmdactive")))(command pause))
 (cond 
   ((not (equal lo (setq coude (entlast))))
     (setq pt (trans (cdr (assoc 10 (entget coude))) 0 1))
     (generetube coude pt 1)
   )
 )
 (while (not (equal coude (setq lo (entlast))))
   (command "_fillet")
   (while (not (zerop (getvar "cmdactive")))(command pause))
   (cond ((not (equal lo (setq coude (entlast))))
       (setq pt (trans (cdr (assoc 10 (entget coude))) 0 1))
       (generetube coude pt 1)
     )
   )
 )
 (setvar "trimmode" mtrim)
 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; calo seul
;; Pour ne tracer que le calorige par sélection de l'axe ou par deux points
(defun c:calos (/ sel typent ent pt eptub axetemp rep)
 (diam-t3d)
 (while (or (>= 0 epcalo)(not epcalo))
   (setq epcalo (getdist "\nEpaisseur calorifuge ou 2 pts : "))
 )
 (creercalquecalo)
 (if(= tuy:ep nil) ; si utilisation avant lisp tuy
   (progn (initget "Creux Plein")
     (setq rep (getstring "\n Calo dessiné [/Creux]:"))
     (if (or (= rep "")(= rep "Plein")) (setq tuy:ep 0.0) (setq tuy:ep -1))
   )
 )
 (setq sel t)
 (while sel
   (setq sel (entsel "\nSélectionner l'AXE du TUBE ou par < 2 Points> :"))
   (if  (not sel) 
     (progn (setq sel t)
       (setq p1 (getpoint  "\nPoint de départ  : "))
       (if p1 (setq p2 (getpoint p1 "\nPoint final  : ")))
       (if (and p1 p2)
         (progn
           (command "_line" "_none" p1 "_none" p2 "")
           (setq axetemp (entlast))(setq pt (trans (cdr (assoc 10 (entget axetemp))) 0 1))
           (if (or (= tuy:ep nil) (= tuy:ep 0.0))
             (caloplein axetemp pt )
             (calocreux axetemp pt )
           )
           (if (/= 2 (getvar "delobj"))(entdel axetemp))
         )
         (setq sel nil)
       ) 
     )
     (progn
       (setq typent (cdr (assoc 0 (entget (setq ent(car sel))))))
       (cond
         ((or (= typent "LINE")(= typent "ARC")(= typent "POLYLINE")(= typent "LWPOLYLINE") 
             (= typent "ELLIPSE")(= typent "CIRCLE")(= typent "SPLINE")(= typent "HELIX")
           )
           (setq pt (cadr sel))
           (if (or (= tuy:ep nil) (= tuy:ep 0.0))
             (progn 
               (if (> epcalo 0) (progn 
                   (if (= (cdr (assoc 0 (setq lent (entget ent)))) "ARC")
                     (if (> (cdr (assoc 40 lent)) (+ ddia epcalo))(caloplein ent pt))
                     (caloplein ent pt)
                   )        
                 )
               )     
             )
             (progn 
               (if (> epcalo 0) (progn 
                   (if (= (cdr (assoc 0 (setq lent (entget ent)))) "ARC")
                     (if (> (cdr (assoc 40 lent)) (+ ddia epcalo))(calocreux ent pt))
                     (calocreux ent pt)
                   )        
                 )
               )
             )      
           )             
         )
       )
     )
   )  ;; if
 )
 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; génère le tuyau à partir de l'axe sélectionné
(defun c:TU (/ sel typent ent pt eptub )
 (diam-t3d)
 (if (> epcalo 0)(creercalquecalo))
 (if (not tuy:ep) (setq tuy:ep 0))
 (initget "Epaisseur") 
 (while
   (setq sel (entsel (strcat "\nSélectionner l'AXE du TUBE ou E,[Epaisseur] = "(rtos tuy:ep 2 4)" :"))) 
   (if (= sel "Epaisseur")
     (progn
       (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: ")))
       (if eptub (if (< eptub ddia)(setq tuy:ep eptub)))
     ) 
     (progn
       (setq typent (cdr (assoc 0 (entget (setq ent(car sel))))))
       (cond
         ((or (= typent "LINE")(= typent "ARC")(= typent "POLYLINE")(= typent "LWPOLYLINE") 
             (= typent "ELLIPSE")(= typent "CIRCLE")(= typent "SPLINE")(= typent "HELIX")
           )
           (setq pt (cadr sel))
           (generetube ent pt nil)
         )
       )
     )
   )  ;; if
 )
 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;; TSA  tuyau sans axe
(defun erreurtsa (msg)
 (setvar "delobj" delobjet)
 (setq *error* m:err m:err nil)
 (princ)
)
(defun c:tsa ()
 (setq m:err *error* *error* erreurtsa)
 (setq delobjet (getvar "delobj"))
 (setvar "delobj" 2)
 (c:tuy)
 (setvar "delobj" delobjet)
 (setq *error* m:err m:err nil)
 (princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(prompt "\nCommandes dispo: TUY tuyau 3D,TSA sans axe,TU depuis axe,CDT coude,CALOS seul")
(princ) 

[Edité le 12/1/2009 par usegomme]

 

[Edité le 8/4/2009 par usegomme]

Posté(e)

 

Petite info est ce possible que lorsque tu étires ton tube ton axe suit ton tuyau?

Avec ton Lisp ce n'est pas possible de faire des réduction pense tu que tu serais capable?

 

pour rendre ton lisp encore plus intelligent il serait sympa d'intégrer des attributs modifiable

Nuance Norme Ect:

Ex si tu traces une polyligne avec 2 coudes qu'il te dise par ex coude type 3D90° Qté 2x Nuance AE250B et qu'il te sorte le débit matière tube - 2 rayons de coude

 

Et la tu sera digne d'elaborer ton Pgm de tuyauterie

 

Tout ce que je peux faire pour t'aider c'est de te donner des élements en 3D

Bloc avec atribut

 

Et sinon encore un grand Merci tout fonctionne tres bien

Posté(e)

Re

 

Tu as le lien pour le lisp à coté du trombone en bas du message, ou les autres en bleu dans le corps dudit message.

J'ai juste donné l'info car je pense qu'elle pourrait vous être utile. Pour ce qui concerne son utilisation, étant incompétent dans la matière, le plus simple est de s'adresser à son auteur, ou de continuer sur le post du lien que j'ai indiqué.

 

@+

 

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Pas de doute , ils sont fort les programmeurs, il me faudrait pouvoir télécharger un peu de leurs méninges pour faire tout ce que tu veux , etude0. Pour l'instant j' avance à petits pas de bricoleur et je ne sais pas ce que je peux arriver à faire .

D'autre part mon lisp n'utilise pas de bloc et je ne connais absoluement rien aux informations

intelligentes pouvant être liées aux entités.

Pour étirer manuellement axe et tube en même temps ,il faut le faire avec les poignées mais à condition que le tube soit dessiné plein.

D'autre part j'ai peu de lisp sur cadxp , car c'est déjà trés bien fourni par nos excellents lispeurs comme Patrick_35 par exemple, et que j'ai bien du mal à amener qlq chose d'intéressant, d'autant que je n'ai pas leur niveau et qu' ayant arrêté le lisp pendant plusieurs années mes lisps sont devenus + ou - obsolete avec l'évolution d'autocad , ou souvent ils sont liés au menu et spécifiques et donc difficile à partager sans un travail d'adaptation qui prend beaucoup de temps.

 

  • 4 semaines après...
Posté(e)

Bonjour et bravo à Usegomme pour son application sur le tracé de tuyauterie en 3D. C'est clair, bien écrit et surtout, ça marche.

Moi-même étant bricoleur lisp depuis assez longtemps, je me propose de compléter le programme en y ajoutant des boîtes de dialogue.

Si cela interesse qqun de faire évoluer cette belle application, je suis partant.

Bien cordialement,

 

TECNO arte

Posté(e)

Salut TECNO_arte

Pourquoi pas la boite de dialogue ! Si tu peux faire qlq chose de pratique .

Comme je maitrise mal la question, c'est à toi de voir , mais ça peut être très intéressant.

A+

Posté(e)

Une boite de dialogue qui permet de cocher des cases, de choisir dans une liste avec sa souris plutôt que de se servir de son clavier pour écrire des options. Améliorer l'ergonomie comme on dit. Je m'y mets dès que j'ai un peit moment. A+.

  • 3 semaines après...

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é