Aller au contenu

ouvrir fichier en VBN.ET


pat06

Messages recommandés

Bonjour,

j'aurais besoin d'un p'tit coup de main...

j'ai créer un .dll sous VB.NET 2010

ce programme en lancé sous autocad via "netload" et doit permettre d'ouvrir un fichier dwg sélectionné.

 

il me manque juste la méthode permettant d'ouvrir ledit fichier...

 

si quelqu'un pouvait m'aider ?

 

merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Quand tu dis "ouvrir" c'est bien ouvrir dans l'éditeur ?

Si c'est le cas, tu peux voir ici une utilisation de la méthode DocumentCollection.Open().

 

Si c'est juste pour pour accéder à la Database d'un dwg, tu peux éviter de l'ouvrir dans l'éditeur (beaucoup plus rapide) en créant une Database temporaire (side database) accessible en lecture et écriture.

 

Using sideDb As Database = New Database(False, True)
   sideDb.ReadDwgFile(fileName, System.IO.FileShare.None, False, "")
   Using trans As Transaction = sideDb.TransactionManager.StartTransaction()
       ' Faire ici ce qu'il y a à faire dans le dwg
   End Using
End Using

 

Dans tous les cas, quand tu demendes de l'aide, essaye d'être un peu plus précis, voire de poster un extrait de code.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

merci pour ta réponse (si rapide)

c'est effectivement pour ouvrir le fichier dans l'éditeur.

 

j'ai du mal à appliquer la méthode proposée :

mon projet VB est constitué d'un fichier de class dans lequel j'ai défini une commande permettant d'ouvrir une boite de dialogue dans laquelle le sélection le fichier dwg à ouvrir. dans lequel j'ai inséré le code :

 

Dim strFileName As String = DirListBox1.Path & "\" & FileListBox1.Text

Dim acDocMgr As DocumentCollection = Application.DocumentManager

 

If (File.Exists(strFileName)) Then

acDocMgr.Open(strFileName, False)

Else

acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " & strFileName & _

" does not exist.")

End If

 

lors de l'exécution, j'ai un message d'erreur...

 

par contre, en insérant le code suivant dans le fichier class ; il ouvre bien le fichier désigné lors de la commande OpenD :

 

Public Sub OpenD()

Dim strFileName As String = "C:\TEST\TEST.dwg"

' Dim strFileName As String = EXPLO.ControlCollection.Equals()

 

Dim acDocMgr As DocumentCollection = Application.DocumentManager

 

If (File.Exists(strFileName)) Then

acDocMgr.Open(strFileName, False)

Else

acDocMgr.MdiActiveDocument.Editor.WriteMessage("File " & strFileName & _

" does not exist.")

End If

 

si tu as une idée ?

 

merci d'avance

Lien vers le commentaire
Partager sur d’autres sites

Bonjour pat06,

 

Si tu me permet,je te conseillerai d'utiliser IO.Path.Combine(DirListBox1.Path, FileListBox1.Text) au lieu de DirListBox1.Path & "\" & FileListBox1.Text

 

Ensuite,il est très certainement plus "propre" d'effectuer le traitement dans une classe et non directement dans le formulaire.

Enfin,tu dis que ya un message d'erreur mais tu ne donnes pas d'information ... code erreur,ligne qui provoque l'erreur ...

Mieux vaut trop de détails que pas assez ^^

 

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Bazoul,

 

j'ai changé le code proposé par :

Dim strFileName As String = IO.Path.Combine(DirListBox1.Path, FileListBox1.Text)

et j'ai le même message d'erreur :

 

Consultez la fin de ce message pour plus de détails sur l'appel du débogage

juste-à-temps (JIT) à la place de cette boîte de dialogue.

 

************** Texte de l'exception **************

System.Runtime.InteropServices.COMException (0x802000C8): Contexte d'exécution incorrect

à System.Runtime.InteropServices.Marshal.ThrowExceptionForHRInternal(Int32 errorCode, IntPtr errorInfo)

à Autodesk.AutoCAD.ApplicationServices.DocumentCollection.Open(String fileName, Boolean forReadOnly, String password)

à test1_plugin_autocad.EXPLO.ButtonAutoCAD_Click(Object sender, EventArgs e) dans C:\_VB NET\CHARTE GRAPHIQUE 2012\plugin autocad\EXPLO.vb:ligne 95

à System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

à System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

à System.Windows.Forms.Control.WndProc(Message& m)

à System.Windows.Forms.ButtonBase.WndProc(Message& m)

à System.Windows.Forms.Button.WndProc(Message& m)

à System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

 

j'utilise une windowsForm pour sélectionner le fichier dwg par "décodage". Ce traitement est nécessaire car les fichiers dwg sont codés (dans leur nom) suivant une charte graphique.

 

merci

Lien vers le commentaire
Partager sur d’autres sites

j'ai changé le code proposé par :

Dim strFileName As String = IO.Path.Combine(DirListBox1.Path, FileListBox1.Text)

 

L'utilisation de Path.Combine n'influt en rien le fonctionnement,cela te permet de ne pas te soucier du séparateur entre les deux chemins ^^

 

j'ai le même message d'erreur :

 

Consultez la fin de ce message pour plus de détails sur l'appel du débogage

juste-à-temps (JIT) à la place de cette boîte de dialogue.

 

************** Texte de l'exception **************

System.Runtime.InteropServices.COMException (0x802000C8): Contexte d'exécution incorrect

.....

 

A priori en testant tu aurais fais un affichage non modale de ta boite de dialogue ... si tu as un frmdwg.Show(),remplace par frmdwg.showDialog()

A toi de me confirmer

 

Cordialement,

Lien vers le commentaire
Partager sur d’autres sites

voici le code utilisé dans le fichier class :

Imports System.IO

Imports Autodesk.AutoCAD.ApplicationServices

Imports Autodesk.AutoCAD.DatabaseServices

Imports Autodesk.AutoCAD.Runtime

Imports Autodesk.AutoCAD.EditorInput

 

Public Class Class1

<CommandMethod("CHARTE")> _

Public Sub CHARTE()

Dim ed As Editor = Application. _

DocumentManager. _

MdiActiveDocument. _

Editor

Using dlg As New EXPLO()

Application.ShowModalDialog(dlg)

End Using

End Sub

End Class

 

Effectivement ShowModalDialog fait référence à un affichage modal... mais par quoi le remplacer ?

le but étant d'ouvrir "EXPLO" lors de l'appel à la commande "charte"

EXPLO étant mon fichier Form du projet.

 

merci

Lien vers le commentaire
Partager sur d’autres sites

Remplace

Application.ShowModalDialog(dlg)

par

dlg.ShowDialog(Autodesk.AutoCAD.ApplicationServices.Application.MainWindow)

 

Tu devrais obtenir le même comportement mais sans l'erreur de contexte.

 

PS: je pensais que tu avais fait un affichage non-modal(.show) au lieu d'un affichage modal(.showdialog) .. je n'avais pas pensé que tu avais utilisé la fonction ShowModalDialog

PPS: ton document serai ouvert mais ne sera pas celui actif ...

Lien vers le commentaire
Partager sur d’autres sites

Un grand merci...

 

finalement j'ai remplacé le code d'appel à la form par "dlg.ShowDialog()"

et tout fonctionne parfaitement ... voici le code modifié dans la class :

 

<CommandMethod("CHARTE")> _

Public Sub CHARTE()

Dim ed As Editor = Application. _

DocumentManager. _

MdiActiveDocument. _

Editor

Using dlg As New EXPLO()

dlg.ShowDialog()

End Using

End Sub

Lien vers le commentaire
Partager sur d’autres sites

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é