fabcad Posté(e) le 4 juillet 2012 Posté(e) le 4 juillet 2012 Bonjour à tous, Comment accéder à un objet d'un bloc pour lui signifier un ordre de tracé ou un changement de propriété. Mon objet en question est un Solide 2d unique dans le bloc car lorsque j'importe une présentation par l'ADC sur AutoCAD MAP 2007 les blocs qui sont sur cette mise en page perdent l'ordre de tracé notamment les solides et mpolygones. Merci pour vos réponses. Fabrice
Tramber Posté(e) le 4 juillet 2012 Posté(e) le 4 juillet 2012 Pour accéder à un bloc il faut boucler dans la base :(vlax-for i *blocks* (if(wcmatch(strcase(vla-get-Name i))(strcase "Nomdubloc")) (vlax-for j i (if(=(vla-get-ObjectName j)"AcDbSolid" );recherche de l'objet (gc:MoveToBottom i (list j)))) ) ) ... tu pourras gérer la mise en arrière avec gc:movetobottom de (gile) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 4 juillet 2012 Posté(e) le 4 juillet 2012 J'ai amélioré un peu la routine.Ne pas oublier : (or *blocks* (setq *blocks* (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))) Mais je pense que tu avais compris... Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 4 juillet 2012 Posté(e) le 4 juillet 2012 Salut Tramber Tu peux accéder directement au bloc sans utiliser de boucleEn reprennant tes variables(vla-item *blocks* "Mon_Bloc") Et si tu as peur qu'il n'existe pas, avec une gestion d'erreur(vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list *blocks* "Mon_Bloc"))) Ou encore plus simple, en utilisant (nentsel) sur un bloc visible à l'écran @+ 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 4 juillet 2012 Posté(e) le 4 juillet 2012 Oui, c'est vrai, mais pour trouver l'objet au sein du bloc, on ne pourra se passer de boucler avec le (vlax-for j i (if(=(vla-get-ObjectName j)"AcDbSolid" );recherche de l'objet (gc:MoveToBottom i (list j)))) ou i vaudra (vla-item *blocks* "Mon_Bloc") Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
fabcad Posté(e) le 4 juillet 2012 Auteur Posté(e) le 4 juillet 2012 Merci pour vos retours, J'ai mis en pièce-jointe la routine ainsi qu'une copie d'écran pour illustrer l'après exécution de la routine le solide et le mpolygone reste devant dans les blocs. Je sèche ! Fabricemaj_solide_bloc.lsp
bryce Posté(e) le 4 juillet 2012 Posté(e) le 4 juillet 2012 Bonjour, La routine gc:MoveToBottom fait appel à une autre routine gc:GetSortentsTable absente du fichier posté, ça vient peut-être de là. Brice, formateur AutoCAD - Inventor - SolidWorks - ZWCad - DraftSight - SketchUp indépendant
fabcad Posté(e) le 5 juillet 2012 Auteur Posté(e) le 5 juillet 2012 Bonjour à tous, Merci Bryce de ta remarque, j'ai modifié en ajoutant la sous-routine citée mais le résultat est identique. A+
Tramber Posté(e) le 5 juillet 2012 Posté(e) le 5 juillet 2012 En supposant que gc:MoveToBottom et gc:GetSortentsTable soient chargés, peux-tu simplement montrer ton code ou dire où il butte (ce que tu dois savoir faire dans la console vlisp ?) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 5 juillet 2012 Posté(e) le 5 juillet 2012 Oups, avais pas vu, il y est. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Tramber Posté(e) le 5 juillet 2012 Posté(e) le 5 juillet 2012 L'erreur est juste avant la boucle : (setq nom_du_bloc (cdr (assoc 2 (entget obj_acad_bloc)))) serait la bonne formule. En choisissant assoc 8 tu obtiens le nom de calque ! C'était tout bête. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
fabcad Posté(e) le 5 juillet 2012 Auteur Posté(e) le 5 juillet 2012 Merci ca fonctionne maintenant, on ne le dira jamais assez mais la relecture avec d'autres yeux c'est cool. J'ai mis à jour le fichier lisp en pièce-jointe. Bonne journée, A+
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