Question

Autocad dynamic block name

  • 16 September 2013
  • 7 replies
  • 28 views

Hello,

 

 

I have an issue when reading a DWG file with dynamic blocks in it. I'm unable to get proper autocad_block_name for dynamic blocks.

 

 

Here's what I've done:

 

1) I've prepared a dynamic block definition in DWG file: it is possible to move attributes of the block away from its original base position.

 

2) I've created a sample DWG file, where the block definition is used.

 

For some of the block inserts I've moved the attributes away from the original position.

 

 

When reading the DWG with FME (viewer/workbench) I cannot access the original block name. Istead of proper name "UR_BLOCK" FME reads "*U76" for the blocks whose attributes were moved.

 

 

Following autocad forums, I've learned that the dynamic blocks get anonymous name like "*U76", when their internals change. This means that technically they are different from blocks that stayed intact. Still when using autocad I'm able to see orignal block name when editing it's attribute values.

 

 

Is there a way to read original name of a dynamic block in FME?

 

 

Cheers,

 

Bartosz

7 replies

I stumbled upon the same problem this week. We are looking into the capabilities of FME to read dynamic properties within blocks and even read blocks within blocks but haven't found a solution so far. We also noticed that if you have a dynamic block FME doesn't store the original block name but the temporary block name that is generated by Autodesk Autocad when opening a dwg file with dynamic blocks. But like you mentioned both names are known in autocad => original blockname and anonymous name.

To provide interoperability this is a nightmare :) We would love to see this in future releases because it would be an addition to our BIM Use implementation (Drawing Review) in our drawing offices.

Userlevel 3
Badge +13

I talked with the CAD team and their detailed response is pasted below. In short, please @bar and @robbycattoor -- send a sample to support@safe.com referencing this posting and we'll see what we can do. Detailed discussion below:

There appear to be two forms of dynamic blocks we have seen:

1) The type that have their original block name contained on the dynamic block definition as xData called the AcDbDynamicBlockTrueName. When this exists, the FME AutoCAD readers will attempt to fetch this and use it as the block name.

2) The type that reference a non-dynamic block via a handle in their EED. Such dynamic blocks do not have an AcDbDynamicBlockTrueName field in their xData, but the name is available from the referenced block. This is currently not handled by FME AutoCAD readers.

If this functionality is desirable, please contant support and reference PR 65258 where this is currently tracked.

I talked with the CAD team and their detailed response is pasted below. In short, please @bar and @robbycattoor -- send a sample to support@safe.com referencing this posting and we'll see what we can do. Detailed discussion below:

There appear to be two forms of dynamic blocks we have seen:

1) The type that have their original block name contained on the dynamic block definition as xData called the AcDbDynamicBlockTrueName. When this exists, the FME AutoCAD readers will attempt to fetch this and use it as the block name.

2) The type that reference a non-dynamic block via a handle in their EED. Such dynamic blocks do not have an AcDbDynamicBlockTrueName field in their xData, but the name is available from the referenced block. This is currently not handled by FME AutoCAD readers.

If this functionality is desirable, please contant support and reference PR 65258 where this is currently tracked.

I looked into it today and found the original block name by exposing the elements from the list recovered from the ACAD reader attribute autocad_extended_data_list. If the list is build the same way every time you read a DWG with dynamic blocks it should be on the third element list[2] in that list.

Once you've exposed it, filter the blockname from the string on that reader's list[2] attribute.

The answer of Dale saved me alot of time and solved a problem on our project for wich we had to find a time consuming and annoying work around otherwise.

Thn for that Safe!

capture.png

I talked with the CAD team and their detailed response is pasted below. In short, please @bar and @robbycattoor -- send a sample to support@safe.com referencing this posting and we'll see what we can do. Detailed discussion below:

There appear to be two forms of dynamic blocks we have seen:

1) The type that have their original block name contained on the dynamic block definition as xData called the AcDbDynamicBlockTrueName. When this exists, the FME AutoCAD readers will attempt to fetch this and use it as the block name.

2) The type that reference a non-dynamic block via a handle in their EED. Such dynamic blocks do not have an AcDbDynamicBlockTrueName field in their xData, but the name is available from the referenced block. This is currently not handled by FME AutoCAD readers.

If this functionality is desirable, please contant support and reference PR 65258 where this is currently tracked.

I looked into it a little closer and saw that I was happy with the solution a little too fast :)

I read a dynamic block definition but once i used that dynamic block, placed in a dwg and performed some dynamic actions on it all that Entity Data is gone and also the original block name.

Too bad! Looks like i have to implement a work around after all.

I will prepare a use case and send it to support and hope they can work something out for me.

Userlevel 4
Badge +26

If anyone stumbles upon this problem there is an idea here which you can vote on: https://knowledge.safe.com/idea/77105/read-proper-dynamic-block-names-from-autocad-forma.html?

Badge +11

I looked into it today and found the original block name by exposing the elements from the list recovered from the ACAD reader attribute autocad_extended_data_list. If the list is build the same way every time you read a DWG with dynamic blocks it should be on the third element list[2] in that list.

Once you've exposed it, filter the blockname from the string on that reader's list[2] attribute.

The answer of Dale saved me alot of time and solved a problem on our project for wich we had to find a time consuming and annoying work around otherwise.

Thn for that Safe!

capture.png

I'm wondering if you could provide more detail

What Reader (C3D, ACAD, AUTOCAD_OD, REALDWG or ESRIMSD)?

What Setting in the READER?

This what I see

Userlevel 4
Badge +25

I'm wondering if you could provide more detail

What Reader (C3D, ACAD, AUTOCAD_OD, REALDWG or ESRIMSD)?

What Setting in the READER?

This what I see

Probably better to post this as a new question with a link to this one. It's unlikely many folk will notice this question here.

Reply