Block Manager -> ERROR No geometry found

Hi,

i thought this was solved but this is still happening to v6 and v7 I constantly get those entries in the block manager:

I reported this long time ago here.

@pascal @stevebaer I don’t know who notify about it. Can you mark the appropriate person to this?

Hello - please post a file that has some of these, or send to tech@mcneel.com, with a link back here in your comments. I see, on the linked topic’s private comments, that the developer tried to reproduce this and could not.

-Pascal

Recording from V7 (V6 behaves identical)

Files (when file is opened again those error gain numbers and behaves like empty InstanceDefinitions)


That horribly bloats the file as each deleted block leaves this mess

V6 File block_bug_v6.3dm (75.4 KB)
V7 File block_bug_v7.3dm (59.1 KB)

Hello - does this happen if you disable Octane and VRay in Options > Plug-ins page, then close and re-open Rhino?

-Pascal

Yup. Turned them off relaunched rhino and block_bug_v7_no_engines.3dm (48.8 KB)

I’ll try in safe mode also in a sec.
Safe is ok - actually thats caused by my plugin :sweat_smile: But this never happens in v5 only in v6 and v7

@pascal i spotted the issue this starts happening after calling this method Rhino.RhinoDoc.ActiveDoc.InstanceDefinitions.Compact(true);

I guess this now should be moved to the developer category as this is programming related issue.
@dale do you see any particular thing why Compact() triggers such issue? This one is called in
Rhino.Commands.Command.EndCommand with if (e.CommandEnglishName == "BlockManager") some code and then idefTable.Compact(true) - and as i said v5 doesn’t suffer cause of this only v6 and v7

Ok. So far i checked that it doesn’t matter when i call Compact(true) it always create the same problem it can be anywhere it causes alwyas the same highly undesired side effect.

Below is enough to start this happening.

from scriptcontext import doc
 
if __name__ == "__main__":
    doc.InstanceDefinitions.Compact(True)
1 Like

@dale i also found out that Rhino.RhinoDoc.ActiveDoc.InstanceDefinitions.Purge(idefIndex); suffers from the same side effect.

In particular in such order:

iDefTable.Delete(i, false, true);
iDefTable.Purge(i);

Hi @D-W,

Can you provide a model and source code, that I can run here, that repeat the issue you are seeing?

Thanks,

– Dale

Hi @dale,

Sure. Here you are. Open this file(v7) bm_bug_recreate.3dm (272.5 KB) then run this code bm_recreate_code.py (115 Bytes) and open BlockManager and you should see this:

Exactly same procedure open 3dm run this code bm_recreate_code_2.py (111 Bytes) and open BlockManager and you should see the same as above.

As a sidenote its weird that when i delete idef from idefTable i need to purge it - otherwise next time when i will want to create idef which have the same one as deleted one i will get notice that such block alread exists.

I was able to track this down and fix it. The problem is with the call to ‘doc.InstanceDefinitions.Compact’ which was deleting instance definition geometry but accidentally clearing the definitions’ IsDeleted flag. The BlockManager was reporting exactly what was happening, there was an instance definition in the table with no geometry.

The following code works around the issue.

from scriptcontext import doc

doc.InstanceDefinitions.Delete(0,True,False)
doc.InstanceDefinitions.Compact(True)
doc.InstanceDefinitions.Delete(0,True,False)
doc.Views.Redraw()

This issue was reported as RH-64200 and there is a fix pending for Rhino 7.6.

1 Like