Aller au contenu

Nomenclature des cotes


Circus

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.3a

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

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

Créer un compte

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

Créer un nouveau compte

Se connecter

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

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

Information importante

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