Probleme with MLeaderStyle
Hi,
I have a Probleme with the PostMLeaderStyleToDb Method, this make me an error but I can't identify them while the debugger spring.
Here my code:
public void LoadImportedMLeaderStyle()
      {
         List<AcDataService.MLeaderStyle> mlStyles = new List<AcDataService.MLeaderStyle>();
         var doc = AcAp.Application.DocumentManager.MdiActiveDocument;
         AcDataService.Database acCurDb = doc.Database;
         Dictionary<string, AcDataService.MLeaderStyle> mlStyleDico = new Dictionary<string, AcDataService.MLeaderStyle>();
         string dwgFilePath = Symbol.RichtungsPfeileOrSonstigesOrRSADWGPath(Symbol.mLeaderStyleDWGFileName);
         if (File.Exists(dwgFilePath))
         {
            try
            {
               using (var trans = doc.TransactionManager.StartTransaction())
               {
                  using (AcDataService.Database sourceDb = new AcDataService.Database(false, true))
                  {
                     //load MLeaderStyle aus DWG
                     sourceDb.ReadDwgFile(dwgFilePath, FileShare.Read, false, null);
                     sourceDb.CloseInput(true);
                     using (var transsourcedb = sourceDb.TransactionManager.StartOpenCloseTransaction())
                     {
                        //Suche die MLeaderStyle
                        var mlStyleImport = (AcDataService.DBDictionary)transsourcedb.GetObject(sourceDb.MLeaderStyleDictionaryId, AcDataService.OpenMode.ForRead);
                    //Load die aktuell MLeaderStyle aus Current DB
                    AcDataService.DBDictionary mlStylesAktuell = (AcDataService.DBDictionary)trans.GetObject(acCurDb.MLeaderStyleDictionaryId, AcDataService.OpenMode.ForRead);
                    foreach (AcDataService.DBDictionaryEntry entry in mlStyleImport)
                    {
                       AcDataService.MLeaderStyle mls = (AcDataService.MLeaderStyle)transsourcedb.GetObject(entry.Value, AcDataService.OpenMode.ForRead);
                       if (mls != null)
                       {
                          if (!mlStylesAktuell.Contains(mls.Name))
                          {
                             var mlsClone = mls.Clone() as AcDataService.MLeaderStyle;
                             //Gibt den Clone als neue MLeaderStyle an den Current DB
                             mlsClone.PostMLeaderStyleToDb(acCurDb, mls.Name);
                             trans.AddNewlyCreatedDBObject(mlsClone, true);
                          }
                       }
                    }
                    transsourcedb.Commit();
                 }
              }
              trans.Commit();
           }
        }
        catch(Exception ex)
        {
        }
     }
                Comments
- 
            
You cannot insert a cloned object into another database. The object is full of links to another database. It doesn't work that way. Copying between drawings is done only by the WblockCloneObjects method
0 - 
            
just like example:
private static void DimStylesImport(Database targetDb, string fileName, string[] DimStylesNames, DuplicateRecordCloning behaviour) { using Database sourceDb = DocExt.GetDocDatabase(fileName); if (sourceDb is null) return; if (sourceDb == targetDb) return; // вызов метода из самого файла шаблона ObjectIdCollection dimIds = new ObjectIdCollection(); using (Transaction sourceTr = sourceDb.TransactionManager.StartTransaction()) { DimStyleTable dst = sourceTr.GetObject(sourceDb.DimStyleTableId, OpenMode.ForRead) as DimStyleTable; foreach (string dimName in DimStylesNames) if (dst.Has(dimName)) dimIds.Add(dst[dimName]); sourceTr.Commit(); } IdMapping mapping = new IdMapping(); sourceDb.WblockCloneObjects(dimIds, targetDb.DimStyleTableId, mapping, behaviour, false); }0 - 
            
Hi avc,
thanks for your help.
With the WBlockCloneObjects it's working perfect.Thanks
0 
