l56 Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Bonjour à tous, Comment peut on savoir si un état des calques existe.Un truc du genre "(tblsearch" mais pas pour les calques mais pour les ETATS de calques. merci
Patrick_35 Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 SalutComme c'est en vlisp (setq lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))) (vlax-for lay lays (princ (strcat "\nEtat du calque --> " (vla-get-name lay))) (if (eq (vla-get-freeze lay) :vlax-true) (princ "\n\tCalque Gelé") (princ "\n\tCalque Non Gelé") ) (if (eq (vla-get-layeron lay) :vlax-true) (princ "\n\tCalque Actif") (princ "\n\tCalque Désactivé") ) (if (eq (vla-get-lock lay) :vlax-true) (princ "\n\tCalque Verrouillé") (princ "\n\tCalque Déverrouillé") ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Salut à tous. Patrick, il parle bien des états de calques sauvegardés. Sur ce lien : http://www.theswamp.org/index.php?topic=5516.0 Tu trouveras du code de Serge (un génial contributeur de CADxp qu'on ne voit malheureusement plus). C'est en anglais. On y apprends qu'il faut aller fouiller les dictionnaires étendus. Je t'aiderais volontiers si j'avais un peu de temps. Courage, c'est assez balaise ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 (cond ((not (setq return (entget (cdr (assoc 330 (entget (tblobjname "layer" "0"))))))) (setq return nil)) ((not (setq return (cdr (assoc 360 return)))) (setq return nil)) ((not (setq return (member (cons 3 "ACAD_LAYERSTATES") (entget return)))) (setq return nil)) (t (setq return (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= 3 (car x))) (entget (cdadr return))))) ) ) return Pas besoin de Vlisp apparemment ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Ah, tu connais ce site ;) . Il est de très bon niveauAh ok, un peu comme layer Manager ,mais pas état on peut comprendre plusieurs choses @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Houlà :exclam: Quelle élégance :D EDIT Je retire ma suggestion, c'était une bétise :P [Edité le 23/6/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
l56 Posté(e) le 23 juin 2006 Auteur Posté(e) le 23 juin 2006 Vous m' impressionnez les mecs ! Je fais comment pour vous remercier ?
Tramber Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Vous m' impressionnez les mecs ! Je fais comment pour vous remercier ? Arrête, je n'ai rien fait. Je lis le swamp depuis un an et y participe un tout petit peu. Mais c'est en anglais et, les locaux ont un language bourré d'expression. Difficile quand on ne connait que l'anglais académique. Pour te rendre service, j'ai cherché un peu, c'est tout. Quant on truc très élégant, l'usage du COND, je l'ai compris, mais je n'ai fait que le copier. Je suis la plus mauvaise personne pour lire les dictionnaries d'AutoCAD ! En testant, j'ai trouvé plus d'états de calque que je n'avais pas réellement, mais tous mes états à moi étaient là. Peut-être faut-il y regarder de + près. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Je fais comment pour vous remercier ? Juste en offrant une bolée @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 En testant, j'ai trouvé plus d'états de calque que je n'avais pas réellement Il semble que la routine retourne aussi les vues enregistrées avec le suffixe : ACAD_VIEWS_ On peut remplacer le dernier return par : (vl-remove-if '(lambda (x) (= "ACAD_VIEWS_" (substr x 1 11))) return) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 Oui, mais, justement, je ne pige pas bien pourquoi celui-ci figure dans la liste return. Dans un autre dessin, je le vois dans la boite, cette fois-ci. Mais la dernière fois, j'en ai identifié qui n'était pas dans la boite de dialogue. (j'ai fait ça tellement rapide). Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 23 juin 2006 Posté(e) le 23 juin 2006 J'ai essayé aussi dans un autre dessin avec des vues enregistrées (et sans le vl-remove-if), elles n'apparaissent pas dans la liste :casstet: Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Didier-AD Posté(e) le 30 août 2006 Posté(e) le 30 août 2006 Bonjour à tous, Comment peut on savoir si un état des calques existe.Un truc du genre "(tblsearch" mais pas pour les calques mais pour les ETATS de calques. merci Voici une routine qui retourne la liste des états de calque dans l'ordre de leur création (Defun AD_ListeEtatCalques ( / objlayers ss ent ent2 lisst lisst0) (setq objlayers (Vla-get-Layers (Vla-get-ActiveDocument (Vlax-Get-Acad-Object)))) (if (setq ss (cdr (assoc 360 (entget (vlax-vla-object->ename objlayers))))) (progn (setq ent (entget ss)) (if (setq ent2 (member (cons 3 "ACAD_LAYERSTATES") ent)) (progn (setq ent (entget (setq ent2 (cdadr ent2))) lisst0 (member (assoc 3 ent) ent) ) (if lisst0 (progn (setq lisst nil) (mapcar '(lambda (xxx) (if (= 3 (car xxx)) (setq lisst (cons (cdr xxx) lisst))) ) lisst0 ) ) ) ) ) ) ) (reverse lisst) ) ;;Il faut charger les Com (vl_load_com)
Didier-AD Posté(e) le 30 août 2006 Posté(e) le 30 août 2006 Ben où qu'elles sont mes jolies indentations dans mon code ??????
BTO Posté(e) le 1 février 2007 Posté(e) le 1 février 2007 Bonjour,pour vérifier qu'un etat des calques particulier est présent :par exemple (checkLayerStateName "toto") en vlisp : ; bto 1.070201(defun checkLayerStateName (LayersStateName / objXdict return) (setq objXdict (vla-GetExtensionDictionary (vla-get-Layers (vla-get-activedocument (vlax-get-acad-object))))) (setq return (not (vl-catch-all-error-p (vl-catch-all-apply '(lambda () (vla-item (vla-Item objXDict "ACAD_LAYERSTATES") LayersStateName)))))) (vlax-release-object objXdict) return) voila, ça devrait fonctionner Bruno Toniutti [Edité le 1/2/2007 par BTO]
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