pat06 Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Bonjour,j'aurais besoin d'un p'tit coup de main...j'ai créer un .dll sous VB.NET 2010ce 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
(gile) Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 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
pat06 Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 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
bazoul Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 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,
(gile) Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 La seule différence visible entre le code qui marche et celui qui ne marche pas est le contenu de la variable strFileName.Vérifie que le chemin est bien valide. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pat06 Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 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ébogagejuste-à-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
bazoul Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 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ébogagejuste-à-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,
pat06 Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 voici le code utilisé dans le fichier class :Imports System.IOImports Autodesk.AutoCAD.ApplicationServicesImports Autodesk.AutoCAD.DatabaseServicesImports Autodesk.AutoCAD.RuntimeImports 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 SubEnd 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
bazoul Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Remplace Application.ShowModalDialog(dlg)pardlg.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 ShowModalDialogPPS: ton document serai ouvert mais ne sera pas celui actif ...
pat06 Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 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
bazoul Posté(e) le 13 janvier 2012 Posté(e) le 13 janvier 2012 Penses à indiquer le sujet comme résolu.Bonne continuation B)
pat06 Posté(e) le 13 janvier 2012 Auteur Posté(e) le 13 janvier 2012 comment faut-il indiquer que ce sujet est résolu ? merci
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