bonuscad Posté(e) le 5 février 2008 Posté(e) le 5 février 2008 Bonjour, Voilà mon problème: Je veux créer un groupe, mais sans passer par le dictionnaire "ACAD_GROUP" J'arrive a créer le nouveau dictionnaire, puis le groupe avec (entmakex), puis l'ajout de ce nouveau groupe au dictionnaire avec (dictadd) Tant que je n'exécute pas un contrôle du dessin, tout va bien... (enregistrement du fichier, manipulation du groupe)Si je fais un contrôle en corrigeant les erreurs, des avertissements apparaissent lors de l'enregistrement. Je suis obligé de décomposer mon groupe :mad: Je me demandais si ma démarche était correcte, ou s'il faut obligatoirement passé par le dictionnaire "ACAD_GROUP".Si je ne me suis pas fourvoyé dans la manipulation des dictionnaires, c'est que mon code a un problème. Quelqu'un a une expérience à ce sujet? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 5 février 2008 Posté(e) le 5 février 2008 Salut Bonus Pour créer un groupe TEST Je pointe sur la table des groupes(setq gr (vla-get-groups (vla-get-activedocument (vlax-get-acad-object)))) Je créé mon groupe test(setq my (vla-add gr "Test")) Je sélectionne mes objets(ssget) Je transforme ma selection en vlisp(setq sel (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) J'ajoute la sélection dans le groupe(vlax-map-collection sel '(lambda (x)(vlax-invoke my 'appenditems (list x)))) Je vide ma sélection (sinon, après plusieurs sélections, autocad refuse d'en faire de nouvelles)(vla-delete sel) Pour visualiser mon groupe test(vla-highlight my :vlax-false) Pour inverser le highlight(vla-highlight my :vlax-true) Histoire de voir combien j'ai d'objets dans le groupe(vla-get-count my) Pour conclure, effacer le groupe Test(vla-delete my) ps : avec la commande _group, tu peux en même temps voir la création du groupe et l'ajouts des objets au fil des instructions lisps @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 5 février 2008 Auteur Posté(e) le 5 février 2008 J'ai du mal m'exprimer... :( Bien que ta démonstration en vl me soit utile (Hé oui, par encore très familier avec le vl, mais ça vient...), ce que je voulais surtout savoir: Et-il possible d'utiliser un nouveau dictionnaire (personnalisé à mon application) pour y mettre un objet (dans mon cas un groupe). Je dirais oui, car j'y suis arrivé. Mais le problème et que cela me génère des erreurs dans mon fichier."Entrée multiple" Soit mon code est incorrect (j'ai loupé quelque chose), soit Autocad duplique systématiquement mon entrée dans SON dictionnaire de groupe. C'est la question que je me pose. :casstet: Il est vrai que mon groupe est désactivable par la combinaison des touches comme pour les groupes d'autocad, mais bien que nommé il n'apparaissent pas dans la commande groupe. Sur le coup cela m'avait plu qu'ils soient distincts, mais je me suis peut être fourvoyé. NB:Après un contrôle, mon groupe apparait dans la commande groupe avec un nom généré par Autocad du style "Audit_machin-chose$" Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 6 février 2008 Auteur Posté(e) le 6 février 2008 Pour essayer de donner suite à mon problème, un bout de code à lancer dans une présentation depuis l'EP pour reproduire mon souci (un nouveau dessin bien sur, par sécurité). ((lambda ( / ) (while (null (setq js_fml (ssget "_:S" '((-4 . "[b]<[/b]AND") (0 . "VIEWPORT") (67 . 1) (-4 . "AND>")))))) (setq e_fml (cdar (entget (ssname js_fml 0)))) (if (and e_fml (/= id_vport 2)) (progn (entmake (append '((0 . "CIRCLE") (100 . "AcDbEntity") (67 . 1) (100 . "AcDbCircle") (210 0.0 0.0 1.0)) (list (cons 410 (getvar "CTAB")) (cons 8 (getvar "CLAYER")) (cons 10 (getvar "VIEWCTR")) (cons 40 (getvar "VIEWSIZE"))) ) ) (setq e_blk (entlast)) (if (null (dictsearch (namedobjdict) "CADXP")) (setq xname (entmakex '((0 . "DICTIONARY") (100 . "AcDbDictionary"))) newdict (dictadd (namedobjdict) "CADXP" xname) ) (setq newdict (cdar (dictsearch (namedobjdict) "CADXP"))) ) (setq xname (entmakex (append '( (0 . "GROUP") (100 . "AcDbGroup") (300 . "Cercle & FMULT") (70 . 0) (71 . 1) ) (list (cons 340 e_blk) (cons 340 e_fml) ) ) ) ) (if (not (assoc 3 (dictsearch (namedobjdict) "CADXP"))) (dictadd newdict "RECORD_1" xname) (dictadd newdict (strcat "RECORD_" (itoa (1+ (atoi (substr (cdr (assoc 3 (dictsearch (namedobjdict) "CADXP"))) 8))))) xname) ) ) ) )) lancer la commande GROUPE (_group), rien de particulier.Faites la commande CONTROLE (_audit) en corrigeant les erreursRappel de la commande GROUPE.... Identique pour la commande SAUVRAP (_qsave) sans/avec controle Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 6 février 2008 Posté(e) le 6 février 2008 J'ai testé ton lisp sur un dessin vierge et on dirait que ça fonctionne correctement un (dictsearch (namedobjdict) "CADXP") me retourne((-1 . ) (0 . "DICTIONARY") (5 . "105") (102 . "{ACAD_REACTORS") (330 . ) (102 . "}") (330 . d'entité: 7ef68c60>) (100 . "AcDbDictionary") (280 . 0) (281 . 1) (3 . "RECORD_1") (350 . ))et pas d'erreurs avec la commande controle :o Je n'ai pas trop l'habitude des dictionnaires, mais (gile) à fait quelque chose la-dessusEt je constate que ce n'est pas le même bit pour le code 70 (dont je ne comprends pas à quoi il sert, malgré ma recherche dans les codes dxf) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 6 février 2008 Auteur Posté(e) le 6 février 2008 J'ai testé ton lisp sur un dessin vierge et on dirait que ça fonctionne correctement Merci du test effectué. Le code 70 est à 0 si le groupe a été nommé, 1 s'il est anonyme. Jusqu'à présent je n'avais pas eu de problème avec ce code sous les version 2000 à 2005.Mais sous 2008 oui, je suppose que tu effectué le test sous une version antérieure. (gile) à fait quelque chose la-dessus Oui mais il a pris le dictionnaire des groupes d'Autocad, c'est peut être la voie qu'il faudra que je prenne... si je ne trouve pas d'explications. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 6 février 2008 Posté(e) le 6 février 2008 De rien pour le test Je suis sur une version 2006 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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