Bug: InstanceObject.UsesDefinition returns false positives

For any integer argument for definitionIndex of
https://developer.rhino3d.com/api/rhinocommon/rhino.docobjects.instanceobject/usesdefinition
the return value is True.

This method is used in rhinoscriptsyntax’s AddBlock. Currently, any blocks containing instances are prevented from being redefined.

One workaround is to ignore the return value and instead only use the value of nestingLevel.

Python 2 script
from __future__ import print_function

import Rhino

def main():
    
    res, objref = Rhino.Input.RhinoGet.GetOneObject(
        prompt="Select block instance",
        acceptNothing=False,
        filter=Rhino.DocObjects.ObjectType.InstanceReference)
    
    rdInst = objref.Object()
    sEval="rdInst"; print(sEval, '=', eval(sEval))
    rdDef = rdInst.InstanceDefinition
    sEval="rdDef"; print(sEval, '=', eval(sEval))
    sEval="rdDef.Index"; print(sEval, '=', eval(sEval))
    
    for definitionIndex in range(-1,3):
        print('-'*10)
        sEval = "definitionIndex"; print(sEval,'=',eval(sEval))
        sEval = "rdInst.UsesDefinition(definitionIndex)"; print(sEval,'=',eval(sEval))
    
    print('-'*10)
    
    for definitionIndex in range(-1,3):
        print('-'*10)
        sEval = "definitionIndex"; print(sEval,'=',eval(sEval))
        sEval = "rdDef.UsesDefinition(definitionIndex)"; print(sEval,'=',eval(sEval))

if __name__ == '__main__': main()

InstanceObject_UsesDefinition_Study.3dm (64.3 KB)

Script output
rdInst = InstanceObject: (unnamed) (0)
rdDef = InstanceDefinition: testBlock (0)
rdDef.Index = 0
----------
definitionIndex = -1
rdInst.UsesDefinition(definitionIndex) = (True, 0)
----------
definitionIndex = 0
rdInst.UsesDefinition(definitionIndex) = (True, 1)
----------
definitionIndex = 1
rdInst.UsesDefinition(definitionIndex) = (True, 0)
----------
definitionIndex = 2
rdInst.UsesDefinition(definitionIndex) = (True, 0)
----------
----------
definitionIndex = -1
rdDef.UsesDefinition(definitionIndex) = 0
----------
definitionIndex = 0
rdDef.UsesDefinition(definitionIndex) = 1
----------
definitionIndex = 1
rdDef.UsesDefinition(definitionIndex) = 0
----------
definitionIndex = 2
rdDef.UsesDefinition(definitionIndex) = 0

Tested on
7.38.24338.17001, 2024-12-03
8.23.25251.13001, 2025-09-08

Thanks @spb - I’ve logged the bug.

https://mcneel.myjetbrains.com/youtrack/issue/RH-90174

– Dale