.NET
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
1. first I have a drawing called "test1"
2. and a drawing call "Dwg1" Inside this drawing is a block called "Block1"
3. now after I insert Drawing "Dwg1" into drawing "test1" I explode it then I save and close the drawing test1.
4. now I run this code on drawing Test1 and it gives me a block count of 2 for block "Block1"
but there is only one block Reference in the drawing called "Block1"
yes I know when I inserted the Drawing "dwg1" is comes in as a block called "dwg1" and inside that Block is a block called "block1"
now my code count the block1 that is inside the drawing/block called "dwg1 Even though i exploded the drawing/block "dwg1"
my question is Even though i exploded the Drawing/block "dwg1" why does "block1" that was inside Drawing/block "dwg1" show up as a Block Reference?
and how do i work around this so i only get the Block Reference that is really in the drawing.
Public Sub DwgTest(ByVal pathtodwg As String, ByVal blockname As String)
Dim db As Database = New Database(False, False)
If IO.File.Exists(pathtodwg) = True Then
db.ReadDwgFile(pathtodwg, System.IO.FileShare.Read, False, Nothing)
Using Trans As Transaction = db.TransactionManager.StartTransaction
Dim bktbl As BlockTable = db.BlockTableId.GetObject(OpenMode.ForRead)
Dim revblk As BlockTableRecord = bktbl(blockname).GetObject(OpenMode.ForRead)
Dim refs As ObjectIdCollection = revblk.GetBlockReferenceIds(False, False)
MsgBox(refs.Count.ToString)
End Using
db.Dispose()
End If
End Sub
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi,
>> now after I insert Drawing "Dwg1" into drawing "test1" I explode it then I save and close the drawing test1.
If you insert DWG1 in TEST1 and you explode it then ==> you have exploded the block called DWG1, but as the block BLOCK1 was a subobject it is not exploded with it's parent one, so after your step 3 there is one blockreference called BLOCK1 in modelspace.
If you redo the same, you will have 2 blockreferences then.
You can simulate this by hand, insert DWG1 into a new drawing, explode it, you'll see that BLOCK1 is now available in modelspace.
Does that clear up you situation?
- alfred -
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at
-------------------------------------------------------------------------
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
I understand the when I explode Dwg1 it leaves Block1 in model space but the code shows that there are 2
Block References for block Block1 thats the part i do not understand. when i check the
Block Reference (bref.BlockName one will = Block1 and the other will = *Model_Space) so why does is show a
bref.BlockName to Block1 after block1 was exploded.
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
mistyped try this again.
I understand the when I explode Dwg1 it leaves Block1 in model space but the code shows that there are 2
Block References for block Block1 thats the part i do not understand. when i check the
Block Reference (bref.BlockName one will = dwg1 and the other will = *Model_Space) so why does is show a
bref.BlockName to Block1 after block1 was exploded.
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi,
>> but the code shows that there are 2Block References for block Block1 thats the part i do not understand
When you open the drawing and select the content of the modelspace with QSELECT, how many BlockReferences do you see then? Because I don't see a problem with your code and counting.
>> so why does is show a bref.BlockName to Block1 after block1 was exploded.
I didn't see in your description (points 1 to 4) and position where you explode the BlockReference called "BLOCK1" in the modelspace of the new drawing?
You just exploded to parent DWG1.
- alfred -
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at
-------------------------------------------------------------------------
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
What you might want to look into is BlockReference.Name, not BlockReference.BlockName.
The former is the name of a BlockTableRecord (block definition) the BlockReference is based on, while the later is the name of the BlockReference' owner (usually, it is the ModelSpace block or PaperSpace block).
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi alfred
if i open the drawing and do qselect there is only one item in model_space if i try erase all there is only one item found in model_space but my code shows 2 Block References for Block1..if i purge the drawing then my code shows only one Block References for Block1
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi Norman.
yes i know that, i was using BlockReference.BlockName only to see what was going on
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
HI alfred
I never explode Block1 I only explode block Dwg1
Re: Block Reference question.
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
here is the code and the drawing mybe you can tell me why my code gives me a count of 2 for block DBDSTXT
Call DwgTest("C:\test.dwg", "DBDSTXT")
Public Sub DwgTest(ByVal pathtodwg As String, ByVal blockname As String)
Dim db As Database = New Database(False, False)
If IO.File.Exists(pathtodwg) = True Then
db.ReadDwgFile(pathtodwg, System.IO.FileShare.Read, False, Nothing)
Using Trans As Transaction = db.TransactionManager.StartTransaction
Dim bktbl As BlockTable = db.BlockTableId.GetObject(OpenMode.ForRead)
Dim revblk As BlockTableRecord = bktbl(blockname).GetObject(OpenMode.ForRead)
Dim refs As ObjectIdCollection = revblk.GetBlockReferenceIds(False, False)
MsgBox(refs.Count.ToString)
End Using
db.Dispose()
End If
End Sub


