AutoCAD Civil 3D Customization
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic to the Top
- Bookmark
- Subscribe
- Printer Friendly Page
read anonymous blocks
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
I have the follwoing error in C3D R2013.
Unable to cast object of type 'Autodesk.AutoCAD.DatabaseServices.BlockTableRecor
When casting from a number, the value must be a number less than infinity
Make sure the source type is convertible to the destination type
My code is:
Imports System Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Imports Autodesk.AutoCAD.Geometry Imports Autodesk.AutoCAD.EditorInput Imports Autodesk.AutoCAD Imports Autodesk.AutoCAD.ApplicationServices.Application Imports Autodesk.AutoCAD.LayerManager Imports Autodesk.AutoCAD.Windows Imports Autodesk.AutoCAD.PlottingServices Imports Autodesk.AutoCAD.Colors Imports Autodesk.Civil.DatabaseServices Imports Autodesk.Civil.ApplicationServices Imports Autodesk.Civil.DatabaseServices.LabelGroup Imports Autodesk.Civil.DatabaseServices.Styles.LabelSetStylesRoot Imports Autodesk.Civil.Runtime Imports Excel = Microsoft.Office.Interop.Excel Imports Microsoft.VisualBasic.FileIO.FileSystem Imports System.IO Imports System.Convert Imports Microsoft.VisualBasic.Strings Imports System.Runtime.InteropServices Imports System.Collections.Specialized ... Using tr As Transaction = db.TransactionManager.StartTransaction() Dim btable As BlockTable = DirectCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable) If btable.Has("vbredakdettek") Then Dim btr As BlockTableRecord = DirectCast(tr.GetObject(btable("vbredakdettek"), OpenMode.ForRead), BlockTableRecord) For Each refId As ObjectId In btr.GetAnonymousBlockIds() myBlock = DirectCast(tr.GetObject(refId, OpenMode.ForRead), BlockReference) ...
Re: read anonymous blocks
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi,
>> Unable to cast object of type 'Autodesk.AutoCAD.DatabaseServices.BlockTableRecor
>> to type 'Autodesk.AutoCAD.DatabaseServices.BlockReference'
I have not tried it, but I guess that the function .GetAnonymousBlockIds returns ObjectIDs of BlockTableRecords.
So change your last shown code line to:
Dim myBlockBTR as BlockTableRecord = DirectCast(tr.GetObject(refId, OpenMode.ForRead), BlockTableRecord)
...does that work?
- alfred -
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at
-------------------------------------------------------------------------
Re: read anonymous blocks
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
that works, but my code continues with:
Using tr As Transaction = db.TransactionManager.StartTransaction()
Dim btable As BlockTable = DirectCast(tr.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
If btable.Has("vbredakdettek") Then
Dim btr As BlockTableRecord = DirectCast(tr.GetObject(btable("vbredakdettek"), OpenMode.ForRead), BlockTableRecord)
For Each refId As ObjectId In btr.GetAnonymousBlockIds()
Dim myBlockBTR As BlockTableRecord = DirectCast(tr.GetObject(refId, OpenMode.ForRead), BlockTableRecord)
'myBlock = DirectCast(tr.GetObject(refId, OpenMode.ForRead), BlockReference)
Dim owner As BlockTableRecord = DirectCast(tr.GetObject(myBlock.OwnerId, OpenMode.ForRead), BlockTableRecord)
If owner.IsLayout Then
If myBlock.Name.ToUpper = "VBREDAKDETTEK" ThenHow can I then get "myblock" ?
Re: read anonymous blocks
- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Highlight
- Email to a Friend
- Report Inappropriate Content
Hi,
use the function myBlockBTR.GetBlockReferenceIDs to get the ObjectIDs pointing to the blockreferences then.
- alfred -
Alfred NESWADBA
Ingenieur Studio HOLLAUS ... www.hollaus.at
-------------------------------------------------------------------------

