Circus Posté(e) le 16 septembre 2009 Posté(e) le 16 septembre 2009 bonjour, Comment je peux faire pour avoir une nomenclature de mes différentes cotes, j'arrive a récupe différente info avec EXTRACTDONNEES mais pas la valeur de la cote. C'est assez urgent, merci d'avance. KC [Edité le 16/9/2009 par Circus] Autocad Architecture Inventor 3d Viz Paint
lili2006 Posté(e) le 16 septembre 2009 Posté(e) le 16 septembre 2009 Bonjour à toutes et tous, (Gile) avait écrit ça (Pour la somme des longueurs, mais je ne sais si c'est ce que tu recherches,...=> (defun c:addim (/ ss tot) (setq tot 0 n 0 ) (if (setq ss (ssget '((0 . "DIMENSION")))) (while (setq dim (ssname ss n)) (setq tot (+ tot (cdr (assoc 42 (entget dim)))) n (1+ n) ) ) ) (alert (strcat "Distance totale = " (rtos (/ tot 100.0) 2 2) ) ) (princ) ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Circus Posté(e) le 16 septembre 2009 Auteur Posté(e) le 16 septembre 2009 Salut, non c'est pas tout a fais ca, moi je voudrais que ca me sorte un tableau avec la quantité de cote selon leur valeur. Je peux récup plein d'info sauf la dimension... Autocad Architecture Inventor 3d Viz Paint
lili2006 Posté(e) le 16 septembre 2009 Posté(e) le 16 septembre 2009 Re, Plutôt ça alors ? ;;; EXTRACTDIM ;;; Dans le cas d'extraction de longueur de tuyau, on ne peut pas (ou on ne veut pas) se servir d'attributs ;;; mais plutôt de cotes. Le programme suivant permet l'extraction de ces longueurs ainsi que des blocs ;;; pouvant se trouver à chaque base de ligne d'extension. ;;; Le but de connaitre ce bloc servira éventuellement à déterminer le type d'accessoire dans lequel le tuyau ;;; est branché puis à rectifier la longueur mesurée ;;; ;;; ;;; Deux formats de sortie sont disponibles: SDF et CDF ;;; Avec ces 2 formats, il est très facile d'importer les données dans Excel ;;; Il est possible de choir entre écrire une ligne d'entête ou non. Voir (setq Entete t) ;;; Chaque ligne comporte 6 champs: ;;; 1) Le handle de la cote ;;; 2) La longueur de la cote ;;; 3) Le handle du bloc (si détecté) au début de la cote ;;; 4) Le nom du bloc en question (ex: Valve, Pompe, Coude, etc) ;;; 5) Le handle du bloc (si détecté) à la fin de la cote ;;; 6) Le nom du bloc en question (ex: Valve, Pompe, Coude, etc) ;;; Si la cote n'est pas reliée à un bloc, apparaitra dans le champs ;;; ;;; Exemple de sortie en format SDF (String Delimited File), avec entête et "\t" comme délimiteur ;;; DimHandle Longueur HandleBlocA NomBlocA HandleBlocB NomBlocB ;;; 1F9 613.47990366 1EB Pompe 1F0 Valve ;;; 21E 774.25851188 21B Pompe 21C Valve ;;; 230 1080.50347436 22D Pompe 22E Valve ;;; 242 1317.84332738 23F Pompe 240 Valve ;;; 254 1509.24642685 251 Pompe 252 Valve ;;; 266 1807.83527069 263 Pompe 264 Valve ;;; 300 1807.83527069 2FE Pompe ;;; 311 1807.83527069 30F Valve ;;; 322 1807.83527069 ;;; ;;; ;;; Exemple de sortie en format CDF (Coma Delimited File), avec entête ;;; "DimHandle","Longueur","HandleBlocA","NomBlocA","HandleBlocB","NomBlocB " ;;; "1F9",613.47990366,"1EB","Pompe","1F0","Valve" ;;; "21E",774.25851188,"21B","Pompe","21C","Valve" ;;; "230",1080.50347436,"22D","Pompe","22E","Valve" ;;; "242",1317.84332738,"23F","Pompe","240","Valve" ;;; "254",1509.24642685,"251","Pompe","252","Valve" ;;; "266",1807.83527069,"263","Pompe","264","Valve" ;;; "300",1807.83527069,"2FE","Pompe"," "," " ;;; "311",1807.83527069," "," ","30F","Valve" ;;; "322",1807.83527069," "," "," "," " ;;; Par Serge Camiré, 2008-08-25 (defun c:extractDim ( / Entete FileName Format infos SplitChar ss ) (and (setq ss (getDimension)) (setq infos (extractDimensionInfo ss)) (setq FileName (getfiled "Fichier de sortie pour les cotes" "" "txt" (+ 1 4))) (or (initget "Sdf Cdf") (setq Format (getkword "\nFormat de sortie [CDF/SDF] : ")) (setq Format "SDF") ) (setq Format (if (= Format "Cdf") 'cdf 'sdf)) (setq SplitChar (if (= Format 'cdf) "," "\t")) ; Délimiteur (un caractère) (setq Entete t) ; T pour écrire le nom des champs sur la première ligne (writeDimensionInfo FileName infos Entete SplitChar Format) ) (princ) ) (defun writeDimensionInfo ( FileName infos Entete SplitChar Format / fptr i info msg n ) ;; Écriture des résultats ;; Filename: Nom du fichier ;; infos: liste de liste obtenues via extractDimensionInfo ;; Entete: T pour écrire le nom des champs sur la première ligne ;; SplitChar: Caractère de séparation (un tab est suggéré) ;; Format: 'cdf ou 'sdf (setq i 0) (setq n (length infos)) (if (not (and (= Format 'sdf) SplitChar (= (type SplitChar) 'str) (/= 1 (strlen SplitChar)))) (setq SplitChar "\t")) (if (= Format 'cdf) (setq SplitChar "\",\"")) (setq fptr (open FileName "w")) (if Entete (progn (setq msg (strcat "DimHandle" SplitChar "Longueur" SplitChar "HandleBlocA" SplitChar "NomBlocA" SplitChar "HandleBlocB" SplitChar "NomBlocB")) (if (= Format 'cdf) (setq msg (strcat "\"" msg "\""))) (write-line msg fptr) )) (while ((setq msg "") (if (= Format 'cdf) (progn (setq info (nth i infos)) (setq msg (strcat "\"" (nth 0 info) "\"," (nth 1 info) ",\"" (nth 2 info) SplitChar (nth 3 info) SplitChar (nth 4 info) SplitChar (nth 5 info) "\"")) ) (progn (setq info (reverse (nth i infos))) (foreach elem info (setq msg (strcat SplitChar elem msg))) (setq msg (substr msg 2)) ; Enlever le premier caractère )) (write-line msg fptr) (setq i (1+ i)) ) (close fptr) nil ) (defun extractDimensionInfo ( ss ; Sélection de cotes / Ancrage1 Ancrage2 Blocget BlocNameA BlocNameB corner1 corner2 DimObject DimObjectGet Handle HandleA HandleB i info infos longueur n PickBoxUnits PickBoxUnitsHalf ssAncrage UnitsPerPixel ) ;; extractDimensionInfo ;; Extrait les informations relatives aux cotes dans le format ;; (list (list Handle Longueur HandleBlocA NomBlocA HandleBlocB NomBlocB)) ;; L'idée étant de savoir si des blocs sont ancrés à la base des lignes ;; d'extension (setq i 0) (setq n (sslength ss)) ;; Pour calcul d'une zone de la taille du PickBox (setq UnitsPerPixel (/ (getvar "viewsize") (cadr (getvar "screensize")))) (setq PickBoxUnits (* (getvar "pickbox") UnitsPerPixel)) (setq PickBoxUnitsHalf (* 0.5 PickBoxUnits)) (while ((setq DimObject (ssname ss i)) (setq DimObjectGet (entget DimObject)) (setq Handle (cdr (assoc 5 DimObjectGet))) (setq Ancrage1 (cdr (assoc 13 DimObjectGet))) (setq Ancrage2 (cdr (assoc 14 DimObjectGet))) (setq longueur (cdr (assoc 42 DimObjectGet))) ; Autre possibilité ;; (setq IDimObject (vlax-ename->vla-object DimObject)) ;; (setq longueur (vla-get-Measurement IDimObject)) ;; Chercher s'il y a un bloc au voisinage du point d'ancrage 1 (setq Corner1 (mapcar '- Ancrage1 (list PickBoxUnitsHalf PickBoxUnitsHalf 0))) (setq Corner2 (mapcar '+ Ancrage1 (list PickBoxUnitsHalf PickBoxUnitsHalf 0))) (setq ssAncrage (ssget "_c" Corner1 Corner2 (list (cons 0 "insert")))) (if ssAncrage (progn (setq Blocget (entget (ssname ssAncrage 0))) (setq BlocNameA (cdr (assoc 2 Blocget))) (setq HandleA (cdr (assoc 5 Blocget))) ) (progn (setq BlocNameA "") (setq HandleA "") )) ;; Chercher s'il y a un bloc au voisinage du point d'ancrage 2 (setq Corner1 (mapcar '- Ancrage2 (list PickBoxUnitsHalf PickBoxUnitsHalf 0))) (setq Corner2 (mapcar '+ Ancrage2 (list PickBoxUnitsHalf PickBoxUnitsHalf 0))) (setq ssAncrage (ssget "_c" Corner1 Corner2 (list (cons 0 "insert")))) (if ssAncrage (progn (setq Blocget (entget (ssname ssAncrage 0))) (setq BlocNameB (cdr (assoc 2 Blocget))) (setq HandleB (cdr (assoc 5 Blocget))) ) (progn (setq BlocNameB "") (setq HandleB "") )) (setq info (list Handle (rtos longueur 2 8) HandleA BlocNameA HandleB BlocNameB)) (setq infos (append infos (list info))) (setq i (1+ i)) ) (setq infos (reverse infos)) infos ) (defun getDimension ( / initgetList layerName layerNames layers methode ss ) ;; Obtenir un jeu d'objets "AcDbRotatedDimension" ;; Retourne : 'PickSet ou nil (initget "Tout Calque Sélection") (setq methode (getkword "\nExtraction des cotes [Tout/Calque/Sélection] : ")) (if (not methode) (setq methode "Sélection")) ; Précaution pour les anciennes versions d'AutoLISP (cond ((= "Tout" methode) (setq ss (ssget "_x" (list (cons 0 "dimension") (cons 100 "AcDbRotatedDimension") (cons 410 (getvar "ctab")))))) ((= "Calque" methode) ;; Construire la liste des calques (setq layers (vla-get-layers (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq layerNames nil) (vlax-for layer layers (setq layerNames (cons (strcase (vla-get-name layer)) layerNames))) (setq layerNames (vl-sort layerNames ' ;; Préparer le Initget (setq initgetList "") (foreach layerName layerNames (setq initgetList (strcat initgetList " " layerName))) (setq initgetList (substr initgetList 2)) ; Enlever le premier " " (initget "Nom ?") (setq ss (nentsel "\nMontrer un objet du calque ou [Nom/?]: ")) (cond ((= (type ss) 'list) (setq layerName (cdr (assoc 8 (entget (car ss))))) (setq ss (ssget "_x" (list (cons 0 "dimension") (cons 100 "AcDbRotatedDimension") (cons 8 layerName) (cons 410 (getvar "ctab"))))) ) ((not ss) nil) ((= ss "?") (princ "\nListe des calques du dessin:") (foreach layerName layerNames (princ (strcat "\n\t" layerName))) (initget initgetList) (setq layerName (getkword (strcat "\nNom du calque : "))) (if (not layerName) (setq layerName (strcase (getvar "clayer")))) ; Précaution pour les anciennes versions d'AutoLISP (setq ss (ssget "_x" (list (cons 0 "dimension") (cons 100 "AcDbRotatedDimension") (cons 8 layerName) (cons 410 (getvar "ctab"))))) ) ((= ss "Nom") (initget initgetList) (setq layerName (getkword (strcat "\nNom du calque : "))) (if (not layerName) (setq layerName (strcase (getvar "clayer")))) ; Précaution pour les anciennes versions d'AutoLISP (setq ss (ssget "_x" (list (cons 0 "dimension") (cons 100 "AcDbRotatedDimension") (cons 8 layerName) (cons 410 (getvar "ctab"))))) ) (t (setq ss nil)) ) ) ((= "Sélection" methode) (setq ss (ssget (list (cons 0 "dimension") (cons 100 "AcDbRotatedDimension") (cons 410 (getvar "ctab"))))) ) ) ss ) (princ "\nChargement réussi. Tapez EXTRACTDIM pour lancer la routine.") (princ) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Circus Posté(e) le 17 septembre 2009 Auteur Posté(e) le 17 septembre 2009 Merci de chercher a m'aider !! ce lisp doit etre un peut vieux ou alors il fait appelle a d'autres lisp, j'ai pas la commande "getDimension" Autocad Architecture Inventor 3d Viz Paint
lili2006 Posté(e) le 17 septembre 2009 Posté(e) le 17 septembre 2009 Bonjour à toutes et tous, Il fonctionne plutôt bienchez moi (V2008 !). Attention, pollution du code par un smilley,... Le fichier ici Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Circus Posté(e) le 18 septembre 2009 Auteur Posté(e) le 18 septembre 2009 MERCI !! Arf, je l'avais vu en plus le smiley... Autocad Architecture Inventor 3d Viz Paint
lili2006 Posté(e) le 18 septembre 2009 Posté(e) le 18 septembre 2009 Bonjour à toutes et tous, Est-ce que ce lisp correspond à tes besoins ? @+, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Circus Posté(e) le 23 septembre 2009 Auteur Posté(e) le 23 septembre 2009 Salut, Désolé je t'ai répondu mais j'ai du mal cliquer , bref...je refait mon poste. Ben c'est super, ca ma rendu grand service !! 73 cotes de longueur a vérifier qu'elles ont bien été reporté dans une fiche de débit... Pour ma part si ca devait évoluer, il faudrait extraire la dimension , le type de cote et le nom du calque. Petit soucis, j'ai des cotes a la dimension de 2300 par exemple et 2300.14189769 à l'extraction... Encore une fois merci et désolé d'avoir pas répondu aussitot... Autocad Architecture Inventor 3d Viz Paint
lili2006 Posté(e) le 23 septembre 2009 Posté(e) le 23 septembre 2009 Bonjour à toutes et tous, j'ai des cotes a la dimension de 2300 par exemple et 2300.14189769 à l'extraction... Format des cotes à vérifier je pense,... Pour ma part si ca devait évoluer, il faudrait extraire la dimension , le type de cote et le nom du calque. Sur un fichier ".csv", par exemple ? Bonne idée, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Circus Posté(e) le 23 septembre 2009 Auteur Posté(e) le 23 septembre 2009 Et bien ya le choix entre extrait avec des séparations virgule ou tabulation, j'utilise tabulation c'est nikel , et ça fais un *.txt, ça me va. Par contre autre petit soucis, j'aime bien travailler depuis un onglet a cause des calques...seulement lors de la sélection des cotes ca ne fonctionne pas, il faut passer par l'espace objet. Je vais me faire une macro excel pour ce petit soucis de dimension. Autocad Architecture Inventor 3d Viz Paint
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant