Aller au contenu

Echelle de blocs annotatifs


Messages recommandés

Posté(e)

Bonjour.

 

J'ai créé des blocs annotatifs pour les points altitudes. J'ai une liste d'échelle personnalisée et j'utilise les lisps de Gilles pour nettoyer la liste d'échelle et charger ma liste personnalisée par défaut au démarrage.

Tout marche très bien en apparence... jusqu'à ce que je ferme mon fichier, à la réouverture c'est le bazar total :

- les attributs ont bougé de place, il faut que je fasse systématiquement battman pour les remettre à la bonne distance de leur point d'insertion

- l'échelle des blocs (dans propriété) a changé, ils sont à 0.1, 0.05... et quand je ne les remet pas à échelle 1 ils finissent par disparaître (échelle 0.0000 dans les propriétés).

- Ils ne sont plus définis pour les échelles pour lesquelles je les ai définis (avec _objectsacle) je dois systématiquement leur rajouter les échelles

 

Je parcours tous les forums de cadxp depuis des mois à la recherche de la variable miracle mais j'ai peur que le problème soit plus complexe, en tout cas trop pour moi.

 

Je me résous donc à lancer la question espérant qu'un des magiciens qui habite ce site connaît la solution, et je les remercie au passage de leur redoutable efficacité.

 

[Edité le 21/6/2011 par muriel]

Posté(e)

Bonjour,

 

- il y a 2 update pour la 2011, sont-ils installés ? ( http://usa.autodesk.com/adsk/servlet/ps/dl/index?siteID=123112&id=2334435&linkID=9240618#section2 )

 

- as-tu essayé la commande _AUDIT en lui demandant de réparer les erreurs ?

 

N'hésite pas à poster un fichier en exemple si c'est possible. ;)

 

 

 

 

[Edité le 21/6/2011 par bryce]

Posté(e)

 

bonjour bryce,

 

Oui, les 2 mises à jour 2011 sont installées et audit ne signale aucune erreur, je pense que mon problème vient des lisps de réinitialisation des échelles et prise en charge de ma liste d'échelles personalisée qui se charge au démarrage : lisps de Gile trouvés sur ce post.

 

http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=24700#pid

 

Quand je supprime le fichier accadoc.lsp où je les ai compilées, je n'ai plus ce problème, mais je n'ai plus non plus de réinitialisation avec ma liste personnalisée.

 

Voici la copie du fidhier accadoc :

 

;;;============================================================;;;

 

;;;========================= ROUTINES =========================;;;

 

;;;============================================================;;;

 

 

 

;; GetCurrentScaleList (gile)

 

;; Retourne une liste des échelles courantes sous forme de

 

;; sous listes : (Nom UnitéPapier UnitéDessin)

 

 

 

