Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 erreurs

Rappel 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

Posté(e)

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-dessus

Et 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

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é