piergel Posté(e) le 4 septembre 2014 Posté(e) le 4 septembre 2014 Bonjour à tous, J'ai découvert il y peu la programmation ObjectDBX en Visual Lisp (notamment grace à CADxp - merci Patrick_35). J'ai fait quelques essais concluants de manipulation de DWG mais j'ai 3 questions : 1 - pas de problème avec les DWG (utilisation de la méthode Open sur l'objet ObjectDBX.AxDbDocument) mais j'ai maintenant besoin de traiter des DXF et la méthode en question semble ne pas fonctionner sur des DXF. J'ai tâtonné avec une méthode Import et sur d'autres objets mais sans succès. Comment ouvrir un fichier DXF en ObjectDBX ? 2 - Une question plus générale qui découle de la première : existe-t-il une documentation de référence sur ObjectDBX avec l'ensemble des objets accessibles, leurs méthodes et propriétés (site web, livres...) ? c'est très difficile de trouver de l'info à ce sujet sur internet ! 3 - Autre question générale : ObjectDBX va-t-il continuer d'être proposé avec les prochaines version d'Autocad ? J'ai cru comprendre qu'il a été à la base de RealDWG depuis le support de l'environnement .net mais il continue à exister en temps que tel. Merci d'avance pour votre aide.
Patrick_35 Posté(e) le 5 septembre 2014 Posté(e) le 5 septembre 2014 Salut 1) Un fichier dxf est un fichier texte. Donc il faut le traiter en tant que tel et se lancer à fond dans les codes dxf 2) Tu n'as pas besoin d'une doc spécifique ObjectDbx car on utilise (à peu de chose près) les mêmes méthodes, les mêmes objets que IAcadApplicationLa différence se fait surtout sur la sélection des objets (possible uniquement sur le dessin courant) 3) Je ne pense pas que la pérennité d'objectdbx soit remise en cause, mais je ne suis pas dans le secret des dieux. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
piergel Posté(e) le 10 septembre 2014 Auteur Posté(e) le 10 septembre 2014 Merci pour ta réponse, 1 - je sais que c'est un fichier texte et je connais bien le format et les codes. Je souhaite l'ouvrir en ObjectDbx car ça se prête très bien aux traitements que j'ai a faire derrière (calculs d'intersections de polylignes, recopie de certaines entités dans le dessin courant...).2 - C'est justement le "peu de chose près" qui me pose problème, en l'occurence l'ouverture du DXF... Pour mes calculs d'intersections par exemple c'est nickel avec la méthode IntersectWith trouvée dans l'aide "ActiveX et VBA" Ma question reste donc entière : comment ouvrir un fichier DXF en ObjectDbx. Bonne journée
GEGEMATIC Posté(e) le 11 septembre 2014 Posté(e) le 11 septembre 2014 salut,c'est simple, tu converti ton dxf en dwg ...Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
piergel Posté(e) le 11 septembre 2014 Auteur Posté(e) le 11 septembre 2014 Bonjour, Très fort, j'y avais pas pensé !!!Je vais avoir des milliers de DXF à traiter, j'aurais aimé ne pas avoir à les convertir avant.Si ce n'est pas possible d'ouvrir un DXF en ObjectDBX, quelqu'un pourrait-il me le confirmer ? Merci.
Goldorak44 Posté(e) le 11 septembre 2014 Posté(e) le 11 septembre 2014 Salut, voici une libraire (c#) qui permet de travailler avec les fichiers dxf : netdxf PIRO CharlesDeveloppeur Revit, RV/RA - Formateur RevitPIRO CIE
Olivier Eckmann Posté(e) le 11 septembre 2014 Posté(e) le 11 septembre 2014 Bonjour, le document DBX expose une méthode DXFIn Olivier
piergel Posté(e) le 11 septembre 2014 Auteur Posté(e) le 11 septembre 2014 Merci Olivier mais je n'arrive pas à implémenter cette méthode :( (defun OuvrirDxfDbx(dxf / dbx) ; ; ouvre un fichier Dxf en ObjectDbx ; (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) (vla-dxfin dbx dxf) dbx ) erreur: no function definition: VLA-DXFIN
Olivier Eckmann Posté(e) le 11 septembre 2014 Posté(e) le 11 septembre 2014 Bonjour, je n'y connais rien en ObjectDBX, j'ai trouvé sur un bouquin "La bible du développeur Vlisp" datant de 2004 et libre de droit (les versions suivantes sont payantes, 2€70 chez Amazon pour la version ebook de 2011) qui contient le chapitre 13 sur ObjectDBX. A vue de nez la méthode DxfIn ne permet pas d'ouvrir un DXF, mais plutôt de l'insérer (importer) dans un document DWG précédemment ouvert. A essayer. Sinon la conversion du DXF en DWG est surement la meilleure méthode. Olivier
GEGEMATIC Posté(e) le 12 septembre 2014 Posté(e) le 12 septembre 2014 SalutJe vais avoir des milliers de DXF à traiter, j'aurais aimé ne pas avoir à les convertir avant.Si ce n'est pas possible d'ouvrir un DXF en ObjectDBX, quelqu'un pourrait-il me le confirmer ?Il me semble que tu as déjà eu ta réponse, patrick_35 est le spécialiste du DBX,s'il te dit : 1) Un fichier dxf est un fichier texte. Donc il faut le traiter en tant que tel et se lancer à fond dans les codes dxf c'est qu'il a du déjà essayer ... je ne vois pas le problème de convertir des millier de dxf en dwg : tu lance ton traitement la nuit, ou sur un poste libre. par contre, si vraiment tu tiens à ne pas passer par cette étape,tu peu ouvrir un dwg vide, utiliser dxfin, faire ton traitement, puis faire dxfout:ça ne marchera pas s'il y a des xref, ou des maintiens. l'interret de dbx est qu'il est plus rapide, car l'ouverture d'un dessin prend du temps, mais sinon, ne néglige pas la solution "script", très simple, mais effectivement un peu plus lente. Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
piergel Posté(e) le 12 septembre 2014 Auteur Posté(e) le 12 septembre 2014 Bonjour, Comme je l'ai dit, je connais très bien le format DXF (j'avais même écrit il y a quelques années un viewer alphanumérique de fichier DXF avec présentation des données en arborescence). La fameuse méthode DxfIn est une piste que je vais creuser et si je n'y arrive pas, je devrai effectivement passer par une phase préliminaire de conversion de mes DXF en DWG. Je ne fais que lire mes fichiers DXF, je ne les modifie pas. Ça simplifie les choses. J'ai bien sur pensé aussi au script mais ça n'est pas très pratique car dans chaque DXF je dois récupérer deux polylignes que je recopie dans le dessin courant qui au final va donc compiler des éléments provenant de chaque DXF. Si je m'en sort avec DxfIn, je posterai un nouveau message avec un petit bout de code. Je viens de m'inscrire sur CADxp et m’aperçois que c'est un forum dynamique et vivant. Je vais essayer d'y apporter ma contribution. Merci a vous tous.
Patrick_35 Posté(e) le 12 septembre 2014 Posté(e) le 12 septembre 2014 Salut Tu n'es pas obligé d'utiliser ObjectDbx. Tu peux aussi travailler de cette manière.C'est plus long et moins propre, mais cela fonctionne avec les dxf et évite les conversions.(setq doc (vla-open (vla-get-documents (vlax-get-acad-object)) "Mon_fichier.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
piergel Posté(e) le 12 septembre 2014 Auteur Posté(e) le 12 septembre 2014 Merci Patrick ! En fait j'étais persuadé qu'on ne pouvais pas gérer plusieurs fenêtres dessin en AutoLisp et qu'une session Autolisp était forcément restreinte à une seule fenêtre ! Mais effectivement ça fonctionne très bien. Du coup, je vais me rabattre là dessus car impossible de faire fonctionner la methode DxfIn (pourtant exposée avec un vlax-dump-object), même à partir d'un dessin vierge préalablement chargé. Et si vraiment le temps de traitement est trop long, je reviendrai en ObjectDbx en convertissant au préalable mes DXF en DWG. A +
piergel Posté(e) le 12 septembre 2014 Auteur Posté(e) le 12 septembre 2014 C'est encore moi ! Juste après avoir posté mon message précédent j'ai eu une idée : comme DxfIn n'est pas une méthode existant dans le modèle objet Autocad standard, je me suis dit que c'était pour cela que la fonction vla-dxfin ne fonctionnait pas. J'ai donc tenté un vlax-invoke-method et... Ca marche ! Même pas besoin d'ouvrir au préalable un dessin vierge ! (defun OuvrirDxfDbx(dxf / dbx) ; ; ouvre un fichier Dxf en ObjectDbx ; (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16) (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument")) (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2)))) ) (vlax-invoke-method dbx 'DxfIn dxf) dbx ) Merci encore à tous et à bientôt.
GEGEMATIC Posté(e) le 15 septembre 2014 Posté(e) le 15 septembre 2014 Salut,au final, ton obstination a payée ...et on apprend au passage qu'il est possible d'effectuer certaines opérations (en tout cas, de la consultation) en DBX directement sur des DXF, ce qui peut servir ...a bientôt,Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
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