Convertir un fichier de donner to scripte AutoCAD avec vb .net
jimy1977
Messages postés4Date d'inscriptionmardi 12 mai 2020StatutMembreDernière intervention12 mai 2020
-
12 mai 2020 à 04:52
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023
-
13 mai 2020 à 08:54
Bonjour à tous voici mon problème,
Il y a quelques temps j'ai réalisé un programme sous VBA qui convertit un fichier texte ont un script AutoCAD (script de dessin point line polyligne texte cercle),
J’ai envie de réaliser la même chose sous VB .net
Voici une idée comment ça marche
Je dispose d’un fichier texte sous le format suivant :
Image1
Chaque ligne est une instruction d’objet levé du terrain, par un topographe via les stations total, on y trouve le numéro de point les coordonnées en x,y,z et le code de point (symbole ou ligne).
Le code de point à plusieurs niveaux de signification
Le premier niveau est un code d’un point singulier, ou il s’agit tout simplement d’un point isoler qui représente un point lier à une objet exemple (un arbre, un poteau électrique…) dans ce cas il faut convertir la ligne d’instruction ont un script AutoCAD du genre :
ex : le point numéro 58 image2
(point 503528.792 4069178.197 216.723) pour dessiner un simple point AutoCAD dans les cordonnée 503528.792 4069178.197 216.723.
Ou (_-INSERT "D: \02-Légende\Standard\T153.dwg" 503528.792 4069178.197 216.723 1 1 0) pour insérer un symbole dans AutoCAD dans les cordonnée 503528.792 4069178.197 216.723 avec l’indication du chemin d’accès au symbole qui va avoir selon le code attribuée au point. Ici le code est le 153 image2
Le deuxième niveau est un code ligne, c’est lorsque le point appartient à une ligne exemple une ligne de trottoir une bordure route, dans ce cas il y a deux code, le premier code nous indique le type de point le deuxième nous indique le code de ligne.
Le code ligne est un code qui nous indique le début ou la fin de la ligne en plus il nous indique la forme de la ligne (droite ou courbe).
Exemple : ici nous avons deux ligne une ligne en type 40 et l’autre en type 42, le code ligne 2 signifie début droite et le 0 signifie fin de ligne
Image 3
Le scripte obtenu après conversion est le suivant :
_3DPOLY 503503.6780,4069176.1810,220.0110
503505.8890,4069175.8470,219.9940
503506.7670,4069180.3570,219.6380
503507.5150,4069184.1440,218.7750
503512.6130,4069182.6840,217.9590
503512.6090,4069182.5530,218.0040
503521.6050,4069179.8400,217.9750
503520.4100,4069180.1750,217.8680
503521.5480,4069179.8170,215.9730
503539.1620,4069177.4840,214.7350
503546.0250,4069176.7230,214.5070
503556.5220,4069174.2800,213.2980
_3DPOLY 503508.4640,4069177.4540,217.8850
503508.1850,4069178.4930,217.8760
503508.3400,4069178.5920,217.9330
503509.5450,4069182.8960,217.9760
En gros je veux faire appel à mon fichier texte récupérer d’un levé, et le convertir en un script au Format AutoCAD,
JeuDuTaquin
Messages postés251Date d'inscriptionmardi 4 juillet 2017StatutMembreDernière intervention31 mai 20237 12 mai 2020 à 09:30
Salut Jimy,
As-tu essayé de retrouver ton code ?
Sinon, tu as probablement la possibilité de créer un fichier 3D en WRL, EPS, AI ou DXF... Tous en format texte que tu peux reconstruire facilement en Vb.
Le DXF est plus approprié pour Autocad, car c'est un format d'import.
Mais, laisse tomber la programmation Vb et utilise le langage LISP qui automatise plus simplement, et directement en gestion d'objets Autocad les imports de fichiers texte.
Ton scripte sera plus simple à programmer… qu'un compilo maison.
jimy1977
Messages postés4Date d'inscriptionmardi 12 mai 2020StatutMembreDernière intervention12 mai 2020 12 mai 2020 à 17:25
Salut l’ami,
Je te remercie pour ton retour,
Oui, je me suis déjà penché sur la conversion vers dxf, après plusieurs tentative mon choix a été de générer un scripte que je peux exécutée sur AutoCAD pour générer mon dessin, sous VBA Excel j’ai réussi à le faire à présent je peux convertir mes fichier terrain en un scripte AutoCAD,
J’ai choisi de générer un scripte AutoCAD au lieu d’un fichier dxf, car j’ai eu un problème pour générer un scripte pour les polyligne 3D en format courbe, le problème est qu’il n’existe pas une commande pour générer une polyligne 3D en format courbe, donc pour contourner le problème je génère un scripte de la commande spline 3D pour dessiner les lignes en format courbe.
Sous dxf j’ai trouvé des difficultés à le réaliser, car sous dxf il faut discrétiser la partie courbe d’une polyligne 3D en de petit segment.
Je donne un exemple,
Sur le terrain le topographe fait un levé d’une bordure trottoir, au début c’est une ligne droite alors le topographe attribut au premier point levé le code point pour indiquer que c’est un trottoir, et un code ligne (de type 2) pour indiquer que le point est lié par une ligne en frome droite,
a une certaine distance il y a une courbe,
le topographe attribut au point levé le code point pour indiquer que c’est un trottoir, et un code ligne (de type 1) pour indiquer que le point est lié par une ligne en frome courbe, et ainsi de suite, à la fin de trottoir il attribue au point levé le code point pour indiquer que c’est un trottoir, et un code ligne (de type 0) pour indiquer la fin de la ligne.
Pour la partie droite pas de problème, mais pour la partie courbe j’ai dû dans mon code sous VAB lorsque il identifie un début de courbe au milieu d’une ligne ouverte il arrête la partie droit qui est générer en polyligne 3D, et génère une spline 3D dans la partie courbe.
Bref : mon problème est le suivant :
Je veux par le biais de mon programme faire ceci
1- Ouvrir mon fichier terrain via openfiledialog
2- Comme le fichier est un fichier texte je dois le séparer pour avoir un tableau avec la fonction split avec un séparateur (‘’vide’’) et un séparateur (‘’|’’) car je dois récupérer le numéro de point.
3- Réaliser des formules conditionnelles en boucle pour tous le fichier, pour identifier la nature du point (est ce que le point est un symbole isolé, est ce que le point est liée à une ligne et sous quelle forme, est ce que mon point appartient à un cercle…)
NB : il y a un code qui génère un cercle automatiquement à partir de trois point levé successive.
4- Une fois tous les formules conditionnelles mis en place, je dois faire une concaténation pour obtenir le format du scripte désiré
5- Empiler tous les scriptes les uns sur les autres
6- Sauvegarder le résultat dans un fichier texte sous l’extension .scr
Pour le moment j’ai réussi à faire appel à mon fichier et même l’afficher dans un textbox multiline (juste pour etre sure que le code marche) car mon but est de le charger en mémoire faire toute les opérations de transformation le fermé et générer mon scripte, mais je n’arrive pas à le séparer et à le convertir en un tableau.
Ce que je veux, est juste le bout de code qui m’ouvre mon fichier le transforme en un tableau.
Si ça ne fonctionne pas, transforme en fichier CVS que tu traitera en base de donnée par argument.
Prends les problèmes les uns après les autres, et pas à pas.
Tu te noies dans des limitations et problèmes que tu n'as pas encore.
Sinon, regarde du côté des formats de texte sur des "terragènes" pour les courbes de niveaux, lissage en courbes de Bézier et pointage en coordonnées différentielle.
Whismeril
Messages postés18423Date d'inscriptionmardi 11 mars 2003StatutContributeurDernière intervention 8 juin 2023624 13 mai 2020 à 08:54
Bonjour
je pars du principe que tu as pris le temps de lire le petit article que je t'ai donné dans ton autre discussion.
Et aussi je me projette dans le cas ou les propositions de JeuDuTaquin ne te conviendraient pas et que tu souhaites toujours écrire ton propre wrapper.
Que tu choisisses VB.Net ou C#, je te conseille avant tout de prendre quelques jours pour en apprendre les bases.
Pour C# http://tahe.developpez.com/dotnet/csharp/ Pour VB.Net il y a http://plasserre.developpez.com/cours/vb-net/ qui s'adresse aux anciens de VB6 voir VBA, son défaut pour moi est qu'il prend l'objet pour un effet de mode alors que c'est l'essence de .Net, ou alors celui d'openclassroom, qui est moins accessible mais apprend l'objet pour ce qu'il est.
Tu pourras ensuite reprendre ton projet, avec le socle nécessaire à ton apprentissage.
Il te faudra définir un objet qui correspond à un enregistrement (tu l'appelles, Enregistrement, Point, Leve {Attention, pas d'accents} ou comme tu veux).
Et un objet dont le rôle sera de convertir une ou plusieurs lignes en un script autoCad.
Cet objet, tu peux choisir qu'il écrive tous les types de scripts selon ceux que tu lui a donné en entrée ou dériver un objet par script et n'avoir dans ton code qu'à manipuler qu'une ou deux méthodes (toujours les mêmes) quelques soit le type de script attendu et le nombre de lignes de donnée en entrée.
Pour découper ton fichier texte, je te propose d'utiliser des regex, plutôt que faire des boucles à n'en plus finir.
Une regex serait chargée d'extraire toutes les lignes unitaires qui correspondent à des ponctuels.
Une regex serait chargée d'extraire tous les blocs de 3 lignes qui correspondent à un cercle.
Un autre serait chargée d'extraire tous les blocs qui correspondent à une ligne.
Pour te montrer des exemples, il faudra que tu postes des vraies données (pas des images) avec un ou 2 bloc de chaque type.
Ces données devront être mises dans les balises de code, en forçant un langage quelconque pour que l'indentation soit conservée (très important)
Voir ici comment bien se servir des balises de code https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code