(defun GetCurrentScaleList (/ elst result)

 

(mapcar (function (lambda (x) (ScaleDatas (cdr x))))

 

(GetDictEntries

 

(dictsearch (namedobjdict) "ACAD_SCALELIST")

 

)

 

)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; SetScaleList (gile)

 

;; Définit la liste des échelles suivant une liste

 

;;

 

;; Argument : lst une liste de sous liste du type : (Nom UnitéPapier UnitéDessin)

 

 

 

(defun SetScaleList (lst / dict)

 

(entmod (vl-remove-if

 

'(lambda (x) (or (= (car x) 3) (= (car x) 350)))

 

(setq dict (dictsearch (namedobjdict) "ACAD_SCALELIST"))

 

)

 

)

 

(setq dict (cdr (assoc -1 dict))

 

n -1

 

)

 

(foreach s lst

 

(dictadd dict

 

(strcat "A" (itoa (setq n (1+ n))))

 

(entmakex

 

(list

 

'(0 . "SCALE")

 

'(100 . "AcDbScale")

 

(cons 300 (car s))

 

(cons 140 (cadr s))

 

(cons 141 (caddr s))

 

)

 

)

 

)

 

)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; ScaleDatas (gile)

 

;; Retourne la liste (Nom UnitéPapier UnitéDessin) de l'échelle

 

;;

 

;; Argument scl (ENAME) un objet "SCALE"

 

 

 

(defun ScaleDatas (scl / elst)

 

(setq elst (entget scl))

 

(list

 

(cdr (assoc 300 elst))

 

(cdr (assoc 140 elst))

 

(cdr (assoc 141 elst))

 

)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; GetAnnotativeScaleList (gile)

 

;; Retourne la liste des échelles annotatives utilisées sous forme de

 

;; sous listes : (Nom UnitéPapier UnitéDessin)

 

 

 

(defun gc:GetAnnotativeScaleList (/ 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

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; GetExtDict (gile)

 

;; Retourne le dictionnaire d'extension de l'entité (ou nil)

 

;;

 

;; Argument : ent (ENAME)

 

 

 

(defun GetExtDict (ent)

 

(cdr

 

(assoc 360

 

(member '(102 . "{ACAD_XDICTIONARY") (entget ent))

 

)

 

)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; GetDictEntries

 

;; Retourne la liste des entrées du dictionnaire

 

;; sous forme de paires pointées (Nom . ENAME)

 

;;

 

;; Argument : dict le dictionnaire (ENAME ou liste DXF)

 

 

 

(defun 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)

 

)

 

 

 

;;;===========================================================;;;

 

;;;======================== COMMANDES ========================;;;

 

;;;===========================================================;;;

 

 

 

;; SAVESCALES (gile)

 

;; Lance la commande SCALELISTEDIT et sauvegarde le résultat

 

;; dans une variable d'environnement

 

 

 

(defun c:SaveScales ()

 

(initdia)

 

(vl-cmdf "_.scalelistedit")

 

(while (/= (getvar 'cmdactive) 0)

 

(vl-cmdf pause)

 

)

 

(setenv "SavedScaleList"

 

(vl-prin1-to-string (GetCurrentScaleList))

 

)

 

(princ)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; RESTORESCALES (gile)

 

;; Restaure la liste sauvegardée avec SAVESCALES

 

;; ou lance SCALAESAVE s'il n'y a pas de sauvegarde précédente

 

 

 

(defun c:RestoreScales (/ lst)

 

(if (and

 

(setq lst (getenv "SavedScaleList"))

 

(setq lst (read lst))

 

)

 

(SetScaleList lst)

 

(c:SaveScales)

 

)

 

(princ)

 

)

 

 

 

;;;============================================================;;;

 

 

 

;; PURGESCALES (gile)

 

;; Supprime toutes les échelles excepté les échelles annotatives utilisées et "1:1"

 

 

 

(defun c:PurgeScales (/ alst cnt)

 

(setq alst (gc:GetUsedScaleList)

 

cnt 0

 

)

 

(foreach p (dictsearch (namedobjdict) "ACAD_SCALELIST")

 

(and

 

(= 350 (car p))

 

(setq slst (gc:ScaleDatas (cdr p)))

 

(/= "1:1" (car slst))

 

(null (member slst alst))

 

(entdel (cdr p))

 

(setq cnt (1+ cnt))

 

)

 

)

 

(princ (strcat (itoa cnt) " échelle(s) purgée(s)."))

 

(princ)

 

)

;;;============================================================;;;

 

;;;====================== INITIALISATION ======================;;;

 

;;;============================================================;;;

 

 

 

;; Placé dans un fichier de chargement automatique,

 

;; initialise la liste des échelles suivant la liste sauvegardée

 

 

 

((lambda (lst)

 

(and lst SetScaleList (SetScaleList (read lst)))

 

)

 

(getenv "SavedScaleList")

 

)

 

 

 

 

Mais Je l'ai peut-être mal utilisé?

Posté(e)

Salut,

 

Tu peux essayer en supprimant uniquement la restauration automatique à la fin, à partir de :

 

;;;====================== INITIALISATION ======================;;;

 

Les commandes seront ainsi toujours accessibles.

 

 

 

 

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Merci pour vos réponses,

 

Bryce, merci pour tes conseil, il fallait effectivement que je me penche un peu plus en détail sur ce lisp. Il m'est très utile parce-que je travaille en permanence avec en xref des plans qui viennent de partout, et j'ai besoin qu'à l'impression tous les points altitude s'affichent pareil. Et donc que toutes les xrefs aient la même liste d'échelle.

Grâce au lisp de Gile je n'ai qu'à ouvrir les plans remplacer les blocs altitude par mes blocs annotatifs et le tour est joué.

 

Gile j'ai testé en supprimant la restauration et ça marche. Super!

Posté(e)

La méthode était effectivement un peu trop radicale, j'ai modifié le code.

Ça semble fonctionner même avec la restauration automatique, mais Bryce a raison, ce comportement est superflu, je l'ai supprimé du message original.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

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é