PhilOctet
Membres-
Compteur de contenus
100 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par PhilOctet
-
Détournement de QSave pendant eTransmit
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Mes collègues font souvent des sauvegardes de leur dessin. Ce qui est une bonne chose. Je déclenche un traitement à chaque sauvegarde. En voici le code. Module Module1 ' récupère le chemin du dessins courant Public DWGPath As String Public DWGName As String Public DWG As String '' Executer à chaque ouverture d'un dessin (nouveau ou existant) Public Sub OnDocumentCreated(ByVal sender As Object, ByVal e As DocumentCollectionEventArgs) Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose Dim acDb As AcBdd.Database = acDoc.Database AddHandler acDb.BeginSave, AddressOf docBeginSave End Sub '' Executer à chaque fermeture de fenetre de dessin Public Sub docBeginSave() Dim CmdNames As String = Application.GetSystemVariable("cmdnames") Dim DBMod As Integer = Application.GetSystemVariable("dbmod") Debug.Print (CmdNames & " / " & DBMod) Dim acDoc As Document = AcApp.DocumentManager.MdiActiveDocument ' récupère le chemin du dessin courant DWGPath = Application.GetSystemVariable("DwgPrefix") DWGName = Application.GetSystemVariable("DwgName") DWG = AF_ScanLAN.strLanPath(DWGPath & DWGName) Call Traitements() End Sub Il y a surement d'autres façons de faire. Et tout aussi surement plus classe. Avez-vous une idée à me proposer ? Merci de votre soutient et au plaisir de vous lire. -
Détournement de QSave pendant eTransmit
PhilOctet a posté un sujet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir à tous, Mon p'tit programme de traitement de mes fichiers dessin AutoCAD tourne. Je passe dans une phase de test avec l'environnement. Notamment, je détourne les sauvegardes afin d'y appliquer une partie de ces traitements. Bref, dans la série des 'QSave', il y a la commande 'eTransmit' qui déclenche une sauvegarde. La variable 'cmdnames' nous donne la commande en cours. Mais lorsque j'arrive sur l'évênement 'BeginSave', ce n'est pas la commande 'eTransmit' qui est donné par la variable mais la commande 'QSave'. Comment puis-récupérer la "vraie" commande déclenchée à savoir' eTransmit' ? Ce que voudrait faire : L'opérateur lance la commande eTransmit qui déclenche un QSave. le programme prendre en charge la sauvegarde et relance l'eTransmit et crée enfin le zip. Je pensais aussi utiliser la variable 'DBMod' mais je ne vois pas comment l'intégrer dans ma routine. A moins que quelqu'un ai une meilleur idée ! merci et à bientôt -
Accès aux Objets des Dictionnaires
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, Merci. Au risque de te surprendre, c'est bien ce que je faisais. Mais cela m'a permis d'aller chercher ailleurs d'où venait mon problème. En réalité, le nomimage que je passais en paramètre était une extraction du nom de fichier et non pas le nom de l'image dans le dictionnaire. encore merci -
Accès aux Objets des Dictionnaires
PhilOctet a posté un sujet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, J'ai réussi avec les blocs : Public Sub RenamePathBlock(ByRef dtb As AcBdd.Database, ByRef acTrans As AcBdd.Transaction, ByVal NomBlock As String) Dim acBlcTbl As AcBdd.BlockTable = acTrans.GetObject(dtb.BlockTableId, AcBdd.OpenMode.ForRead) Dim acBlcTblRec As AcBdd.BlockTableRecord = acTrans.GetObject(acBlcTbl(NomBlock), AcBdd.OpenMode.ForWrite) Par contre, je n'arrive pas à accéder aux propriétés d'une image ou d'un calque sous jacent en connaissant son nom de référence afin de la modifier. Je pense que la routine doit commencer par : Public Sub RenamePathImage(ByRef dtb As AcBdd.Database, ByRef acTrans As AcBdd.Transaction, ByVal NomImage As String) Dim DBDIct As AcBdd.DBDictionary = acTrans.GetObject(dtb.NamedObjectsDictionaryId, AcBdd.OpenMode.ForRead) Dim DBImgDIct As AcBdd.DBDictionary = acTrans.GetObject(DBDIct.GetAt("ACAD_IMAGE_DICT"), AcBdd.OpenMode.ForRead) merci de votre aide. [Edité le 14/2/2010 par PhilOctet] -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Cela ne change rien. J'ai effacé (avec uDef.erase()) le PDF puis réinséré ce même PDF avec toutes les caractèristiques de l'ancien PDF. Cela plante quand même AutoCAD. Par contre, lorsque je traite mon fichier dessin non ouvert avec un dtb.ReadDwgFile(filename, System.IO.FileShare.ReadWrite, True, String.Empty), cela ne plante pas AutoCAD et lorsque j'ouvre le dessin maitre, j'ai toutes les XRefs, y compris les PDFs, qui sont bien en adressage relatif. Du coup, je suis perplexe. cela fonctionne avec AutoCAD losrque le dessin est fermé par contre cela ne fontionne plus lorsque ce même dessin est en cours d'utilisation. A suivre, merci -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Oui, je l'ai bien eu et le système me dit bien au revoir mais lorsque je ferme mon dessin après avoir lancé les traitements ci-dessus. Aucun problème il se ferme bien. Mais lorsque je le reouvre, les XRefs sont toujours en absolu. Donc la routine n'a rien sauvegardée. Je pense que je dois accompagner le "Application.ShowAlertDialog("Au revoir ...")" par la Sub Test. ' Réaction à l'évènement "BeginDocumentClose" Private Sub docBeginDocClose(ByVal sender As Object, ByVal e As DocumentBeginCloseEventArgs) Call Test() Application.ShowAlertDialog("Au revoir ...") End Sub Où ou Comment est déclenché la sauvegarde ? C'est AutoCAD qui s'en charge ? -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, La finalité de cet outil est que je voudrai qu'il s'exécute lors de la fermeture du dessin traité. Je sais qu'il existe des évênements .net qui le permettent. Avez-vous un p'tit exemple à m'offrir. Donc Objectif : je lance les traitements ci-dessus lorsque l'utilisateur sort de son dessin en sauvegardant ou lors de toutes sauvegardes. Encore une fois merci de votre aide. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, C'est vraiment bizarre, en AutoLISP comme en VB.Net, lorsque je traite que les PDFs, cela ne plante rien. Et je pense pas que cela soit dû à la version d'AutoCAD. J'ai essayé avec MAP, la 2010 et la 2011. En étudiant ton code en C#, ci-dessus, je me suis aperçu qu'il ne sauvegardait pas les chemins relatifs pour les DWGs. Considérant la 1ere phrase, est-ce que chez toi, cela fait la même chose ? A bientôt, -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir (Gile), J'ai pas mal étudier ton code. Je ne connaissais pas cette façon d'extraire les Xrefs. Je n'ai pas encore tous compris mais je vais forcer quelques neurones défaillantes. Tu dis que cela fonctionne avec les dwf. Je te rassure en te disant que cela fonctionne avec tous les dictionaires de type Underlay. Sauf qu'il faut les utiliser un à un parce que les deuxièmes choix déstabilisent tous le système. Voici les testes que j'ai fait : ' Traitement des objets sous-jacents Dim NOD As DBDictionary = tr.GetObject(db.NamedObjectsDictionaryId, OpenMode.ForRead) 'Dim dicts As String() = New String(0) {"ACAD_DWFDEFINITIONS"} 'Dim dicts As String() = New String(0) {"ACAD_PDFDEFINITIONS"} Dim dicts As String() = New String(0) {"ACAD_DGNDEFINITIONS"} '=>Dim dicts As String() = New String(1) {"ACAD_DWFDEFINITIONS", "ACAD_PDFDEFINITIONS"} 'Dim dicts As String() = New String(2) {"ACAD_DWFDEFINITIONS", "ACAD_PDFDEFINITIONS", "ACAD_DGNDEFINITIONS"} Dès la ligne précédée d'un =>, ça plante et quelque soit l'ordre. Questions annexes : Comment puis-je te joindre un e-transmit ? Pourquoi reçois-je 7 messages de notification de réponse sur ma messagerie ? A bientôt ... -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Ce qui me surprend est que cela fonctionne si je n'en prend qu'un en charge. Mais dès que j'essai avec un autre cela plante AutoCAD. Et quand je dis que cela fonctionne avec un, c'est avec n'importe lequel des 4 : dwf, pdf, dgn, dwfx. Donc si j'en modifie un type, que je sauvegarde, que j'en prend un autre type et que je sauvegarde à nouveau et ainsi de suite, cela fonctionne. Pourquoi ? Je suppose que tu n'as pas non plus la réponse. L'extrait "copie d'écran" vient de l'aide fourni avec l'ObjectARX ? -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Où est-ce que cela plante ? avec AutoCAD ou avec la routine ? Si c'est AutoCAD et le DGN, je peux te fournir les fichiers par l'intermédiaire d'un zip. Si c'est la routine, je ne sais pas quoi te dire parce que c'est justement l'un des endroits où j'éprouve des difficultés. Il me semble que la transaction n'est pas ou mal terminé. Parce que si tu lance un acDoc.CloseAndSave(NomduDWG), le système te dit que le document est encore ouvert ! Et comme tu termines ton code de la même façon que moi, tu dois avoir le même problème. Où trouver de la doc sans être ADN ? A part l'"AutoCAD 2010 .Net getstart". Chez moi, là où çà plante, c'est lorsque je lance dgn après dwf, ou pdf après dwf. Bref, lorsque je lance l'un des quatres après l'un des quatres autre. C'est pas claire. Lorsque je lance un underlay après un autre underlay. J'ai étudié ton code. Il est différent du mien. Bien plus dense et donc plus claire. Mais je ne suis pas et loin de là une référence. Comme dans ton code, j'avais aussi créer une fonction récursive pour les xrefs imbriqués. Au plaisir de te lire -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Ouauou ! Je ne m'attendais pas à une aussi rapide. Soit tu travailles avec un décalage horaire conséquent soit tu lis une grande dévotion à ton activité soit les deux. Je n'ai pas encore le code mais je ne vais pas tarder à le faire. Encore sincèrement merci. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, J'appelle au secours. Je n'y arrive pas. Je cherche à modifier les chemins absolus en chemin relatifs des Xrefs : dwg, dwf, dwfx, pdf, dgn, images. Tous les objets qui sont gérés par la commande Xref d'AutoCAD 2010. Cela fonctionne avec les Xrefs (type dwg) ou avec seulement l'un des 5 autres. Dès que je veux en traiter un autre type en plus, je ne peux plus fermer AutoCAD sans le bloquer. J'ai fouillé sur différents sites à la recherche de code et je n'ai rien trouvé sur les manipulations de "UnderlayDefinition". Est-ce quelqu'un ou toi (Gile) ne pourrait m'offrir une routine qui soulagerait tous mes énervements de ces derniers temps ? Par avance, merci. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, Je suis coincé avec mon dev. Je cherche à passer en adressage relatif les différents chemins contenus dans la fenêtre XRef (AutoCAD 2010) dans laquelle on y trouve les xrefs, pdfs, dgns, dwfs et les images. C'était la raison pour laquelle je voulais passer le type d'objet en paramètre. 4 cas sur 5, la propriété SourceFileName est commune au 4 types d'objet. Toutefois, même de façon isolée, mes routines relatives aux images et xrefs fonctionnent très bien. Par contre, les trois autres ( pdfs, dgns, dwfs ) ne fonctionnent pas. Les chemins sont bien mis à jour dans la fenêtre XRef mais dès que je veux fermer en enregistrant le dessin, AutoCAD se bloque définitivement. Est-ce quelqu'un peut m'aider ? Voici la routine, '' Traitement des Références DWF Public Sub ScanDwf() Dim acDb As Database = HostApplicationServices.WorkingDatabase Dim acTrans As Transaction = acDb.TransactionManager.StartTransaction() Dim acDbDict As DBDictionary = acTrans.GetObject(acDb.NamedObjectsDictionaryId, OpenMode.ForRead) ' récupère le chemin du dessin courant Dim DWGPath As String = Application.GetSystemVariable("DwgPrefix") Dim DWGName As String = Application.GetSystemVariable("DwgName") Dim DWG = AF_ScanLAN.strLanPath(DWGPath & DWGName) Try Dim acDict As DBDictionary ' Ne pas supprimer : fourni la liste des dictionnaires utilisés For Each Obj As DBDictionaryEntry In acDbDict Debug.Print("=>" & Obj.Key) Next ' dictionnaires et définitions utilisés ' Est-ce le que le dictionnaire existe ? If acDbDict.Contains("ACAD_DWFDEFINITIONS") Then ' Saisi le dictionnaire Dim acDictId As ObjectId = acDbDict.GetAt("ACAD_DWFDEFINITIONS") acDict = acTrans.GetObject(acDictId, OpenMode.ForWrite) ' Traite chaque élément du dictionnaire For Each acDictEnt As DBDictionaryEntry In acDict Dim MyDwf As DwfDefinition = acTrans.GetObject(acDictEnt.m_value, OpenMode.ForWrite) ' adressage relatif de chemin équivalent du favori réseau Dim MyDefPath = Abs2Rel(AF_ScanLAN.strLanPath(MyDwf.SourceFileName), DWG) MyDwf.UpgradeOpen() MyDwf.SourceFileName = MyDefPath 'MyDwf.Load("Yes") Next End If Catch ex As System.Exception MsgBox("Erreur dans le scanne des réferences externes") Finally ' End Try acTrans.Commit() acTrans.Dispose() End Sub Les 2 autres routines (ScanPdf(), ScanDgn() sont quasiment les mêmes. merci de votre aide et au plaisir de vous lire. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour (Gile), L'ensemble de tes réponses me conviennent. Dans ta sub "ScanImg(Transaction tr, ObjectId dictId)" à la ligne "RasterImageDef img = (RasterImageDef)tr.GetObject(entry.Value, OpenMode.ForRead);" et dans ta sub "ScanDef(Transaction tr, ObjectId dictId)" à la ligne "UnderlayDefinition def = (UnderlayDefinition)tr.GetObject(entry.Value, OpenMode.ForRead);" On constate qu'à un mot prêt, c'est la même chose. Ce mot est un type d'objet. Plutôt que de faire deux routines, existe-t-il un moyen de passer ce mot (ou type d'objet) en paramètre ? Et si il est possible de passer un type d'objet en paramètre, est-il possible de faire la même chose avec une fonction ? Je te remercie pour les efforts consentis, -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Effectivement, je comprend bien ce que tu veux dire. Je me doutai bien qu'en fonction du type d'objet que je passe en paramètre je ne puisse pas accéder à toutes les propriétés comme le rayon d'une ligne ou la surface d'une ligne, etc. En C ou en Lisp, il est possible de passer une fonction par un paramètre et ainsi pour "l'exécuter" par la commande (eval foo). foo étant la fonction passée en paramètre. En Lisp, la notion d'objet n'existe pas, mais on peut les simuler par les listes comme les extractions AutoCAD de type (entget (car (entsel))). Le langage LeLispou XLisp permet de faire la même chose. Bonne soirée, J'essaie ce que tu m'a conseillé et si cela fonctionne, je t'en tiendrai informer. Comment puis-je partager le code du deveoppement que je suis entrain de réaliser? Il n'est pas un très bonne exemple de programmation mais permer de montrer quelqiues exemples de codes. En toute modestie. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, Merci, je n'y vais pas penser. Mais cela ne fonctionne pas avec tous les types d'objets des dictionnaires ? Et d'une façon plus générale, est-ce que cela est possible en VB.net ou C# ? Comme ca l'est en C ou Lisp. -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, La routine que j'ai écrite fonctionne avec un objet DwfDefinition. J'aimerais aussi l'effectuer avec un PdfDefinition, DwgDefinition, RasterImage, etc. Donc je cherche à savoir comment passer un argument qui serait le choix du type d'objet et d'utiliser une seule et même routine pour tous les objets du dictionnaire. appel de la fonction : ScanDict("DWF") ou Scan(DwfDefinition) de la même façon que ScanDict("PDF") ou Scan(PdfDefinition). et que la fonction appelé soit Public Sub ScanDict(ByRef TypeDObjetDict as Object) par exemple. et que la ligne concernée ressemble à Dim MyDef As TypeDObjetDict = acTrans.GetObject(acDictEnt.m_value, OpenMode.ForWrite) Donc je passe un type d'objet à ScanDict et celle-ci, avec le même code, traite aussi bien les Pdf, Dwf, Dgn, et ainsi de suite. Ce qui m'éviterais de faire un "select case" avec un "case" pour chaque type d'objet. Merci de votre aide -
PDF, DWF, DGN, RasterImage
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonjour, Merci (Gile) pour ton soutient. Voici où j'en suis avec ma routine : ===== '' accès aux définition d'objets des dictionnaires Public Sub ScanDefinition() Dim acDb As Database = HostApplicationServices.WorkingDatabase Dim acTrans As Transaction = acDb.TransactionManager.StartTransaction() Dim acDbDict As DBDictionary = acTrans.GetObject(acDb.NamedObjectsDictionaryId, OpenMode.ForRead) Try ' Ne pas supprimer : fourni la liste des dictionnaires utilisés 'For Each Obj As DBDictionaryEntry In acDbDict ' Debug.Print("=>" & Obj.Key) 'Next ' dictionnaires et définitions utilisés ' Est-ce le que le dictionnaire existe ? If acDbDict.Contains("ACAD_DWFDEFINITIONS") Then ' Saisi le dictionnaire Dim acDict As DBDictionary Dim acDictId As ObjectId = acDbDict.GetAt("ACAD_DWFDEFINITIONS") acDict = acTrans.GetObject(acDictId, OpenMode.ForWrite) ' Traite chaque élément du dictionnaire For Each acDictEnt As DBDictionaryEntry In acDict Dim MyDef As DwfDefinition = acTrans.GetObject(acDictEnt.m_value, OpenMode.ForWrite) MyDef.SourceFileName = "..\..\Cercle2-Model.dwf" Next End If ===== Voici ma question: Je sais passer une variable dans une sub. Donc pour le ACAD_DWFDEFINITIONS pas de problème. Mais j'aurais aimé passer le type d'objet DwfDefinition du dernier bloc ci-dessus en variable. Est-ce possible en VB(.net) ? et comment ? J'y arrive en C, en Lisp, avec Delphi mais pas en VB. Merci de votre aide, Au plaisir de vous lire -
Bonjour, Tout d'abord bonne année à tous. Je vous souhaite : santé, amour, argent, boulot. Le bonheur, tout simplement. Mais l'activité reprend et je me remet sur mon dev "nettoyage automatique des dessins". Le réacheminement des XRefs introuvables est réussi et clos. Je m'attaque maintenant aux autres objets gérés pas la même commande XRef : PDF, DWF, DGN, RasterImage. Je pensais à priori qu'il étaient gérés de la même façon. Déçu. Je crois savoir qu'il ne sont pas considérés comme de blocks et j'ai besoin d'y accéder. Auriez-vous, sous le coude, un bout de code qui me mettrait sur la piste ? Par avance, merci.[Edité le 10/1/2010 par PhilOctet] [Edité le 10/1/2010 par PhilOctet]
-
Bonjour, Toujours dans le cadre de la création de mon outil de nettoyage de mes dessins AutoCAD, j'ai créé un évênement lors de la fermeture d'un dessin. 1/ Extrait de MyPlugin.vb Public Class MyPlugin Implements IExtensionApplication Public Sub Initialize() Implements IExtensionApplication.Initialize ' Initialize your plug-in application here Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument AddHandler acDoc.BeginDocumentClose, AddressOf docBeginDocClose End Sub Public Sub Terminate() Implements IExtensionApplication.Terminate ' Do plug-in application clean up here End Sub End Class 2/ Extrait de Module1.vb Public Sub docBeginDocClose(ByVal senderObj As Object, ByVal docBegClsEvtArgs As DocumentBeginCloseEventArgs) System.Windows.MessageBox.Show("Au revoir ...") End Sub Mais voilà, cela ne fonctionne qu'une seule fois. J'ai bien chargé la dll via la commande NetLoad qui normalement ne se décharge que lors de la fermeture complète d'AutoCAD. J'ouvre plusieurs dessins soit avec sdi =1 (les uns après les autres) ou avec sdi = 0 (tous ensembles). Cela ne fonctionne qu'une seule fois pour le premier dessin. Qu'est ce que je ne fais pas ? ou qu'est ce que je fais mal ? J'attire l'attention sur le fait que je travaille en VB.Net. Je vous remercie par avance pour votre aide.
-
XRefs introuvables
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir, C'est bien dommage ! <acronym class=dict title= ! Oui, je connais les BlockTableRecord.XrefStatus. Mais à eux seuls ne siffisent pas à résoudre d'état des Xrefs dans le dessin. Je pense que l'info n'est disponible que lorsque AutoCAD est allumé avec le dessin concerné. Donc n'est pas stocké dans le dessin. Et c'est là la difficulté ! Merci de ton soutient. Est-ce que sais où trouver une "bonne documentation" sur le .Net AutoCAD ? Le peu de doc. disponible (que j'ai trouvé ) est vraiement trop légère. Il n'y est vraiement pas évident de trouver l'outil que l'on a besoin. A bientôt, -
Bonsoir, Il est arrive que certains XRefs soient introuvables. Pourtant, qualques fois, AutoCAD les détecte. Dans le cadre de mes routines de nettoyage et de réparation, je cherche à réattacher le dessin détecté en lieu et en place de la dite Xref. Quelque est la propriété qui stocke cette information ? merci et à bientôt,
-
modification de xrefs
PhilOctet a répondu à un(e) sujet de PhilOctet dans ObjectARX/DBX, C++, .NET, RealDWG
Bonsoir Gile, Je te remercie pour tes bouts de code. Il m'ont bien aidé. Aussi, l'intérêt de mes routines est qu'elles vont être pouvoir servir à deux titres : - un usage préventif lors de l'intégration des fichiers sur notre serveur, - un usage d'aide aux utilisateurs sur des dessins seront ouverts. Mais il est vrai que j'envisage des outils de traitements sur la masse des dessins et là je m'attacherai à la deuxième partie de ton message. Donc encore merci. -
Bonjour, J'ai besoin de nettoyer une multitude de dessins. J'ai l'intention de tous les ouvrir, un à un, et d'y faire un nettoyage de base. Pour ce, je voudrais utiliser VB.Net via un netload dans AutoCAD. La boucle "Ouvrir les dessins fonctionne", la première étape du nettoyage "ScanXRef" fonctionne aussi. Mais lorsque j'appelle l'une par un 'Call' dans l'autre, la routine appelée plante. Je vous fourni des extraits de codes. Peut-être que l'un d'entre vous peut m'aider ? 1/ code la boucle d'ouverture : '' Ouvre un à un les fichiers dessin AutoCAD CommandMethod("Open", CommandFlags.Session) Public Shared Sub Open() Dim acDocCol As DocumentCollection = Application.DocumentManager acDocCol.CloseAll() Dim acDoc As Document = Nothing ' ici création d'une boucle de recherche des dessins mais en attendant Dim filePath As String = "F:\SC Dessins\Dev\e2_apd\PLO\Cercle1.dwg" Try acDoc = acDocCol.Open(filePath, False) acDocCol.MdiActiveDocument = acDoc Catch Debug.Print("Abandon de : " & filePath) End Try acDoc.Editor.WriteMessage(vbLf & acDoc.Name) Call ScanXRef() End Sub Remarquez le "Call ScanXRef" 2/ extrait de ScanXRef : CommandMethod("ScanXRef") Public Shared Sub ScanXRef() Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument Dim acCurDb As Database = HostApplicationServices.WorkingDatabase() Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction() '' Retourne la table des blocks dans la base de données courantes Dim acBlkTbl As BlockTable acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForWrite) Dim acColors(2) As Color '' traite un à un les différents blocs Dim acBlkTblRec As BlockTableRecord Dim acBlkPathName As String Dim SuppXRef As Boolean = False For Each acObjId As ObjectId In acBlkTbl acBlkTblRec = acTrans.GetObject(acObjId, OpenMode.ForWrite) ... Le plantage surgit sur les lignes des "OpenMode.ForWrite". L'erreur est une eLockViolation Pourtant et indépendemment, les deux nouvelles fonctions AutoCAD se déroulent bien. Que faut-il que je modifie à l'une ou à l'autre des routines pour que cela fonctionne bien ? Considérant mon niveau, un peu d'explication ne serait par superflu. Merci de m'aider.
