.NET

Reply
Member
JLin631
Posts: 5
Registered: ‎12-19-2011
Message 1 of 3 (330 Views)
Accepted Solution

Multiply owned object

330 Views, 2 Replies
08-13-2012 11:39 AM

I have a function that clones drawing layouts from a source drawing to a current working (target) drawing. This function is causing a  *Warning* Multiply owned object, handle "F4" warning after the layout is cloned and the target drawing saved. Since I've audit and recovered the target drawing and found no errors, this warning is just annoying.

 

Here's the code:

 

Public Function ImportLayout(ByVal filename As String, ByVal layoutname As String) As ObjectId
Dim idLayout As ObjectId = ObjectId.Null
Dim doc As Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
Dim ed As Editor = doc.Editor
Dim oLock As DocumentLock = doc.LockDocument()
Dim dbSource As New Database(False, False)
Dim db As Database = HostApplicationServices.WorkingDatabase
Dim trans As Transaction = db.TransactionManager.StartTransaction()
Try
dbSource.ReadDwgFile(filename, System.IO.FileShare.Read, True, Nothing)
Dim idDbdSource As ObjectId = dbSource.LayoutDictionaryId
Dim dbdLayout As DBDictionary = DirectCast(trans.GetObject(idDbdSource, OpenMode.ForRead, False, False), DBDictionary)
For Each deLayout As DictionaryEntry In dbdLayout

Dim sLayout As String = deLayout.Key.ToString()
If sLayout.ToUpper() = layoutname.ToUpper() Then
idLayout = DirectCast(deLayout.Value, ObjectId)
Exit For
End If
Next
If idLayout <> ObjectId.Null Then
Dim idc As New ObjectIdCollection()
idc.Add(idLayout)
Dim im As IdMapping = New IdMapping()
Dim dbdict As DBDictionary = DirectCast(trans.GetObject(db.LayoutDictionaryId, OpenMode.ForRead, False, False), DBDictionary)

dbdict.UpgradeOpen()
db.WblockCloneObjects(idc, db.LayoutDictionaryId, im, DuplicateRecordCloning.MangleName, False)
Dim ip As IdPair = im.Lookup(idLayout)
idLayout = ip.Value
Dim lm As LayoutManager = LayoutManager.Current

lm.CurrentLayout = layoutname
dbdict.DecomposeForSave(DwgVersion.Current)
ed.Regen()
End If
trans.Commit()
Catch ex As System.Exception
MsgBox(ex.StackTrace)
Finally
trans.Dispose()
dbSource.Dispose()
oLock.Dispose()
End Try
Return idLayout
End Function

 

Any help would be greatly appreciated.

Thanks in advance.

 

 

Hi,

 

Try using the Layout.CopyFrom method to copy the layout from the source database. For this you will first need to have a layout created in the destination database. The entities in the layout block table record can then be copied using the wblockCloneObjects.

 

Here is a related blog post :

http://adndevblog.typepad.com/autocad/2012/07/using-wblockcloneobjects-to-copy-a-layout-from-the-active-document-to-a-new-drawing.html

 

This blog post exports a layout to a newly created database and for your case, it is the reverse.

ADN Support Specialist
Balaji_Ram
Posts: 749
Registered: ‎03-21-2011
Message 2 of 3 (287 Views)

Re: Multiply owned object

08-16-2012 09:39 AM in reply to: JLin631

Hi,

 

Try using the Layout.CopyFrom method to copy the layout from the source database. For this you will first need to have a layout created in the destination database. The entities in the layout block table record can then be copied using the wblockCloneObjects.

 

Here is a related blog post :

http://adndevblog.typepad.com/autocad/2012/07/using-wblockcloneobjects-to-copy-a-layout-from-the-act...

 

This blog post exports a layout to a newly created database and for your case, it is the reverse.



Balaji
Developer Technical Services
Autodesk Developer Network

Member
JLin631
Posts: 5
Registered: ‎12-19-2011
Message 3 of 3 (207 Views)

Re: Multiply owned object

11-29-2012 04:12 PM in reply to: Balaji_Ram

Thanks Balaji_Ram,

 

I've tried both set of code in the link you've provided, but they did work.

What I did was change this line 

 db.WblockCloneObjects(idc, db.LayoutDictionaryId, im, DuplicateRecordCloning.MangleName, False)

to

 db.WblockCloneObjects(idc, db.LayoutDictionaryId, im, DuplicateRecordCloning.Ignore, False)

as the post suggested and it works! No more error warning we I save the drawing.

 

Thanks!

Sorry for the late reply. 

 

Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Do you have 60 seconds to spare? The Autodesk Community Team is revamping our site ranking system and we want your feedback! Please click here to launch the 5 question survey. As always your input is greatly appreciated.