Aller au contenu

Annotations (ACAD 2008-2011)


Messages recommandés

Posté(e)

 

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

Posté(e)

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ées

USEDSCLINSS 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

Posté(e)

 

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

Posté(e)

 

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 UsedSCLinSS

et non pas UsedSCLbySS

 

Mille mercis au Provencal, Le Decapode

 

 

Autodesk Expert Elite Team

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é