Aller au contenu

Cloner un WBlock


sam-123

Messages recommandés

Bonjour a tous,

 

En voulant cloner un WBlock il me bloque sur cette la ligne:

    MyDb.ReadDwgFile(FromFile, IO.FileShare.Read, True, "")

Ma commande d’appelle :

  _
Public sub CPB()
       CopieBlock("C:\DimStyles\Les Blocks.dwg", "Block 1")
   End Sub

Mon programme :

 

 Public Function CopieBlock(ByVal FromFile As String, ByVal BlockName As String)
       Dim MyDWG As Autodesk.AutoCAD.ApplicationServices.Document
       MyDWG = Application.DocumentManager.MdiActiveDocument
       Dim MyDb As Autodesk.AutoCAD.DatabaseServices.Database
       MyDb = MyDWG.Database
       Using LockDoc As DocumentLock = MyDWG.LockDocument()
           Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
               MyDb.ReadDwgFile(FromFile, IO.FileShare.Read, True, "")
               Dim YourBlockT As Autodesk.AutoCAD.DatabaseServices.BlockTable
               Dim YourBlockTR As Autodesk.AutoCAD.DatabaseServices.BlockTableRecord
               YourBlockT = MyDb.BlockTableId.GetObject(Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead)
               YourBlockTR = YourBlockT(BlockName).GetObject(Autodesk.AutoCAD.DatabaseServices.OpenMode.ForRead)
               Dim myBlockT As Autodesk.AutoCAD.DatabaseServices.BlockTable
               myBlockT = MyDb.BlockTableId.GetObject(Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite)
               Dim myMap As New Autodesk.AutoCAD.DatabaseServices.IdMapping
               Dim myObjs As New Autodesk.AutoCAD.DatabaseServices.ObjectIdCollection
               myObjs.Add(YourBlockTR.ObjectId)
               MyDb.WblockCloneObjects(myObjs, myBlockT.ObjectId, myMap, _
               Autodesk.AutoCAD.DatabaseServices.DuplicateRecordCloning.Replace, False)
               MyTrans.Commit()
           End Using
       End Using
   End Function

 

Je ne sais la raison,(pour moi il n’y a pas l’air d’avoir un probleme)

[Edité le 16/2/2010 par sam-123]

 

[Edité le 16/2/2010 par sam-123]

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Avant d'aller plus loin, ton code est très (trop) pénible à lire, il y a une douzaine de :

Autodesk.AutoCAD.DatabaseServices

Encore une fois, si au début du code, tu fait :

Imports Autodesk.AutoCAD.DatabaseServices

Tu n'auras plus besoin de le répéter sans cesse dans le code et j'arriverais peut-être à le lire...

Et peut être qu'ainsi tu t'emmêleras moins les pinceaux entre les Databses que tu veux manipuler...

 

 

Pour l'utilisation de WblockCloneObjects, voir AutoCAD .NET Developer's Guide > Create and Edit AutoCAD Entities > Edit Named and 2D Objects > Copy Objects > Copy Objects between Databases

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

Lien vers le commentaire
Partager sur d’autres sites

Voilà

A force de tourné, retourné, coupé . . .

Voilà a ce quoi je suis arrive

Hey, ca fonctionne ! :o

 

 Public Sub ImportDeBlock()
       Dim MyDWG As Autodesk.AutoCAD.ApplicationServices.Document
       MyDWG = Application.DocumentManager.MdiActiveDocument
       Dim MyDb As Autodesk.AutoCAD.DatabaseServices.Database
       MyDb = MyDWG.Database
       Using LockDoc As DocumentLock = MyDWG.LockDocument()
           Using MyTrans As Transaction = MyDb.TransactionManager.StartTransaction
               Dim MyDbSource As New Database
               MyDb = MyDWG.Database
               MyDbSource.ReadDwgFile("C:\Mes Blocks\Les Blocks.dwg", IO.FileShare.Read, True, "")
               MyDb.Insert("Block1.dwg", MyDbSource, True)
               MyDbSource.Dispose()
               MyTrans.Commit()
           End Using
       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é