tyrese69_ Posté(e) le 13 décembre 2011 Posté(e) le 13 décembre 2011 Bonjour à tous, Avec le LISP il est possible de lire les PLOTSTYLES d'un fichier avec STB ! ' (setq root (entget (namedobjdict))) ' (setq ed (entget (cdr (cadr (member '(3 . "ACAD_PLOTSTYLENAME") root))))) ' ' ' ((-1 . <Nom d'entité: 7ed2ec30>) (0 . "ACDBDICTIONARYWDFLT") (5 . "6") (102 . "{ACAD_REACTORS") ' (330 . <Nom d'entité: 7ed2ec38>) (102 . "}") ' (330 . <Nom d 'entité: 7ed2ec38>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) ' (3 . "Gris") (350 . <Nom d'entité: 7ed29e88>) ' (3 . "Normal") (350 . <Nom d'entité: 7ed2ec28>) ' (3 . "Style_1") (350 . <Nom d'entité: 7ed36a40>) ' (3 . "Style_2") (350 . <Nom d'entité: 7ed34cd0>) ' (100 . "AcDbDictionaryWithDefault") (340 . <Nom d'entité: 7ed2ec28>)) 1 ere question comment extraire de cette liste les valeurs assoc 3 des styles ? (en lisp)2 nde question En VBA comment lire ces même valeurs ? Daniel OLIVES
(gile) Posté(e) le 13 décembre 2011 Posté(e) le 13 décembre 2011 Salut, 1) En LISP, je te propose une fonction générique qui retourne toutes les entrées d'un dictionnaire sous forme de paires pointées : (clé . ename). ;; gc: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 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) ) tu peux utiliser cette routine pour retrouver l'entrée "ACAD_PLOTSTYLENAME" dans le dictionnaire racine puis pour retrouver toutes les entrées de ce dictionnaire :(gc:GetDictEntries (cdr (assoc "ACAD_PLOTSTYLENAME" (gc:GetDictEntries (namedobjdict))))) Si tu ne veux que les nom (clés)(mapcar 'car (gc:GetDictEntries (cdr (assoc "ACAD_PLOTSTYLENAME" (gc:GetDictEntries (namedobjdict)))))) 2) en VBA je ne pourrais pas trop t'aider (je ne connais pas). À mon avis, les dictionnaires sont plus faciles à manipuler en "pur LISP" (via DXF) qu'avec l'API COM/activeX. ThisDrawing.Dictionaries.Item("ACAD_PLOTSTYLENAME")devrait retourner le dictionnaire, ensuite avec une boucle For ou For Each tu devrais pouvoir retrouver les entrées. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
tyrese69_ Posté(e) le 13 décembre 2011 Auteur Posté(e) le 13 décembre 2011 Bonjour Gile,Je venais de lire ton post sur ce forum et aussi le sujet sur EDICT, trés bien commenté et trés explicite ! Trés bon travail ! Il faut que je m'y mettes au dot net !! Encore merci. Bonne fin de journée ! Daniel OLIVES
tyrese69_ Posté(e) le 13 décembre 2011 Auteur Posté(e) le 13 décembre 2011 Re bonjour, Voici ce que cela donne en mix LISP et VBA via le VLAX : Dim repCTB As String Dim vl As New VLAX Set vl = Nothing repCTB = vl.EvalLispExpression("(setq sPathCTB sPathCTB)") '********************************************************************************* ' Si PSTYLEPOLICY = 1 (CTB) alors DEFLPLSTYLE = "PARCOULEUR" ' Si PSTYLEPOLICY = 0 (STB) alors DEFLPLSTYLE = "NORMAL" ' Set objElem = ThisDrawing.Layers ' nombre de calques Cpt1 = objElem.Count ThisDrawing.SendCommand ("Lstyles") & vbCrLf Dim Val1Style As Variant Val1Style = vl.GetLispList("(setq LSTYLplot (mapcar 'car (gc:GetDictEntries (cdr (assoc ""ACAD_PLOTSTYLENAME"" (gc:GetDictEntries (namedobjdict)))))))") Dans la variable Val1Style se trouvent les valeurs des "PlotStyle" daniel OLIVES
tyrese69_ Posté(e) le 29 février 2012 Auteur Posté(e) le 29 février 2012 Bonsoir à tous, Une petite question complémentaire: Comment se met à jour le dictionnaire si l'on change le fichier "stb" de la présentation active ? Afin de récupérer la bonne liste des styles ! Daniel OLIVES
tyrese69_ Posté(e) le 27 août 2014 Auteur Posté(e) le 27 août 2014 Re bonjour,Aprés pas mal de temps j'ai une question sur ce sujet Comment récupérer la paire "Nom du style" et "Couleur" ("Normal" . 160) pour chaque style du m^me dictionnaire J'ai un peut perdu mes bases de lisp Daniel OLIVESTPS membre de WSP
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