Nothing new as Lee already gave a nice explanation,
but a BlockReference
- Pushes transformation matrixes on a stack in the graphics pipeline
- Draws the entities in the Block Definition
- Pops the transformations off.
So a BlockReference is nothing but a set of transformations to be applied to its definition as in scale, position, rotation, and other properties common to all entities like color, linetype, etc....
When it encounters a non-constant AttributeDefinition it creates a AttributeReference that is attached to the BlockReference.
A block definition can not have different states or vary between blockreferences that reference it since they just transform it as mentioned above.
A dynamic block just has parameters and the arguments passed in by a stretch or rotation grip or directly entered in properties palette, etc... are used to create another BlockDefinition(I think it searches first if one is already created with same values).
I and not familiar with AutoLisp but, I do know how to steal it.
Did a quick search and first thing I found that was 4 lines or less was from Lee.
I made a minor adjustment which removes a "*" from the beginning of blocks name.
Now anonymous blocks will show up in the block editor.
If you want to see them insert some dynamic blocks and change some of the properties for each BlockReference.
Also add some tables and dimensions if you want to see that they are really just anonymous blocks.
Then run the code below.
Would use only on a test drawing and not on any drawing you would want for future use.
Link to original code stolen from Lee.
Tables are named T1, T2, T3
Dimensions are D1, D2, etc..
Dynamic Blocks create names U1, U2, U3, etc....
In case you were wondering
BlockReferences contain the properties BlockTableRecord , DynamicBlockTableRecord & AnonymousBlockTableRecord.
BlockTableRecord
Accesses the object ID of the BlockTableRecord referenced by the block reference.
DynamicBlockTableRecord
Returns the object ID of the dynamic block definition (a BlockTableRecord) if the block reference is a dynamic block.
AnonymousBlockTableRecord
Returns the anonymous block definition used to draw the dynamic block.
BlockTableRecord always points to its definition.
If it is not dynamic or no properties have been change to a dynamic block then
- DynamicBlockTableRecord & BlockTableRecord are the same
- AnonymousBlockTableRecord is null(nill)
If properties have been change to a dynamic block then
- DynamicBlockTableRecord points to the dynamic block definition
- AnonymousBlockTableRecord & BlockTableRecord are the same