lecrabe Posté(e) le 8 septembre 2010 Posté(e) le 8 septembre 2010 Hello J'aimerais savoir facilement pour un dessin sous AutoCAD 2008-2011 si les echelles d'annotations ont ete utilisees oui/non ? Par quel moyen simple, puis je voir ca instantanement ? Et sinon SVP j'aurais besoin d'un petit programme en VLisp qui sur une selection AutoCAD classique me donnerait : - le nbr d'objets total selectionnes- dont xxxx objets utilisant des echelles d'annotations- avec yyyy echelles d'annotations differentes Ainsi j'aurais une bien meilleure idee de l'utilisation des echelles d'annotations dans un dessin donne ! Merci d'avance pour votre aide, Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 8 septembre 2010 Posté(e) le 8 septembre 2010 Salut, Un petit truc vite fait qui utilise quelques routines que je pensais avoir déjà postée (mais que je n'ai pas retrouvée)USEDSCL affiche la liste de toutes les échelles utiliséesUSEDSCLINSS affiche le nombre d'entités sélectionnées, le nombre d'entités annotatives et les échelles utilisées par ces entités. ;;;===========================================================;;; ;;;======================== COMMANDES ========================;;; ;;;===========================================================;;; (defun c:UsedScl () (alert (strcat "Echelles utilisées :" (apply 'strcat (mapcar '(lambda (x) (strcat "\n" (car x))) (vl-sort (gc:GetUsedScaleList) '(lambda (x1 x2) ( (/ (caddr x2) (cadr x2)) ) ) ) ) ) ) ) ) ;;;===========================================================;;; (defun c:UsedSclInSs (/ n cnt ss scl lst) (if (setq n -1 cnt 0 ss (ssget) ) (progn (while (setq ent (ssname ss (setq n (1+ n)))) (if (setq scl (gc:GetEntityScaleList ent)) (progn (setq cnt (1+ cnt)) (foreach s scl (or (vl-position s lst) (setq lst (cons s lst))) ) ) ) ) (alert (strcat (itoa (sslength ss)) " objets sélectionnés dont " (itoa cnt) " annotatif(s)\nEchelles utilisées :" (apply 'strcat (mapcar '(lambda (x) (strcat "\n" (car x))) (vl-sort lst '(lambda (x1 x2) ( (/ (caddr x2) (cadr x2)) ) ) ) ) ) ) ) ) ) (princ) ) ;;;===========================================================;;; ;;;====================== SOUS ROUTINES ======================;;; ;;;===========================================================;;; ;; gc:GetUsedScaleList (gile) ;; Retourne la liste des échelles annotatives utilisées sous forme de ;; sous listes : (Nom UnitéPapier UnitéDessin) (defun gc:GetUsedScaleList (/ n ss ent xDict dict slst result) (setq n 0) (if (setq ss (ssget "_X")) (while (setq ent (ssname ss n)) (setq n (1+ n)) (and (setq xDict (gc:GetExtDict ent)) (setq dict (dictsearch xDict "AcDbContextDataManager")) (setq dict (dictsearch (cdr (assoc -1 dict)) "ACDB_ANNOTATIONSCALES" ) ) (foreach p (gc:GetDictEntries dict) (setq slst (gc:ScaleDatas (cdr (assoc 340 (entget (cdr p))))) result (if (not (vl-position slst result)) (cons slst result) result ) ) ) ) ) ) result ) ;;;============================================================;;; ;; gc:GetEntityScaleList (gile) ;; Retourne la liste des échelles annotatives de l'entité sous forme de ;; sous listes : (Nom UnitéPapier UnitéDessin) ;; ;; Argument : ent (ENAME) le nom de l'entité (defun gc:GetEntityScaleList (ent / xDict dict slst) (and (setq xDict (gc:GetExtDict ent)) (setq dict (dictsearch xDict "AcDbContextDataManager")) (setq dict (dictsearch (cdr (assoc -1 dict)) "ACDB_ANNOTATIONSCALES" ) ) (foreach p (gc:GetDictEntries dict) (setq slst (cons (gc:ScaleDatas (cdr (assoc 340 (entget (cdr p))))) slst ) ) ) ) slst ) ;;;============================================================;;; ;; gc:ScaleDatas (gile) ;; Retourne la liste (Nom UnitéPapier UnitéDessin) de l'échelle ;; ;; Argument scl (ENAME) un objet "SCALE" (defun gc:ScaleDatas (scl / elst) (setq elst (entget scl)) (list (cdr (assoc 300 elst)) (cdr (assoc 140 elst)) (cdr (assoc 141 elst)) ) ) ;;;============================================================;;; ;; gc:GetExtDict (gile) ;; Retourne le dictionnaire d'extension de l'entité (ou nil) ;; ;; Argument : ent (ENAME) le nom de l'entité (defun gc:GetExtDict (ent) (cdr (assoc 360 (member '(102 . "{ACAD_XDICTIONARY") (entget ent)) ) ) ) ;;;============================================================;;; ;; gc:GetDictEntries (gile) ;; Retourne la liste des entrées du dictionnaire ;; sous forme de paires pointées (Nom . ENAME) ;; ;; Argument : dict (ENAME ou liste DXF) le dictionnaire (defun gc:GetDictEntries (dict / result) (and (= (type dict) 'ENAME) (setq dict (entget dict))) (while (setq dict (vl-member-if (function (lambda (x) (= (car x) 3))) (cdr dict) ) ) (setq result (cons (cons (cdar dict) (cdadr dict)) result)) ) (reverse result) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 8 septembre 2010 Auteur Posté(e) le 8 septembre 2010 Hello Test sous MAP 2009 : - pour un dessin sans echelle, c OK Mais pour un dessin avec des echelles, tu as oublie la routine : gc:ScaleDatas Dans l'attente de la micro-orrection, encore merci, Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 8 septembre 2010 Posté(e) le 8 septembre 2010 C'est réparé (et testé dans un profil vierge). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 8 septembre 2010 Auteur Posté(e) le 8 septembre 2010 Hello J'ai recharge ta nouvelle version et c OK pour moi sous MAP 2009 si quelqu'un pouvait tester sous la 2011, ca serait sympa !? et donc il faut une routine pour savoir si c'est foutues echelles sont utilisees ou pas ? Quoique en tentant de supprimer les echelles inutiles, on garde les echelles utiles DONC utilisees !! Par contre la 2eme routine se nomme UsedSCLinSSet non pas UsedSCLbySS Mille mercis au Provencal, Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 8 septembre 2010 Posté(e) le 8 septembre 2010 J'ai fait mes tests sur A2011 64 bits Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
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