Author Topic: cloning MLeaderStyle  (Read 4857 times)

0 Members and 1 Guest are viewing this topic.

WOWENS

  • Newt
  • Posts: 59
Re: cloning MLeaderStyle
« Reply #15 on: November 27, 2012, 10:15:14 AM »
Thank you TT, your Idea was way Better then mine. I hope I understood the correct way of doing it.
and Jeff thank you for your Idea but I was not able to do as you suggested (probably my fault for not know the correct way)
once again thank you all for all your help.

Code: [Select]
Public Function CloneMLeaderStyle(ByVal TargetDatabase As Database, ByVal sourceFileName As String, ByVal mLeaderStyleName As String, ByVal dscale As Double) As ObjectId

            If IO.File.Exists(sourceFileName) = False Or mLeaderStyleName = "" Then
                Return ObjectId.Null
            End If

            Using TargetTrans As Transaction = TargetDatabase.TransactionManager.StartTransaction
                Dim Targetdict As DBDictionary = TryCast(TargetTrans.GetObject(TargetDatabase.MLeaderStyleDictionaryId, OpenMode.ForRead), DBDictionary)

                Using sourceDatabase As New Database(False, True)
                    sourceDatabase.ReadDwgFile(sourceFileName, FileOpenMode.OpenForReadAndAllShare, True, Nothing)
                    Using sourceDbTr As Transaction = sourceDatabase.TransactionManager.StartTransaction()
                        Try
                            Dim Sourcedict As DBDictionary = TryCast(sourceDbTr.GetObject(sourceDatabase.MLeaderStyleDictionaryId, OpenMode.ForRead), DBDictionary)

                            If Not Sourcedict.Contains(mLeaderStyleName) Then
                                Return ObjectId.Null
                            End If

                            Dim SourceMLeaderStyleID As ObjectId = Sourcedict.GetAt(mLeaderStyleName)
                            Dim ids As New ObjectIdCollection()

                            ids.Add(SourceMLeaderStyleID)
                            Dim idMap As New IdMapping()

                            If Not Targetdict.Contains(mLeaderStyleName) Then
                                TargetDatabase.WblockCloneObjects(ids, TargetDatabase.MLeaderStyleDictionaryId, idMap, DuplicateRecordCloning.Replace, False)

                                TargetTrans.Commit()

                                Return idMap(SourceMLeaderStyleID).Value
                            Else
                                TargetDatabase.WblockCloneObjects(ids, TargetDatabase.MLeaderStyleDictionaryId, idMap, DuplicateRecordCloning.MangleName, False)
                                Dim TempMLeaderStyleID As ObjectId = idMap(SourceMLeaderStyleID).Value
                                Dim TempMLeaderStyle As MLeaderStyle = TryCast(TargetTrans.GetObject(TempMLeaderStyleID, OpenMode.ForRead), MLeaderStyle)

                                Dim TargetMLeaderStyleID As ObjectId = Targetdict.GetAt(mLeaderStyleName)
                                Dim TargetMLeaderStyle As MLeaderStyle = TryCast(TargetTrans.GetObject(TargetMLeaderStyleID, OpenMode.ForRead), MLeaderStyle)

                                TempMLeaderStyle.UpgradeOpen()
                                TempMLeaderStyle.Scale = dscale
                                TempMLeaderStyle.DowngradeOpen()

                                TargetMLeaderStyle.UpgradeOpen()
                                TargetMLeaderStyle.SwapIdWith(TempMLeaderStyleID, True, True)
                                TargetMLeaderStyle.DowngradeOpen()

                                Targetdict.Remove(TempMLeaderStyleID)

                                TargetTrans.Commit()

                                Return Targetdict.GetAt(mLeaderStyleName)
                            End If
                        Catch
                            Return ObjectId.Null
                        End Try
                    End Using
                End Using
            End Using
        End Function
« Last Edit: November 27, 2012, 10:29:56 AM by WOWENS »