Blocks, Anonymus Blocks, Referenced Blocks ... please enlighten me.

I totally lost overview about Blocks now.

Example 1 :
I get client's Revit exports with myriads of Blocks.
Some are used in a way I know from other CAD Systems :
Multiple Instanced Copies for repetitive (exactly same) Elements.
The Parent Block is either stored in the Files "Block Library"
or "referenced" for an other File.

Most of the Blocks have a single Reference in the File only.
Something you would just use a "Group" for, in other CADs.

Example 2 :
Components in Bricscad.
I realized that "Chairs" when inserted in the drawing are not (!)
instanced Copies, but was told "Anonymous Blocks".
(Which don't exist in the Drawings Explorer's Blocks List)

Unfortunately with all that useful, or less useful usage of
standard Blocks or anonymous Blocks,
in Bricscad they are all called "Block Reference".
So :

  • What exactly is an "Anonymous Block" and its behaviors ?
  • How do I create an Anonymous Block ?
  • How can I distinguish between these different "Block Reference" Types ?
    (Beside that BEDIT refuses to work with some of them)

  • How can I select or separate their Types in my File

Comments

  • The word 'anonymous' is slightly misleading as blocks always have a name. Anonymous blocks have computer-generated names that start with '*', followed by a letter (usually 'U') and then a number.

    1. Anonymous blocks are always created by applications. Their default behavior is the same as that of any static block. But the application will often handle them in a dedicated manner. Modifying a dynamic block results in an anonymous block, and so does modifying a mechanical component that was inserted as external. Yet BricsCAD handles them quite differently.
    2. Without code you cannot create an anonymous block. With code it is quite easy. You can for example rename an existing block: (vla-put-name (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "MyTestBlock") "*U")
    3. There is no visual way to distinguish them. Before V17 the anonymous name of component instances would be visible in the Properties Bar, but this is no longer the case. The _List command will show the anonymous name however.
    4. One way to select them is with the _Select command using the unique first character of their names as the criterion. See command history below.

    _Select command example (note the reversed quote):

    : SELECT
    Select entities to include in set: pro
    Select by properties: name
    Entity name(s) to select <*>: `**
    Select by properties: 
    Entities in set: 5
    Select entities to include in set: 
    
  • @Roy Klein Gebbinck said:
    The word 'anonymous' is slightly misleading as blocks always have a name.

    My first thought too ;)

    names that start with '*', followed by a letter (usually 'U') and then a number

    Thanks a lot !
    This helps.

    1. Anonymous blocks are always created by applications. Their default behavior is the same as that of any static block. .... Modifying a dynamic block results in an anonymous block, and so does modifying a mechanical component that was inserted as external. Yet BricsCAD handles them quite differently.

    What is a Static Block ?

    I asked myself why v19 Components come in as non instanced,
    anonymous Blocks. If you bring in 5000 chairs for your stadium,
    you would prefer to have instanced Block References.

    But if I got that right,
    it is needed for Copies that need individual changes.
    (Like in Vectorworks you would insert a "Symbol" (Block) with the
    "insert as Group" option)
    Like some Components like Windows will need that differentiation
    form a standard Block's "change one, changes all" behavior.

    So the Component itself is a normal standard (external) "Block",
    and the whole Anonymous-ness is created by the Insert Tool only ?
    See :

    1. Without code you cannot create an anonymous block. With code it is quite easy. You can for example rename an existing block: (vla-put-name (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) "MyTestBlock") "*U")

    2. There is no visual way to distinguish them. Before V17 the anonymous name of component instances would be visible in the Properties Bar, but this is no longer the case. The _List command will show the anonymous name however.

    Pity,
    I see now.

    1. One way to select them is with the _Select command using the unique first character of their names as the criterion. See command history below.

    _Select command example (note the reversed quote):

    : SELECT
    Select entities to include in set: pro
    Select by properties: name
    Entity name(s) to select <*>: `**
    Select by properties: 
    Entities in set: 5
    Select entities to include in set: 
    

    So far I got :
    Anonymous Blocks are not listed in Drawing Explorer Block List.
    Not all Components are inserted as Anonymous Blocks.
    People : Hannes is inserted as a "real" Block
    and it exists in the Block List as a Hannes only - and a "Hannes Block".
    Unfortunately hey appear in the Structure Manager all as same
    "Block Reference" like any other Type of Block.
    But all Copies of Hannes will be Instanced Copies (fine !)

    Although for me it looks like Hannes Block is now,
    after insert insertion,
    also saved as a Block in the File itself (?)
    and therefore no more referenced from Hannes - the Component from
    the Component Library, and will no more update after changes of the
    original Hannes ?

    A Chair,
    even those which have no Parameters to change, will be inserted as an
    Anonymous Block. (Or because he has a BIM Tag ?)
    Also only readable as "Block Reference".
    But anonymous enough to not appear in the Drawing Explorer Block List,
    or refusing BEDITing.

  • I think for the Chairs in a Stadium,

    you should insert your Chair from Components only once,
    and finally Propagate it along a Grid - in propagate as Block option ?

  • Roy Klein Gebbinck
    edited February 2019

    First of all: I forgot to mention two important aspects of anonymous blocks:
    5.
    Unreferenced anonymous block definitions are automatically purged when a drawing is opened.
    6.
    Name conflicts are automatically resolved. If you insert a drawing that contains a reference of block '*U1' in a drawing that already contains a block definition with that name, the block in the drawing that is inserted will be renamed automatically.

    For BricsCAD components there are 3 possibilities:

    1. The component is based on an external definition, it is an Xref.
    2. The component is based on a definition in the dwg but still linked to an external file.
    3. The component is based on a definition in the dwg and not linked to a file.

    Which option is used for a specific component depends on the component definition, the command used to insert the component, and if parameters have been modified. I believe that, unlike the _BmInsert command, the _BimInsert command will never use the first option. In the first two cases the component instance will update if the external file is changed. In the case of the second and third option the same internal definition will be used for the same component. So 5000 chairs should not lead to 5000 different anonymous definitions.

    A static block is neither a component nor a dynamic block.

    You say: 'Components come in as non instanced, anonymous Blocks.'
    This is simply not possible: block references always have a definition.

  • That is quite complex.
    Thanks for bringing in some light.
    Although this may likely scratch my abstraction limit border hard already.

    You say: 'Components come in as non instanced, anonymous Blocks.'

    This is simply not possible: block references always have a definition.

    It came from an FBX export test where I threw in a few Components.
    FBX can keep instanced Copies of Blocks - instanced.
    But all Chairs exported as real geometry, which made me think that
    FBX Instance Feature would have been broken again already.

    FBX Instances still work and I was told about my Chairs wouldn't
    even be instanced in Bricscad itself as being Anonymous Blocks.
    Which I can reproduce by BEDIT's rejection and that I miss them
    in the Block list.
    Opposed to "People", which I see in the Block List and can BEDIT.
    Although I don't understand their double appearance in the Block list.

  • Anonymous blocks also have a definition, the fact that these definitions are not listed (I would definitely avoid the word 'instanced' here) in the _ExpBlocks command does not mean they do not exist. There is no technical reason to handle them differently when exporting to FBX. The only problem is perhaps that a translation of their names is required. But that seems solvable. So the answer you have received from support baffles me.

  • I think that whole system is unneeded complex and therefore ugly.
    I see no deeper plan oder idea behind it. For me it looks like there
    was just arbitrarily added a feature here and there over the years.

    It is time that it gets at least unique names that you can distinguish
    the different types. It doesn't help if I have 5 different objects with their
    different behaviors in my file and all are just labeled "Block Reference"
    It has to be clear what is Child vs Parent, referenced or individual.

    Like a "Block Instance", "Parent Block", ....
    But maybe that would again break Autocad Compatibility.

    I think even the term "Block" is inapropriate.
    A Block is something homogenous. Which an ACAD Block clearly is not.
    It is kind of a container that includes some individual things.
    Microstation's "Cell" makes some sense. Even a Vectorworks "Symbol",
    as it can nearly have any meaning.

    If I keep it as simple as possible and therefor most beautiful, predictable
    easy to use, when I start CAD from the beginning with incresing complexity
    I see it like this :

    • Point
    • Line
    • Rectangle or Polygons
      Now I can manipulate 4 Lines together

    • Group Simple
      Now I can combine individual elements to manipulate them together.
      Groups are independent, saved in the Drawing, copying them will copy
      the whole group "Folder"

    • Cell, Symbol, Block, ...
      Simple Group evolved.
      It is saved "beside" the drawing in a Library part of the drawing.
      It is saved one time.
      When you insert a Block, you don't insert the "Group of Objects"
      but an insertion point only, with its Location, Rotation and Scale.
      Same when duplicating, you create "Instances" or childs.
      So an Instance is always an exact Replica of the Block definition.
      Without any exception.
      That is simply and beautiful.

    Therefore it doesn't make sense to pack any parametric objects into
    Symbol. Like Walls that get their height from external Story Height Levels.
    They can't see or react to anything outside the Block, they are just Replicas.

    So there is no, handy in some cases, ugly Rule Exception like
    Autodesk's feature, use Layer 0 for the Block content, so it will take
    the Attributes of the Layer you will insert the Block and such things.
    Or things like Dynamic Block is just another Level of complexity and
    a completely different thing, which deserves its own Name.

    I don't understand how Autodesk is thinking, when they even missed the
    first step of the "Simple Group". Just a Selection Set, instead of a
    proper Container.

  • Roy Klein Gebbinck
    edited February 2019

    You will have to accept that blocks are the default container in dwg-CAD.

    A block reference is always a child of its block definition. And a block definition most certainly is 'homogeneous'. 'So an instance is always an exact replica of the block definition': Yes! that exactly describes the block mechanism in dwg-CAD. But the/an application can decide that a block definition is a parametric variant of a different block definition.

    Reading through you posts I sometimes get the idea that you actually hate BricsCAD. And I am quite surprised you have not yet used your favorite word 'tedious' here. ;)

  • @Roy Klein Gebbinck said:

    Reading through you posts I sometimes get the idea that you actually hate BricsCAD.

    Not at all.
    I am pretty much very enthusiastic about Bricscad AND Bricsys.
    BIM by Solids, global Material System, Structure Tree or Compositions with
    flexible Width Components are all fundamental things I wished for since
    years, when running into other BIM's limitations and thinking about how
    things should be. A pleasant GUI is another reason.
    And since v19 refinements, Direct Modeling and AI Automation make so
    much sense and are such a pleasure to use now.
    Everything gets smoother and I am very excited see where it is going in
    the future. So I love everything what Bricsys is doing in Bricscad.

    I just hate everything about Autocad.
    Everetime I'm forced to look at a detail of it I'm just shaking my head.
    There was never anything that I would do the same way or not have
    seen better solved anywhere else.
    As it limits all basics functions you need all day long, like Tool Flows,
    Selections, Layer switching, Predicatability, Speed and ease of use.

    I personaly wished they started by cloning ANY other Software and
    I would rigorously would kick everything Autocad directly out without
    caring about Autocad Compatibility as soon as possible.
    Good for the rest of the world that this doesn't matter.
    But what is shown with Direct Modeling, BIM and AI over DWG, I'm pretty
    confident that Bricsys finds much better ways on top over Autocadness,
    that it gets less and less disturbing - while keeping Autocad/User Compatibility.

    As an Example, If one day Bricscad's AI will predict and do Selections for me,
    I wouldn't get annoyed about that Selections still being Autocadescly lost after
    a command anymore

  • Note that where I have used the word 'component' in this discussion I have been talking about 'component instances'. There are also component definitions.

    I can understand how these anonymous blocks can lead to confusion. And BricsCAD can perhaps do a better job of hiding this complexity from the user. It may already help if block references that are component instances are identified as such in the Properties Bar and the Structure Panel: 'Block Reference (Component Instance)'.

  • It may already help if block references that are component instances are identified as such in the Properties Bar and the Structure Panel: 'Block Reference

    Yes, that would help a lot