Aller au contenu

mikl63

Membres
  • Compteur de contenus

    423
  • Inscription

  • Dernière visite

  • Jours gagnés

    1

Tout ce qui a été posté par mikl63

  1. Salut, version 2014 : AutoCAD et AutoCAD LT 2014 (et antérieures) ne peuvent pas s'installer sur Windows 10, pas compatible et pas supporté par Autodesk. Ces anciennes versions sont à installer sur windows 7 et pour certaines sur 8.1. Source : https://www.aplicit.com/autocad-windows-10-compatibilite/
  2. C'est tout bête et pourtant si simple
  3. Salut à tous ! Après des années sur nova plancal, je reviens à Autocad et en version 2020. Celui qui est installé sur ma machine m'a demandé beaucoup de réglages et là, je ne trouve plus la fonction insérer un bloc dans l'onglet insertion...C'est normal ça ? en attendant, j'ai mis mon bloc en xref mais où est donc passée ma fonction ? Déja que mes outils express sont en russe...
  4. Non, Autocad était loué. Aujourd'hui, il reste 2 postes équipés mais uniquement pour ouvrir ou imprimer de vieux plans, on ne travaille plus du tout avec. Effectivement, je trouve aussi que de supprimer autocad du jour au lendemain et de passer à nova est une grosse erreur. Je n'étais pas là à l'époque mais j'imagine la panique quand ton client appelle et te demande un plan pour le lendemain... Je suis en train de motiver le boss pour qu'on passe à Revit, pas parce que c'est mieux mais plutôt dans mon intérêt : être au point si je dois changer d'entreprise
  5. Le résultat est plutôt pas mal. Je crois que l'erreur fût de dessiner en 2D avec un logiciel 3D. Il faut dire que le boss a supprimé Autocad dès le lendemain de la fin de la formation, sans que quelqu'un soit apte
  6. 15 jours en bossant 8 h par jour ? si c'est que ça, c'est vraiment top. Personnellement, je m'occupe du CVC, plomberie surtout en logement : 12h par jour depuis 1 an (j'ai été embauché il y a un an) ne m'ont pas encore permis de me mettre à la 3D
  7. ah mais il y aura forcément une formation. Nous avons été formé sur Nova mais 4 jours uniquement, la suite intervient sous forme d'une assistance téléphonique (prise en main du pc pour explications) mais cette assistance étant payante, ils ont décidé de la stopper. Le but est de pouvoir rendre le dossier en IFC et qu'il soit exploitable. Pour l'instant, on en est assez éloigné
  8. Salut tout le monde, Je bosse en BE CVC et Elec. Nous sommes sur Nova Trimble (ex Plancal) et c'est un peu la cata pour ce qui est de la 3d. Nous utilisons ce logiciel depuis 3 ans mais le résultat n'est pas encore proche de ce que l'on pourrait attendre. L'avantage de Nova, c'est qu'il dimensionne les réseaux (En fait, on utilise Nova comme si on était sur AutoCAD). Depuis une semaine, la direction nous a demandé de faire tout un projet en 3D (sans bibliothèque interne en plus) et ça n'avance pas. Mon Boss commence donc à se demander si on ne devraient pas passer sous Revit mais je m'inquiète de savoir combien de temps va t'on mettre avant de réussir à faire de la vraie 3D. 1 an ? 3 ans ? L'énorme avantage de Revit, c'est qu'on trouve toujours des Tutos et il y a cadxp, nova = 0 support
  9. Il existe un lisp très sympa, crée par Usegomme : ;; Tuyau 3d pour autocad à partir de la version 2007 ;; et avec ou sans calorifuge ;; Usegomme 5-2-2007 ;; commandes: TUY tuyau 3D, TSA tuyau sans axe, TU tube depuis axe, CDT coude et CD arc, CALOS seul depuis axe ou 2 points. ;; version 4 le 12-6-2011 ajout commande CDB pour relier 2 lignes par un coude en bloc avec attributs (pas d'emboitement) ;; version 5.01 le 02-7-2011 ajout commande TUB pour génèrer le tube en bloc avec attributs à partir de la ligne sélectionnée ;;; génère le tube en bloc à partir de l'axe sélectionné (defun c:TUB (/ sel typent ent ent1 pt eptub lga px p1 atdia epc tub1 af ht it tsize aat1 att2 att3 att4 att5 att6 att7 att8 nle lda) (diam-t3d) (princ " \n Matière: ")(if tuy:mat (princ tuy:mat)(princ "?")) (princ " Fluide: ") (if tuy:flu (princ tuy:flu)(princ "? ")) (if (> epcalo 0)(creercalquecalo)) (initget "Epaisseur Matiere Fluide") (while (setq sel (entsel (strcat "Sélectionner l'AXE du TUBE Ep= "(rtos tuy:ep 2 4)" ou [Epaisseur/Matiere/Fluide]:"))) (cond ((= sel "Epaisseur") (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: "))) (if eptub (if (< (abs eptub) ddia)(setq tuy:ep eptub))) ) ((= sel "Matiere")(setq tuy:mat (getstring T "\n Matière ?: "))) ((= sel "Fluide")(setq tuy:Flu (getstring T "\n Fluide ?: "))) (t (setq typent (cdr (assoc 0 (entget (setq ent (car sel)))))) (cond ((= typent "LINE") (setq lga (distance (cdr (assoc 10 (entget ent)))(cdr (assoc 11 (entget ent))))) ; longueur axe (setq pt (trans (cdr (assoc 10 (entget ent))) 0 1)) (command "_ucs" "_non" pt "") (setq pt '(0. 0. 0.)) (setq px (trans (cdr (assoc 11 (entget ent))) 0 1)) (command "_ucs" "_non" pt "_non" px "") (setq p1 '(1. 0. 0.)) ;; ajout calorifuge si présent (if (> epcalo 0) (progn (generetube ent pt nil)(entdel tub3d))) ;; suppression de l'axe si: (if (and (= 2 (getvar "DELOBJ"))(= 0 epcalo)) (entdel ent)) ;;; nom du bloc (if (or (= tuy:ep nil) (<= tuy:ep 0.0)) (setq nomb (strcat "TUBE" "_""DN" (rtos dn 2 0) "_" norme )) (setq nomb (strcat "TUBE" "_""DN" (rtos dn 2 0) "_" norme "_Ep_" (rtos (fix tuy:ep) 2 0) (if (> tuy:ep (fix tuy:ep)) (strcat "_" (rtos (* 10 (- tuy:ep (fix tuy:ep))) 2 0)) "_0" )) ) ) ;;; recherche bloc dans dessin (if (tblsearch "block" nomb) (progn ;;;; insertion bloc (setq atdia (getvar "attdia")) (setvar "attdia" 1) (command "._-insert" nomb "X" lga "Y" 1 "Z" 1 "_non" '(0. 0. 0.) "0" ) (setvar "attdia" atdia) ) (progn ;;; création du solide (command "_line" "_non" pt "_non" p1 "")(setq ent1 (entlast)) (if (> epcalo 0) (setq epc epcalo epcalo 0) (setq epc 0)) (generetube ent1 pt nil) (setq tub1 (entlast)) (if (> 2 (getvar "DELOBJ")) (entdel ent1)) (if (> epc 0) (setq epcalo epc epc 0)) ;; création attributs (setq st (getvar "textstyle")) (setvar "textstyle" "standard") (setq tsize (getvar "textsize")) (setq af (getvar "aflags")) (setq ht (* 0.07 ddia )) ; hauteur texte (setq it (* 1.3 ht)) ; intervale ligne texte (setvar "aflags" 9) ;;; prédéfini et invisible (command "._-attdef" "" "POUCE" "POUCE" (if pouce pouce "") "_non" '(0. 0. 0.) ht "0") (setq att1 (entlast)) (command "._-attdef" "" "DN" "DN" (rtos dn 2 0) "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 1 (+ it ht))) ht "0") (setq att2 (entlast)) (command "._-attdef" "" "NORME" "NORME" norme "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 2 (+ it ht))) ht "0") (setq att3 (entlast)) (command "._-attdef" "" "MATIERE" "MATIERE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 3 (+ it ht))) ht "0") (setq att4 (entlast)) (command "._-attdef" "" "EP" "EP" (if (or (= tuy:ep nil) (<= tuy:ep 0.0)) "" (rtos (abs tuy:ep) 2 1)) "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 4 (+ it ht))) ht "0") (setq att5 (entlast)) (command "._-attdef" "" "LONG" "LONG" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 5 (+ it ht))) ht "0") (setq att6 (entlast)) (command "._-attdef" "" "FLUIDE" "FLUIDE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 6 (+ it ht))) ht "0") (setq att7 (entlast)) (command "._-attdef" "" "REPERE" "REPERE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 7 (+ it ht))) ht "0") (setq att8 (entlast)) ;;;; création bloc (command "._-block" nomb "_non" '(0. 0. 0.) att1 att2 att3 att4 att5 att6 att7 att8 tub3d "") ;;;; insertion bloc (setq atdia (getvar "attdia")) (setvar "attdia" 1) (command "._-insert" nomb "X" lga "Y" 1 "Z" 1 "_non" '(0. 0. 0.) "0" ) (setvar "attdia" atdia) ) ) ;;; (if (tblsearch "block" ;;; mise à jour attributs variables ;;;;;;;; matière ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (cond (tuy:mat (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "MATIERE") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 tuy:mat) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut matiere mise à jour )) ;;;;;;;; Fluide ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (cond (tuy:flu (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "FLUIDE") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 tuy:flu) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut fluide mise à jour )) ;;;;;;; si épaisseur négative , lorsqu' on ne veut pas qu'elle soit représentée. (cond ((and tuy:ep (< tuy:ep 0)) (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "EP") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 (rtos (abs tuy:ep)2 1)) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut épaisseur mise à jour )) ;;;;;;;; longueur du tube ;;;;;;;;;;;; (cond (lga (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "LONG") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 (rtos lga 2 2)) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut LONG mise à jour )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; (repeat 2 (command "_ucs" "_p")) );;; = typent "LINE" ) ;; cond ) ) ;; cond (princ " \n Matière: ")(if tuy:mat (princ tuy:mat)(princ "?")) (princ " Fluide: ") (if tuy:flu (princ tuy:flu)(princ "? ")) ) ; w (gc) (princ) ) ;; pour raccorder 2 axes et tracer un coude de tuy sauf emboitements, en bloc avec attributs (defun c:cdb (/ lo coude mtrim nomb sel s ok) (diam-t3d) (if (> epcalo 0)(creercalquecalo)) (setq mtrim (getvar "trimmode")) (setvar "FILLETRAD" rayo) (setvar "trimmode" 1) (setq coude T ok 0) (while (and (= ok 0)(not (equal coude (setq lo (entlast))))) (command "_fillet") (while (< ok 2) (princ " \n Matière: ")(if tuy:mat (princ tuy:mat)(princ "?")) (princ " Fluide: ") (if tuy:flu (princ tuy:flu)(princ "? ")) (setq s 0) (initget "Epaisseur Matiere Fluide") (while (and (not (setq sel (entsel (strcat "Sélectionner l'AXE du TUBE Ep= "(rtos tuy:ep 2 4)" ou [Epaisseur/Matiere/Fluide]:")))) (< s 0 ; <---- nombre de sélection manquée autorisée de 0 à n **************** )) (setq s (1+ s)) ) (if sel (cond ((= sel "Epaisseur") (setq s 0) (setq eptub (getdist (strcat "\nEpaisseur tube ou 2 pts <" (rtos tuy:ep 2 4) ">: "))) (if eptub (setq tuy:ep eptub)) (while (>= (abs tuy:ep) ddia) (initget 1) (setq tuy:ep (getdist (strcat "\n*** Epaisseur "(rtos tuy:ep 2 4)" INCORRECTE *** Nouvelle Epaisseur : "))) ) ) ((= sel "Matiere")(setq s 0)(setq tuy:mat (getstring T "\n Matière ?: "))) ((= sel "Fluide")(setq s 0)(setq tuy:flu (getstring T "\n Fluide ?: "))) ((or (= (cdr (assoc 0 (entget (car sel)))) "LINE") (= (cdr (assoc 0 (entget (car sel)))) "XLINE") (= (cdr (assoc 0 (entget (car sel)))) "RAY") ) (setq ok (1+ ok))(command sel) ) (t (setq s 0)(prompt " LIGNE UNIQUEMENT")) ) (setq ok 3) ) ); w 2 (cond ((and (< ok 3)(not (equal lo (setq coude (entlast))))) (setq ok 0) (coudbloc)) (t (command)) ) ) ; w 1 (setvar "trimmode" mtrim) (princ) (princ nomb) (prin1) ) (defun coudbloc (/ pt acd atdia ht it tsize af st att1 att2 att3 att4 att5 att6 epc) (setq pt (trans (cdr (assoc 10 (entget coude))) 0 1)) (setq acd (* (- (cdr (assoc 50 (entget coude))) (cdr (assoc 51 (entget coude)))) (/ 180 pi))) (if (< acd 0) (setq acd (abs acd)) (setq acd (- acd 90.0))) (if (> acd 180.0) (setq acd (- acd 180.0))) (if (= "180" (rtos acd 2 2)) (setq acd 90)) (if (= acd 0.0) (setq acd 90.0)) (command "_ucs" "_E" coude) (if (or (= tuy:ep nil) (<= tuy:ep 0.0)) (setq nomb (strcat "COUDE" "_" (rtos acd 2 2) "°" "_""DN" (rtos dn 2 0) "_" norme )) (setq nomb (strcat "COUDE" "_" (rtos acd 2 2) "°" "_""DN" (rtos dn 2 0) "_" norme "_Ep_" (rtos (fix tuy:ep) 2 0) (if (> tuy:ep (fix tuy:ep)) (strcat "_" (rtos (* 10 (- tuy:ep (fix tuy:ep))) 2 0)) "_0" )) ) ) ;; ajout calorifuge si présent (if (> epcalo 0) (progn (generetube coude pt 1) (entdel cd3d))) (if (tblsearch "block" nomb) ;; recherche bloc dans dessin (progn ;;;; insertion bloc (setq atdia (getvar "attdia")) (setvar "attdia" 1) (command "._-insert" nomb "_non" '(0. 0. 0.) "" "" "0" ) (setvar "attdia" atdia) ) (progn (if (> epcalo 0) (setq epc epcalo epcalo 0) (setq epc 0)) (generetube coude pt 1) (if (> epc 0) (setq epcalo epc epc 0)) ;; création attributs (setq st (getvar "textstyle")) (setvar "textstyle" "standard") (setq tsize (getvar "textsize")) (setq af (getvar "aflags")) (setq ht (* 0.07 ddia )) ; hauteur texte (setq it (* 1.3 ht)) ; intervale ligne texte (setvar "aflags" 9) ;;; prédéfini et invisible (command "._-attdef" "" "POUCE" "POUCE" (if pouce pouce "") "_non" (polar '(0. 0. 0.)(* 0.5 pi)(* 1 (+ it ht))) ht "0") (setq att1 (entlast)) (command "._-attdef" "" "TYPE" "TYPE" (strcat "COUDE" " " (rtos acd 2 2) "°") "_non" '(0. 0. 0.) ht "0") (setq att2 (entlast)) (command "._-attdef" "" "DN" "DN" (rtos dn 2 0) "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 1 (+ it ht))) ht "0") (setq att3 (entlast)) (command "._-attdef" "" "NORME" "NORME" norme "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 2 (+ it ht))) ht "0") (setq att4 (entlast)) (command "._-attdef" "" "MATIERE" "MATIERE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 3 (+ it ht))) ht "0") (setq att5 (entlast)) (command "._-attdef" "" "EP" "EP" (if (or (= tuy:ep nil) (<= tuy:ep 0.0)) "" (rtos (abs tuy:ep) 2 1)) "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 4 (+ it ht))) ht "0") (setq att6 (entlast)) (command "._-attdef" "" "FLUIDE" "FLUIDE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 5 (+ it ht))) ht "0") (setq att7 (entlast)) (command "._-attdef" "" "REPERE" "REPERE" "" "_non" (polar '(0. 0. 0.)(* 1.5 pi)(* 6 (+ it ht))) ht "0") (setq att8 (entlast)) ;;;; creation bloc (command "._-block" nomb "_non" '(0. 0. 0.) att1 att2 att3 att4 att5 att6 att7 att8 cd3d "") ;;;; insertion bloc (setq atdia (getvar "attdia")) (setvar "attdia" 1) (command "._-insert" nomb "_non" '(0. 0. 0.) "" "" "0" ) (setvar "attdia" atdia) (setvar "aflags" af) (setvar "textsize" tsize ) (setvar "textstyle" st) ) ;;; progn ) ;;if ;;;;;;;; matière ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (cond (tuy:mat (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "MATIERE") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 tuy:mat) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut matiere mise à jour )) ;;;;;;;; Fluide ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (cond (tuy:flu (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "FLUIDE") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 tuy:flu) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut fluide mise à jour )) ;;;;;;; si épaisseur négative , lorsqu' on ne veut pas qu'elle soit représentée. (cond ((and tuy:ep (< tuy:ep 0)) (setq nle (entlast)) ; nom logique entité (while (and (/= (cdr (assoc 2 (setq lda (entget (setq nle (entnext nle)))))) "EP") (/= "SEQEND" (cdr (assoc 0 lda))) ) ) (setq lda (subst (cons 1 (rtos (abs tuy:ep)2 1)) (assoc 1 lda) lda)) ;liste données attribut (entmod lda) (entupd nle) ;attribut épaisseur mise à jour )) (command "_ucs" "_p") ) ;;;;; fin coudbloc ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun choixnorme (/ sv_dm dm ) (setq sv_dm (getvar "DYNMODE")) (cond ((< sv_dm 0) (setq dm (* sv_dm -1)) (setvar "DYNMODE" dm)) (t (setq sv_dm nil dm nil)) ) (initget 1 "ISO3D ISO5D INOX-VIS 3000Lbs-VIS PE-PP-EMB PVC-PRESSION PVC-ECOUL CINTRE-SGN") ;;;; bit refus reponse nulle (setq norme (getkword "\nChoisir une Norme [iSO3D/ISO5D/INOX-VIS/3000Lbs-VIS/PE-PP-EMB/PVC-PRESSION/PVC-ECOUL/CINTRE-SGN] : ")) (if sv_dm (setvar "DYNMODE" sv_dm)) ) (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 (strcat a g "<" b ">" " ")) (setq c (getreal c)) ) (defun diam-t3d (/ diam d B) ;; dn (if (not tuy:ep) (setq tuy:ep 0)) (setq dn "Norme" epcd 0 emboit 0 EPemboit nil L90 nil L45 nil L30 nil L20 nil ecart 0) (if (not norme) (setq norme "ISO3D")) ;; par defaut (if (not epcalo)(setq epcalo 0)) ;; par defaut (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 " norme msgcalo msgecalo msgdn "[Norme/Calo/8/10/15/21/20/25/32/40/50/65/80/100/125/150/200/250/300/350/400/450/500/600/Autre]") ) ) ((= norme "CINTRE-SGN") (setq msgdn " DN:") (if (and (/= CINTRE-SGN:dn "Autre")(/= CINTRE-SGN:dn nil)) (setq dn (rtos CINTRE-SGN:dn 2 0)) (setq dn "Autre") ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/8/10/15/20/25/32/40/Autre]") ) ) ((= 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 " norme msgcalo msgecalo msgdn "[Norme/Calo/20/25/32/40/50/65/80/100/125/150/200/250/300/350/Autre]") ) ) ((= norme "INOX-VIS") (setq msgdn " DN:") (if (and (/= inox-vis:dn "Autre")(/= inox-vis:dn nil)) (setq dn (rtos inox-vis:dn 2 0)) (setq dn (rtos 25 2 0) inox-vis:dn 25) ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/6/8/10/15/20/25/32/40/50/65/80]") ) ) ((= norme "3000Lbs-VIS") (setq msgdn " DN:") (if (and (/= 3000Lbs-VIS:dn "Autre")(/= 3000Lbs-VIS:dn nil)) (setq dn (rtos 3000Lbs-VIS:dn 2 0)) (setq dn (rtos 50 2 0) 3000Lbs-VIS:dn 50) ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/6/8/10/15/20/25/32/40/50/65/80]") ) ) ((= norme "PE-PP-EMB") (setq msgdn " DN:") (if (and (/= PE-PP-EMB:dn "Autre")(/= PE-PP-EMB:dn nil)) (setq dn (rtos PE-PP-EMB:dn 2 0)) (setq dn (rtos 50 2 0) PE-PP-EMB:dn 50) ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/10/15/20/25/32/40/50/65/80/100]") ) ) ((= norme "PVC-PRESSION") (setq msgdn " Diam:") (if (and (/= PVC-P:dn "Autre")(/= PVC-P:dn nil)) (setq dn (rtos PVC-P:dn 2 0)) (setq dn (rtos 50 2 0) PVC-P:dn 50) ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/6/8/10/12/16/20/25/32/40/50/63/75/90/110/125/140/160/200/225/250]") ) ) ((= norme "PVC-ECOUL") (setq msgdn " Diam:") (if (and (/= PVC-ECOUL:dn "Autre")(/= PVC-ECOUL:dn nil)) (setq dn (rtos PVC-ECOUL:dn 2 0)) (setq dn (rtos 40 2 0) PVC-ECOUL:dn 40) ) (setq choixdn (strcat "\n " norme msgcalo msgecalo msgdn "[Norme/Calo/32/40/50/63/75/80/90/100/110/125/140/160/200/250/315]") ) ) ) ;; 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") (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 pouce "1/8")) ((= dn 10) (setq diam 17.2 rayo 25 pouce "1/4" )) ((= dn 15) (setq diam 21.3 rayo 28 pouce "1/2" )) ;27 ((= dn 21) (setq diam 21.3 rayo 38 pouce "1/2" )) ; dn15 inox ((= dn 20) (setq diam 26.9 rayo 28.5 pouce "3/4")) ((= dn 25) (setq diam 33.7 rayo 38 pouce "1")) ((= dn 32) (setq diam 42.4 rayo 47.5 pouce "1 1/4")) ((= dn 40) (setq diam 48.3 rayo 57 pouce "1 1/2")) ((= dn 50) (setq diam 60.3 rayo 76 pouce "2")) ((= dn 65) (setq diam 76.1 rayo 95 pouce "2 1/2")) ((= dn 80) (setq diam 88.9 rayo 114.5 pouce "3")) ((= dn 100)(setq diam 114.3 rayo 152.5 pouce "4")) ((= dn 125) (setq diam 139.7 rayo 190.5 pouce "5")) ((= dn 150) (setq diam 168.3 rayo 228.5 pouce "6")) ((= dn 200) (setq diam 219.1 rayo 305 pouce "8")) ((= dn 250) (setq diam 273 rayo 381 pouce "10")) ((= dn 300) (setq diam 323.9 rayo 457 pouce "12")) ((= dn 350) (setq diam 355.6 rayo 533.5 pouce "14")) ((= dn 400) (setq diam 406.4 rayo 609.5 pouce "16")) ((= dn 450) (setq diam 458 rayo 686 pouce "18")) ((= dn 500) (setq diam 508 rayo 762 pouce "20")) ((= dn 600) (setq diam 610 rayo 914 pouce "24")) (t (autrediametre) ) ) ) ((= norme "CINTRE-SGN") ;;;; cintrage tube d'après un document SGN (cond ((and (/= dn "A") (/= dn nil))(setq CINTRE-SGN:dn dn)) ((= dn nil) (if CINTRE-SGN:dn (setq dn CINTRE-SGN:dn))) ) (cond ((= dn 8) (setq diam 13.5 rayo 70 )) ((= dn 10) (setq diam 17.2 rayo 90 )) ((= dn 15) (setq diam 21.3 rayo 110 )) ((= dn 20) (setq diam 26.9 rayo 135)) ((= dn 25) (setq diam 33.7 rayo 170)) ((= dn 32) (setq diam 42.4 rayo 215)) ((= dn 40) (setq diam 48.3 rayo 245)) (t (autrediametre) ) ) (setq ecart 110) ;;; longueur droite entre 2 courbes ) ((= norme "ISO5D") (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 pouce "3/4")) ((= dn 25) (setq diam 33.7 rayo 72.5 pouce "1")) ((= dn 32) (setq diam 42.4 rayo 92.5 pouce "1 1/4")) ((= dn 40) (setq diam 48.3 rayo 109.5 pouce "1 1/2")) ((= dn 50) (setq diam 60.3 rayo 137.5 pouce "2")) ((= dn 65) (setq diam 76.1 rayo 175 pouce "2 1/2")) ((= dn 80) (setq diam 88.9 rayo 207.5 pouce "3")) ((= dn 100) (setq diam 114.3 rayo 270 pouce "4")) ((= dn 125) (setq diam 139.7 rayo 330 pouce "5")) ((= dn 150) (setq diam 168.3 rayo 390 pouce "6")) ((= dn 200) (setq diam 219.1 rayo 515 pouce "8")) ((= dn 250) (setq diam 273 rayo 650 pouce "10")) ((= dn 300) (setq diam 323.9 rayo 770 pouce "12")) ((= dn 350) (setq diam 355.6 rayo 850 pouce "14")) (t (autrediametre) ) ) ) ((= norme "INOX-VIS") (cond ((and (/= dn "A") (/= dn nil))(setq inox-vis:dn dn)) ((= dn nil) (if inox-vis:dn (setq dn inox-vis:dn))) ) (cond ;; d diametre ext coude ((= dn 6) (setq diam 10.2 L90 19 d 14.5)) ((= dn 8) (setq diam 13.5 L90 21 d 17.5)) ((= dn 10) (setq diam 17.2 L90 25 d 21.5)) ((= dn 15) (setq diam 21.3 L90 28 d 27)) ((= dn 20) (setq diam 26.9 L90 33 d 33.5)) ((= dn 25) (setq diam 33.7 L90 38 d 40.5)) ((= dn 32) (setq diam 42.4 L90 45 d 50)) ((= dn 40) (setq diam 48.3 L90 50 d 57)) ((= dn 50) (setq diam 60.3 L90 58 d 70)) ((= dn 65) (setq diam 76.1 L90 75 d 86)) ((= dn 80) (setq diam 88.9 L90 85 d 100)) (t (autrediametre) ) ) (setq epcd (* (- d diam) 0.5)) ; epaisseur coude (setq rayo (+ (* diam 0.5) epcd 1) emboit (- l90 rayo) epemboit epcd) ) ((= norme "3000Lbs-VIS") (cond ((and (/= dn "A") (/= dn nil))(setq 3000Lbs-VIS:dn dn)) ((= dn nil) (if 3000Lbs-VIS:dn (setq dn 3000Lbs-VIS:dn))) ) (cond ;;;; b = diametre "manchon" ((= dn 8) (setq diam 13.5 L90 24.5 l45 22 b 26.5)) ((= dn 10) (setq diam 17.2 L90 28.5 l45 22 b 34)) ((= dn 15) (setq diam 21.3 L90 33.5 l45 25 b 38.5)) ((= dn 20) (setq diam 26.9 L90 38 l45 28.5 b 46.5)) ((= dn 25) (setq diam 33.7 L90 44.5 l45 33.5 b 56.5)) ((= dn 32) (setq diam 42.4 L90 51 l45 38 b 62.5)) ((= dn 40) (setq diam 48.3 L90 60.5 l45 41.5 b 76)) ((= dn 50) (setq diam 60.3 L90 63.5 l45 50.5 b 92)) ((= dn 65) (setq diam 76.1 L90 82.5 l45 63.5 b 110)) ((= dn 80) (setq diam 88.9 L90 95.5 l45 63.5 b 122)) ((= dn 100)(setq diam 114.3 L90 114.5 l45 80 b 152)) (t (autrediametre) ) ) (setq epcd (* (- b diam) 0.25)) ;; ep coude = moitie epaisseur manchon ?.. (setq rayo (+ (* diam 0.5) epcd 1) emboit (- l90 rayo) epemboit (* 2 epcd)) ) ((= norme "PE-PP-EMB") (cond ((and (/= dn "A") (/= dn nil))(setq PE-PP-EMB:dn dn)) ((= dn nil) (if PE-PP-EMB:dn (setq dn PE-PP-EMB:dn))) ) (cond ;;;; d= diametre ext coudes ((= dn 10) (setq diam 16 L90 25 L45 20 d 26)) ((= dn 15) (setq diam 20 L90 28 L45 21 d 30.5)) ((= dn 20) (setq diam 25 L90 32 L45 24 d 36)) ((= dn 25) (setq diam 32 L90 38 L45 28 d 43.5)) ((= dn 32) (setq diam 40 L90 44 L45 33 d 53.5)) ((= dn 40) (setq diam 50 L90 51 L45 36 d 66)) ((= dn 50) (setq diam 63 L90 62 L45 43 d 82)) ((= dn 65) (setq diam 75 L90 75.5 L45 51 d 92.5)) ((= dn 80) (setq diam 90 L90 88 L45 58 d 110)) ((= dn 100) (setq diam 110 L90 106 L45 68 d 134)) (t (autrediametre) ) ) (setq epcd (* (- d diam) 0.5)) ; ep coude (setq rayo (+ (* diam 0.5) epcd 1) emboit (- l90 rayo) epemboit epcd ecart 5) ) ((= norme "PVC-PRESSION") (cond ((and (/= dn "A") (/= dn nil))(setq PVC-P:dn dn)) ((= dn nil) (if PVC-P:dn (setq dn PVC-P:dn))) ) (cond ;;;; D diam ext coude ((= dn 6) (setq diam dn L90 16 D 11)) ((= dn 8) (setq diam dn L90 17 D 13)) ((= dn 10) (setq diam dn L90 18 D 14)) ((= dn 12) (setq diam dn L90 19 D 17)) ((= dn 16) (setq diam dn L90 23 L45 18.5 D 21)) ((= dn 20) (setq diam dn L90 27 L45 21 D 25)) ((= dn 25) (setq diam dn L90 33 L45 25 D 30.5)) ((= dn 32) (setq diam dn L90 39 L45 30 D 38.2)) ((= dn 40) (setq diam dn L90 49 L45 36 D 47.2)) ((= dn 50) (setq diam dn L90 57 L45 42.5 D 58.5)) ((= dn 63) (setq diam dn L90 71 L45 52 D 73.4)) ((= dn 75) (setq diam dn L90 83 L45 60.5 D 87.2)) ((= dn 90) (setq diam dn L90 97 L45 70.5 D 105)) ((= dn 110) (setq diam dn L90 116 L45 86 D 127)) ((= dn 125) (setq diam dn L90 172 L45 97 D 146.2)) ((= dn 140) (setq diam dn L90 146 L45 108 D 162)) ((= dn 160) (setq diam dn L90 166 L45 122 D 185)) ((= dn 200) (setq diam dn L90 207 L45 149 D 225.2)) ((= dn 225) (setq diam dn L90 233 L45 168 D 250)) ((= dn 250) (setq diam dn L90 263 L45 191.5 D 282)) (t (autrediametre) ) ) (setq epcd (* (- d diam) 0.5)) ;; ep coude (setq rayo (+ (* diam 0.5) epcd 1) emboit (- L90 rayo) epemboit epcd ecart 5) ) ((= norme "PVC-ECOUL") (cond ((and (/= dn "A") (/= dn nil))(setq PVC-ECOUL:dn dn)) ((= dn nil) (if PVC-ECOUL:dn (setq dn PVC-ECOUL:dn))) ) (cond ;;;; L87 longueur pour coude 87.5° ((= dn 32) (setq diam dn L87 48 L45 34 emboit 23)) ;; +3 ((= dn 40) (setq diam dn L87 58 L45 40 L30 38 L20 33.5 emboit 27)) ((= dn 50) (setq diam dn L87 71 L45 49 emboit 32)) ((= dn 63) (setq diam dn L87 86.5 L45 59.5 emboit 38.5)) ((= dn 75) (setq diam dn L87 101.5 L45 69.5 emboit 44.5)) ((= dn 80) (setq diam dn L87 108 L45 73.5 emboit 47)) ((= dn 90) (setq diam dn L87 121 L45 82 emboit 52)) ((= dn 100) (setq diam dn L87 134 L45 90 emboit 61)) ((= dn 110) (setq diam dn L87 145 L45 97 emboit 61)) ((= dn 125) (setq diam dn L87 157 L45 102 emboit 61)) ((= dn 140) (setq diam dn L87 168 L45 107 emboit 61)) ((= dn 160) (setq diam dn L87 183 L45 114 emboit 61)) ((= dn 200) (setq diam dn L87 214 L45 127 emboit 61)) ((= dn 250) (setq diam dn L87 225 L45 145 emboit 61)) ((= dn 315) (setq diam dn L87 309 L45 210 emboit 124)) (t (autrediametre) ) ) (setq L90 (/ (- (* L87 45)(* L45 2.5)) 42.5)) ;; 90-87.5=2.5 et 45-2.5=42.5 (setq rayo (- L90 emboit) epemboit 2 epcd 0 ecart 5) ;;; ecart = ecartement mini entre 2 embouts de coude ) ) ; fin cond dn suivant norme (setq ddia (/ diam 2)) (if (not (> rayo (+ ddia epcd))) (setq rayo (* (+ ddia epcd) 1.01))) ; (if tuy:ep (while (>= (abs tuy:ep) ddia) (initget 1) (setq tuy:ep (getdist (strcat "\n*** Epaisseur "(rtos tuy:ep 2 4)" INCORRECTE *** Nouvelle Epaisseur : "))) ) ; ) ) (defun autrediametre () (setq epcd 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)) (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 tubage1 (ent typ / lent) ;;; N'EST PAS UTILISE ;change le calque de l'axe ; (setq calqax (strcat (getvar "clayer") "-AXE")) ; defini dans c:tuy (setq lent (entget ent)) ; change le calque (setq lent (subst (cons 8 calqax) (assoc 8 lent) lent) ) (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 epcd)) (command ddia)) (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil)) (command "_sweep" "_L" "" ent) ;; balayage (if (= typ 1) (setq cd3d (entlast) tub3d nil)(setq cd3d nil tub3d (entlast))) (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 epcd)) (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 (= typ 1) (setq cd3d (entlast) tub3d nil)(setq cd3d nil tub3d (entlast))) (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) ) ) ) ) ) ;;;;;;;;;;;;;;;;;;; embcdf ; embout coude femelle (if (and cd3d epemboit pt1 pt2 pt3) (embcdf)) ) (defun embcdf (/ lgt ptn ent circonftuy tubext cd3) (setq lgt (+ dmin emboit)) (redefsommet pt2 pt1 lgt) (setq ptn sbn) (redefsommet ptn pt2 emboit) (command "_line" "_none" ptn "_none" sbn "") (setq ent (entlast)) (command "_circle" "_none" sbn) (command (+ ddia epemboit)) (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" sbn 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)) (command "_subtract" tubext "" "_L" "") (command "_.union" cd3d (entlast) "") (setq cd3 (entlast)) (redefsommet pt2 pt3 lgt) (setq ptn sbn) (redefsommet ptn pt2 emboit) (command "_line" "_none" ptn "_none" sbn "") (setq ent (entlast)) (command "_circle" "_none" sbn) (command (+ ddia epemboit)) (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" sbn 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)) (command "_subtract" tubext "" "_L" "") (command "_.union" cd3 (entlast) "") ) (defun caloplein (ent pt / circonftuy lent) (command "_circle" "_none" pt(+ ddia epcalo)) (if (= 0 (getvar "delobj"))(setq circonftuy (entlast))(setq circonftuy nil)) (command "_sweep" "_L" "" ent) ;; balayage (if circonftuy (entdel circonftuy)) (setq lent (entget (entlast))) ; calo (setq lent (subst (cons 8 calqcalo) (assoc 8 lent) lent) ) (entmod lent) ) (defun calocreux (ent pt / circonftuy lent) (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 lent (entget (entlast))) ; calo (setq lent (subst (cons 8 calqcalo) (assoc 8 lent) lent) ) (entmod lent) ) (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 (cond ;; restauration rayon original ((and l90 l45 epemboit) (setq rayo (- l90 emboit)) (setvar "FILLETRAD" rayo)) ) (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 at (* 2 (* a (/ 180 pi)))) ;; angle tuyauterie (cond ((and l45 l20 epemboit (> at 150)) (setq dmin (- (- l45 emboit) (* (/ (- (- l45 emboit)(- l20 emboit)) 25)(- at 135)))) (setq rayo (/ (* (sin a) dmin) (cos a))) (if (not (> rayo (+ ddia epemboit))) (setq rayo (* (+ ddia epemboit) 1.01) dmin (* (cos a) (/ rayo (sin a))) ) ) (setvar "FILLETRAD" rayo) ) ((and l45 l30 epemboit (> at 136)) (setq dmin (- (- l45 emboit) (* (/ (- (- l45 emboit)(- l30 emboit)) 15)(- at 135)))) (setq rayo (/ (* (sin a) dmin) (cos a))) (if (not (> rayo (+ ddia epemboit))) (setq rayo (* (+ ddia epemboit) 1.01) dmin (* (cos a) (/ rayo (sin a))) ) ) (setvar "FILLETRAD" rayo) ) ((and l90 l45 epemboit (> at 90)) (setq dmin (- (- l90 emboit) (* (/ (- (- l90 emboit)(- l45 emboit)) 45)(- at 90)))) (setq rayo (/ (* (sin a) dmin) (cos a))) (if (not (> rayo (+ ddia epemboit))) (setq rayo (* (+ ddia epemboit) 1.01) dmin (* (cos a) (/ rayo (sin a))) ) ) (setvar "FILLETRAD" rayo) ) (t (setq dmin (* (cos a) (/ rayo (sin a))))) ) ) ) (if a90 (setq at 90.0)) (if a180 (setq at 180.0)) ) (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 (* 2 emboit) ecart)) (>= d1 dmin)) (>= d2 dmin) ) (descoude L1 L2 pt2 d1) ) ((or (if dminp (< (- d1 dminp) (+ dmin (* 2 emboit) ecart)) (< 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 (* 2 emboit) ecart) dmin)) (if (< d1 lg) (progn (setq pt1 (trans (cdr (assoc 10 (entget L1))) 0 1)) (if dminp (setq lgmin (+ dmin (* 2 emboit) ecart))(setq lgmin dmin)) (redefsommet pt1 pt2 lgmin) (entdel L1) (command "_line" "_none" pt1 "_none" sbn "") (setq L1 (entlast)) (command "_move" L2 "" "_none" pt2 "_none" sbn) (setq pt2 sbn) (if (and (= emboit 0)(= ecart 0))(setq 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 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 dist / h a ab 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 ab (distance sa sb)) (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 ) ) ) ) ;creer calque pour axe (defun creercalqueAXE (/ calqax) ;;; N'EST PAS UTILISE ;creer calque de l'axe (setq calqax (strcat (getvar "clayer") "-AXE")) (if (not (tblsearch "layer" calqax)) ; (command "_-layer" "_n" calqax "" "" ) (command "_-layer" "_n" calqax "_co" "6" calqax "_lt" "axes2" calqax "") ) ) ;creer calque pour calorifuge (defun creercalqueCALO () (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 "") ) ) ;; saisie des points d'épure pour la tuyauterie (defun TUY (/ p0 p1 L01 L10 coude mtrim ent eptub at) (setvar "cmdecho" 0) (diam-t3d) (setq p1 nil dmin nil dminp nil L10 nil del1 nil cd 1 lg 0) ;(creercalqueaxe ) pas utilisé (if (not (tblsearch "ltype" "axes2")) (command "_-linetype" "_l" "AXES2" "" "")) (if (> epcalo 0)(creercalquecalo)) (setvar "FILLETRAD" rayo) (setq mtrim (getvar "trimmode"))(setvar "trimmode" 1) (setq p0 "Epaisseur") (while (= p0 "Epaisseur") (initget "Epaisseur") (setq p0 (getpoint (strcat "\nPOINT DE DEPART ou <Epaisseur> = "(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 (< (abs eptub) ddia)(setq tuy:ep eptub))) ) ) ) (while p0 (if p1 (setq pd p1)) ;;; pd point de depart (cond (at (princ "Angle tuyauterie ")(princ at)(princ "°") (princ " et Coude ")(princ (- 180 at))(princ "°") ) ) (princ " Rayon ")(princ rayo) (setq p1 (getpoint p0 "\nPoint suivant <Arret> : ")) (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)) (cond (at (princ "Angle tuyauterie ")(princ at)(princ "°") (princ " et Coude ")(princ (- 180 at))(princ "°") )) (princ " Rayon ")(princ rayo) (if p1 (setq p0 (getpoint p1 "\nPoint suivant <Arret> : "))) (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 (cond ((and l01 p1)(tubage l01 lg))) ;;;; termine dernier tronçon (setvar "trimmode" mtrim)(setvar "cmdecho" 1) (cond (at (princ "\nAngle tuyauterie ")(princ at)(princ "°") (princ " et Coude ")(princ (- 180 at))(princ "°") )) (cond (rayo (princ " Rayon ")(princ rayo))) (gc) (prin1) ) ;; Juste pour avoir le bon rayon de coude pour raccorder 2 axes (defun c:cd (/ lo lo2) (diam-t3d) (setq mtrim (getvar "trimmode")) (setvar "FILLETRAD" rayo) (setvar "trimmode" 1) (setq lo (entlast)) (command "_fillet") (while (not (zerop (getvar "cmdactive")))(command pause)) (while (not (equal lo (setq lo2 (entlast)))) (command "_fillet") (while (not (zerop (getvar "cmdactive")))(command pause)) (setq lo lo2) ) (setvar "trimmode" mtrim) (princ) ) ;; pour raccorder 2 axes et tracer un coude de tuy sauf emboitements. (defun c:cdt (/ lo ) (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) ) ;; 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 tuy (progn (initget "Creux Plein") (setq rep (getstring "\n Calo dessiné [<Plein>/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 <Arret> : ")) (if p1 (setq p2 (getpoint p1 "\nPoint final <Arret> : "))) (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 ) (gc) (princ) ) ;;; génère le tube à partir de l'axe sélectionné (defun c:TU (/ sel typent ent pt eptub ) (diam-t3d) (if (> epcalo 0)(creercalquecalo)) (initget "Epaisseur") (while (setq sel (entsel (strcat "\nSélectionner l'AXE du TUBE ou Epaisseur,[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 (< (abs 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 ) (gc) (princ) ) ;;;;;;;;;; TSA tuyau sans axe (defun erreurtsa (msg) (setvar "delobj" delobjet) (setq *error* m:err m:err nil) (princ) ) (defun c:tsa () ;; tuyau sans axe (setq m:err *error* *error* erreurtsa) (setq delobjet (getvar "delobj")) (setvar "delobj" 2) (tuy) (setvar "delobj" delobjet) (setq *error* m:err m:err nil) (princ) ) (defun c:tuy ();; tuyau avec axe (setq m:err *error* *error* erreurtsa) (setq delobjet (getvar "delobj")) (setvar "delobj" 1) (tuy) (setvar "delobj" delobjet) (setq *error* m:err m:err nil) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;; (prompt "\nCommandes dispo: TUY tuyau 3D,TSA sans axe, TU ou TUB depuis axe, CDT ou CDB coude, CALOS seul") (princ)
  10. Salut, Je suis un tout nouvel utilisateur de revit, pas encore formé mais en phase d'apprentissage. J'ai bien compris comment créer un tableau de nomenclatures (des fenêtres par exemple) mais je ne trouve pas comment l'exporter en xls. Pour l'instant, je l'exporte en .txt que je renomme en xls et ça demande quelques modifications pour atteindre un beau tableau. J'ai raté un truc ou c'est la seule façon de faire ?
  11. mikl63

    Compte des polylignes

    Merci à Serge du coup. Le lien vers le sujet : http://cadxp.com/topic/20057-lisp-pour-recopier-longueur-totale-des-polylignes-dun-calque-dans-un-textmult/
  12. mikl63

    Compte des polylignes

    ;;; c:tableau_Perimetres ;;; Dessine un tableau illustrant la liste des calques et les périmètres d'objets filtrés (en ModelSpace) ;;; ;;; Compatibilité: AutoCAD 2005 et plus ;;; ;;; Instructions: ;;; 1) Charger ce fichier ;;; 2) Tapez TABLEAU_PERIMETRES sur la ligne de commande ;;; 3) Indiquez le point d'insertion ;;; 4) La partie Personnalisation peut être modifiés. ;;; ;;; Par Serge Camiré, CadNovation, 2008/08/12 ;;; http://www.cadnovation.com/fr ;;; (vl-load-com) (defun c:tableau_Perimetres ( / acadObject column ColWidth endPt filteredLayers filteredObjets i LayerCount LayerName layerNames lcLayerName LineWeightMedium LineWeightNone LineWeightThick ModelSpace n NumColumns NumRows objectName perimeter Point3D_UCS Point3D_WCS Resultat Resultats row RowHeight tableau textsize ThisDrawing Total vlaLayers vlaPoint3D vlaTableau ) ;; ====================================================================================================================== ;; Personnalisation ;; ====================================================================================================================== ;; Liste des calques et objets désirés, séparés par des virgules, sans espace, wildcard acceptés, en minuscules ou majuscules ;; Exemple pour calques: "*" pour tous les calques, "E*,Z*" pour tous ceux qui commencent par E et par Z ;; Exemple pour objets "*" pour tous les objets "*line,circle" pour tous les objets dont le nom se termine par "line", ainsi que les cercles (setq filteredLayers "*") (setq filteredObjets "*line") ;; Taille du tableau (setq textsize (getvar "textsize")) ; Voir cette variable qui contrôle la hauteur du texte (setq RowHeight (* 2.0 textsize)) (setq ColWidth (* 10.0 RowHeight)) ; Largeur totale du tableau = 2 * ColWidth puisqu'on a 2 colonnes (setq LineWeightThick acLnWt090) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) (setq LineWeightMedium acLnWt040) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) (setq LineWeightNone acLnWt000) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) ;; ====================================================================================================================== ;; Ne pas modifier la suite du programme ;; ====================================================================================================================== (setq filteredLayers (strcase filteredLayers t)) ; Minuscules (setq filteredObjets (strcase filteredObjets t)) ; Minuscules (setq acadObject (vlax-get-acad-object)) (setq ThisDrawing (vla-get-ActiveDocument acadObject)) (setq ModelSpace (vla-get-ModelSpace ThisDrawing)) (setq vlaLayers (vla-get-Layers ThisDrawing)) (setq LayerCount (vla-get-count vlaLayers)) (setq Point3D_UCS (getpoint "\nPoint d'insertion: ")) (setq Point3D_WCS (trans Point3D_UCS 1 0)) ; Si pas en WCS (setq vlaPoint3D (PointToVariant Point3D_WCS)) ;; En AutoLISP, il n'y a pas de tableau. On va se créer un faux tableau avec des clés (hash table) ;; dont les paires sont (LayerName Count) (setq Resultats nil) (setq layerNames nil) (vlax-for vlaLayer vlaLayers (setq layerName (vla-get-name vlaLayer)) (setq lcLayerName (strcase layerName t)) ; Minuscules (if (wcmatch lcLayerName filteredLayers) (setq layerNames (cons lcLayerName layerNames))) ) (setq layerNames (vl-sort layerNames '<)) ; Trier en ordre croissant (setq Resultats (mapcar '(lambda (x) (cons x 0.0)) layerNames)) (vlax-for vlaObject ModelSpace (if (and (wcmatch (setq objectName (strcase (vla-get-ObjectName vlaObject) t)) filteredObjets) (wcmatch (setq layerName (strcase (vla-get-Layer vlaObject) t)) filteredLayers) ) (progn (setq endPt (vlax-curve-getEndParam vlaObject)) (setq perimeter (vlax-curve-getDistAtParam vlaObject endPt)) (setq Total (+ perimeter (cdr (assoc layerName Resultats)))) (setq Resultats (subst (cons layerName Total) (assoc layerName Resultats) Resultats)) )) ) (setq NumRows (+ 3 LayerCount)) ; 2 lignes de titre + total (setq NumColumns 2) (setq vlaTableau (vla-AddTable ModelSpace vlaPoint3D NumRows NumColumns RowHeight ColWidth)) ;; Ligne 0 (setq row 0) (setq column 0) (SetCellProperties vlaTableau row column "Résultats" textsize acMiddleCenter nil) ;; Ligne 1, colonne 0 (setq row 1) (setq column 0) (SetCellProperties vlaTableau row column "Calques" textsize acMiddleCenter (cons acHorzBottom LineWeightMedium)) ;; Ligne 1, colonne 1 (setq row 1) (setq column 1) (SetCellProperties vlaTableau row column "Périmètres" textsize acMiddleCenter (cons acHorzBottom LineWeightMedium)) ;; Lignes de résultat (setq i 0) (setq n LayerCount) (setq Total 0.0) (while (< i n) (setq Resultat (nth i Resultats)) (setq row (+ i 2)) ;; Calque (setq column 0) (setq layerName (strcase (car Resultat))) (SetCellProperties vlaTableau row column layerName textsize acMiddleLeft nil) ;; Périmètre (setq column 1) (setq perimeter (cdr Resultat)) (setq Total (+ Total perimeter)) (SetCellProperties vlaTableau row column (rtos perimeter) textsize acMiddleRight nil) (setq i (1+ i)) ) ;; Total (setq row (+ LayerCount 2)) (setq column 0) (setq layerName "Total") (SetCellProperties vlaTableau row column layerName textsize acMiddleLeft (cons acHorzTop LineWeightMedium)) ;; Périmètre total (setq column 1) (setq perimeter Total) (setq Total (+ Total perimeter)) (SetCellProperties vlaTableau row column (rtos perimeter) textsize acMiddleRight nil) ) ;;; c:tableau_Blocs ;;; Dessine un tableau illustrant la liste des calques et les blocs filtrés (en ModelSpace) ;;; ;;; Compatibilité: AutoCAD 2005 et plus ;;; ;;; Instructions: ;;; 1) Charger ce fichier ;;; 2) Tapez TABLEAU_BLOCS sur la ligne de commande ;;; 3) Indiquez le point d'insertion ;;; 4) La partie Personnalisation peut être modifiés. ;;; ;;; IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT IMPORTANT ;;; Parmi les items à personnaliser, il faut prêter attention à ces variables ;;; ;; Noms d'objets acceptés ;;; (setq filteredLayers "*") ;;; (setq filteredBlockNames "*") ;;; ;;; ;; Noms d'objets à exclure ;;; ;; Exemple pour calques: "" pour aucun, "*$*,*|*" pour tous ceux contenant un $ ou | (i.e. issu de xref) ;;; (setq excludedLayers "defpoint,*$*,*|*") ; Exclure defpoint et ceux issus de Xrefs ;;; (setq excludedBlockNames "`**,*$*,*|*") ; Exclure blocs anonymes et ceux issus de Xrefs ;;; ;;; ;; Exclusion de lignes ou rangées vides ;;; (setq excludeEmptyColumns t) ; Exclure du tableau si tous les items de la colonne sont 0 ;;; (setq excludeEmptyRows t) ; Exclure du tableau si tous les items de la rangée sont 0 ;;; ;;; ;;; Par Serge Camiré, CadNovation, 2008/08/14 ;;; http://www.cadnovation.com/fr ;;; (defun c:tableau_Blocs ( / acadObject blockName blockNames column ColWidth Count CurrentlayerWasLocked excludedBlockNames excludedLayers excludeEmptyColumns excludeEmptyRows filteredBlockNames filteredLayers i j layerName layerNames lcBlockName lcLayerName LineWeightMedium LineWeightNone LineWeightThick m ModelSpace n NumColumns NumRows Point3D_UCS Point3D_WCS Resultats ResultatsBlock ResultatsBlocks ResultatsLayersBlocks row RowHeight textsize ThisDrawing total vlaBlocks vlaLayers vlaPoint3D vlaTableau ) ;; Liste des calques et noms de bloc désirés, séparés par des virgules, sans espace, wildcard acceptés, en minuscules ou majuscules ;; Le résultats est un tableau dont les titre de colonne sont les noms de bloc et les titres de rangée sont les calques. ;; Noms d'objets acceptés ;; Exemple pour calques: "*" pour tous les calques, "E*,Z*" pour tous ceux qui commencent par E et par Z (setq filteredLayers "*") ; Tout (setq filteredBlockNames "*") ; Tout ;; Noms d'objets à exclure ;; Exemple pour calques: "" pour aucun, "*$*,*|*" pour tous ceux contenant un $ ou | (i.e. issu de xref) (setq excludedLayers "defpoint,*$*,*|*") ; Exclure defpoint et ceux issus de Xrefs (setq excludedBlockNames "`**,*$*,*|*") ; Exclure blocs anonymes et ceux issus de Xrefs ;; Exclusion de lignes ou rangées vides (setq excludeEmptyColumns t) ; Exclure du tableau si tous les items de la colonne sont 0 (setq excludeEmptyRows t) ; Exclure du tableau si tous les items de la rangée sont 0 ;; Taille du tableau (setq textsize (getvar "textsize")) ; Voir cette variable qui contrôle la hauteur du texte (setq RowHeight (* 2.0 textsize)) (setq ColWidth (* 10.0 RowHeight)) ; Largeur totale du tableau = 2 * ColWidth puisqu'on a 2 colonnes (setq LineWeightThick acLnWt090) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) (setq LineWeightMedium acLnWt040) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) (setq LineWeightNone acLnWt000) ; Épaisseur de la ligne de séparation (voir LWDISPLAY) ;; ====================================================================================================================== ;; Ne pas modifier la suite du programme ;; ====================================================================================================================== (setq filteredLayers (strcase filteredLayers t)) ; Minuscules (setq filteredBlockNames (strcase filteredBlockNames t)) ; Minuscules (setq acadObject (vlax-get-acad-object)) (setq ThisDrawing (vla-get-ActiveDocument acadObject)) (setq ModelSpace (vla-get-ModelSpace ThisDrawing)) (setq vlaBlocks (vla-get-blocks ThisDrawing)) (setq vlaLayers (vla-get-Layers ThisDrawing)) ;; En AutoLISP, il n'y a pas de tableau. On va se créer un faux tableau avec des clés (hash table) ;; dont les paires sont (LayerName Count) (setq ResultatsBlocks nil) (setq BlockNames nil) (vlax-for vlaBlock vlaBlocks (setq blockName (GetBlockName vlaBlock)) ; Nom du bloc (accepte les blocs dynamiques. (setq lcBlockName (strcase blockName t)) ; Minuscules, blocs nommés (if (and (wcmatch lcBlockName filteredBlockNames) (not (wcmatch lcBlockName excludedBlockNames)) ) (setq BlockNames (cons lcBlockName BlockNames)) ) ) (setq BlockNames (vl-sort BlockNames '<)) ; Trier en ordre croissant (setq ResultatsBlocks (mapcar '(lambda (x) (cons x 0)) BlockNames)) (setq ResultatsLayersBlocks nil) (setq layerNames nil) (vlax-for vlaLayer vlaLayers (setq layerName (vla-get-name vlaLayer)) (setq lcLayerName (strcase layerName t)) ; Minuscules (if (and (wcmatch lcLayerName filteredLayers) (not (wcmatch lcLayerName excludedLayers)) ) (setq layerNames (cons lcLayerName layerNames)) ) ) (setq layerNames (vl-sort layerNames '<)) ; Trier en ordre croissant (setq ResultatsLayersBlocks (mapcar '(lambda (x) (cons x ResultatsBlocks)) layerNames)) (vlax-for vlaObject ModelSpace (if (and (= "AcDbBlockReference" (vla-get-ObjectName vlaObject)) (wcmatch (setq layerName (strcase (vla-get-Layer vlaObject) t)) filteredLayers) (wcmatch (setq blockName (strcase (GetBlockName vlaObject) t)) filteredBlockNames) (setq ResultatsBlocks (cdr (assoc layerName ResultatsLayersBlocks))) (setq ResultatsBlock (assoc blockName ResultatsBlocks)) ) (progn (setq Total (1+ (cdr ResultatsBlock))) (setq ResultatsBlocks (subst (cons blockName Total) (assoc blockName ResultatsBlocks) ResultatsBlocks)) (setq ResultatsLayersBlocks (subst (cons layerName ResultatsBlocks) (assoc layerName ResultatsLayersBlocks) ResultatsLayersBlocks)) )) ) (if (and ResultatsLayersBlocks excludeEmptyRows) (progn ;; Nettoyage des lignes vides (setq ResultatsLayersBlocks (vl-remove-if '(lambda (x) (= 0 (apply '+ (mapcar 'cdr (cdr x))))) ResultatsLayersBlocks)) )) (if (and ResultatsLayersBlocks excludeEmptyColumns) (progn ;; Nettoyage des colonnes vides (setq j (length BlockNames)) (while (> j 0) (setq j (1- j)) (setq BlockName (nth j BlockNames)) (if (= 0 (apply '+ (mapcar '(lambda (x) (cdr (nth j (cdr x)))) ResultatsLayersBlocks))) (progn (setq ResultatsLayersBlocks (mapcar '(lambda (x) (cons (car x) (vl-remove-if '(lambda (y) (= BlockName (car y))) (cdr x)))) ResultatsLayersBlocks)) (setq BlockNames (vl-remove-if '(lambda (x) (= x BlockName)) BlockNames)) )) ) )) ;; Dessiner le tableau, s'il reste des calques et des blocs après épuration (if (> (* (length BlockNames) (length ResultatsLayersBlocks)) 0) (progn (setq NumRows (+ 2 (length ResultatsLayersBlocks))) ; 2 lignes de titre (setq NumColumns (+ 1 (length BlockNames))) ; 1 colonne de plus pour les noms de calque (setq Point3D_UCS (getpoint "\nPoint d'insertion: ")) (setq Point3D_WCS (trans Point3D_UCS 1 0)) ; Si pas en WCS (setq vlaPoint3D (PointToVariant Point3D_WCS)) (setq CurrentlayerWasLocked (= :vlax-true (vla-get-lock (vla-get-ActiveLayer ThisDrawing)))) (if CurrentlayerWasLocked (vla-put-lock (vla-get-ActiveLayer ThisDrawing) :vlax-false)) (setq vlaTableau (vla-AddTable ModelSpace vlaPoint3D NumRows NumColumns RowHeight ColWidth)) ;; Ligne 0 (setq row 0) (setq column 0) (SetCellProperties vlaTableau row column "Résultats" textsize acMiddleCenter nil) ;; Ligne 1 (setq row 1) (setq column 0) (while (< column (length BlockNames)) (SetCellProperties vlaTableau row (1+ column) (nth column BlockNames) textsize acMiddleCenter (cons acHorzBottom LineWeightMedium)) (setq column (1+ column)) ) ;; Lignes de résultat (setq i 0) (setq n (length ResultatsLayersBlocks)) (while (< i n) (setq ResultatsBlocks (nth i ResultatsLayersBlocks)) (setq row (+ i 2)) ; On saute les 2 lignes de titre ;; LayerName (setq column 0) (setq LayerName (car ResultatsBlocks)) (SetCellProperties vlaTableau row column LayerName textsize acMiddleLeft nil) ;; Quantité (setq j 0) (setq m (length BlockNames)) (setq ResultatsBlocks (cdr ResultatsBlocks)) (while (< j m) (setq column (1+ j)) ; On saute la colonne des noms de calque (setq Count (cdr (nth j ResultatsBlocks))) (SetCellProperties vlaTableau row column (itoa Count) textsize acMiddleCenter nil) (setq j (1+ j)) ) (setq i (1+ i)) ) (if CurrentlayerWasLocked (vla-put-lock (vla-get-ActiveLayer ThisDrawing) :vlax-true)) )) (princ) ) (defun SetCellProperties ( vlaTableau Row Column Texte TextHeight Alignment LineWeightPair ) ;; Gère les propriétés populaires des cellules d'un tableau ;; vlaTableau Row Column : Obligatoire, les autres sont facultatifs ;; Row, Column : INT, base 0 ;; Alignment: INT, ;; LineWeightPair: nil, sinon (cons "AcGridLineType enum" "acad_lweight enum"), soit (cons Position Épaisseur) ;; Support pour Acad2006 et Acad2009 (if LineWeightPair (vla-SetCellGridLineWeight vlaTableau Row Column (car LineWeightPair) (cdr LineWeightPair))) (if Alignment (vla-SetCellAlignment vlaTableau Row Column Alignment)) (if TextHeight (vla-SetCellTextHeight vlaTableau Row Column TextHeight)) (if Texte (if vla-SetCellValue (vla-SetCellValue vlaTableau Row Column Texte) ; AutoCAD 2009 (vla-SetText vlaTableau Row Column Texte) ; AutoCAD 2006 ) ) ) ;;; PointToVariant ;;; Conversion de Point2D ou Point3D en variant (defun PointToVariant ( point / arraySpace sArray ) (setq arraySpace (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length point))))) (setq sArray (vlax-safearray-fill arraySpace point)) (vlax-make-variant sArray) ) ;;; Obtenir le nom du bloc (accepte les blocs dynamiques) (defun GetBlockName (vlaBlock) (if (vlax-property-available-p vlaBlock 'EffectiveName) (vla-get-EffectiveName vlaBlock) (vla-get-Name vlaBlock)) )
  13. mikl63

    Compte des polylignes

    J'ai trouvé un truc parfait : tableau périmètre. Il crée même le tableau qui va avec. Je vais regarder celui dont tu me parle. Merci beaucoup
  14. mikl63

    Compte des polylignes

    Je viens de le tester mais c'est pas tout à fait ça. Ce lisp côte les pl et c'est pas vraiment le but que je recherche. Je veux uniquement qu'il me donne les longueurs totales. Avec ce lisp, je suis obligé de cliquer sur chacune des PL et sur tous les cotés puis d’additionner chacune des côtes. Dans ce cas, autant cliquer sur propriétés et additionner également. On se rapproche ceci dit
  15. Bonjour à tous, Je suis à la recherche d'un lisp permettant de compter les longueurs des polylignes en cumulés. Je m'explique, j'ai l'intention de créer plusieurs calques correspondants à des déperditions linéiques et de les représenter, chacune dans son calque approprié, par une polyligne. Le but étant de connaitre exactement les longueurs des pl attribuées à chaque calque. J'ai trouvé un lisp crée par l'excellent Gile mais il ne fonctionne pas. Enfin si il fonctionne mais il donne des valeurs erronées. Le seul souci dans l'histoire, c'est que mon collègue est sous un Autocad LT donc s'il existe un truc, je suis preneur. Merci d'avance
  16. Salut tout le monde, Dans le cadre de mon boulot, je souhaite acheter un autocad 2011 mais ça me semble très difficile à trouver. La version 2017 est systématiquement proposée or je n'ai pas besoin de 3d et mon pc n'est pas très puissant. Quelqu'un sait s'il est possible de commander une version à downgrader à l'installation ?
  17. mikl63

    Onglets de plans

    Bah tant pis ! quelle idée d'avoir choisi ce LT...J'ai une grosse quantité de lisps super utiles que je ne peux pas utiliser
  18. Salut tout le monde, Je bosse sur un autocad LT 2011 et je me demande s'il est possible de charger un arx comme sur un autocad full ? Je voudrais pouvoir avoir les onglets des plans ouverts (grâce à un arx dont j'ai perdu le nom) plutôt que de cliquer sur fenêtre tout le temps pour le retrouver mais quelque chose me dit que ça va pas être possible because LT. Faisable ou pas ?
  19. Salut, ben je suis plutôt d'accord avec Turtle. Une macro, pour moi, est une série d'actions lancée depuis une icône. Ex : ^C^C_.-SCALELISTEDIT;_Reset;_Yes;_Exit;_.-PURGE;_All;*;_No;_.LAYEREVAL;1;_.LAYERNOTIFY;0;CONTROLE;O; J'ai nommé cette "macro" nettoyage. J'ai bon là ?
  20. Et il se passe quoi si tu veux enregistrer sous ? Ca manque d'explications quand même
  21. Le point qui m'ennuie le plus, c'est certaines personnes envoyées en formation dans réel désir et qui s'en foutent royalement. Ayant connu une formation de 3 semaines il y a pas mal d'années, j'ai vu que beaucoup étaient là pour passer le temps et n'avaient pas l'intention de continuer dans cette voie. Sans prétention, je pense pouvoir m'en sortir jusqu'à intermédiaire mais quand je vois des pros comme patrick, Gilles, Steven...ils me donnent des complexes
  22. Bonjour à tous, Depuis longtemps, je songe à devenir formateur sur autocad. Je suis très loin d'avoir les connaissances des cadors du site, notamment au niveau lisps, mais c'est vraiment un truc qui me plairait. Je travaille sur AutoCAD depuis 8 ans 1/2 et j'aime beaucoup expliquer les différentes techniques pour gagner du temps par exemple. Le truc, c'est que je ne sais pas quel est le niveau demandé pour devenir formateur ? Je travaille uniquement en génie climatique donc j'ai peu de connaissances en mécanique. Je pense plus à des formations d'initiation au sein d'une entreprise comme l'afpa par exemple. Je rêve à votre avis ?
  23. mikl63

    Trier les filtres de calques

    je me disais bien aussi que j'avais mal compris
  24. mikl63

    Trier les filtres de calques

    Normalement, si tu cliques sur la flèche à droite dans la colonne "nom", la liste se retrouve dans l'ordre alphabétique
  25. mikl63

    Point d'insertion

    Ben justement, c'est le texte par défaut : 1.00 et 0.00 Du coup tu me donnes une idée : la valeur du point ou de la virgule à vérifier (dès que je saurai ou trouver cette option)
×
×
  • 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é