PDA

View Full Version : InsertBlock bug?



marian
10-07-2010, 05:52 PM
Hi Steve,

I tried to use this code for block insertion:
from rhinoscript import block as rb
block_list = rb.BlockNames()
rb.InsertBlock(block_list[0], [0,0,0])


and I got this error:

Message: expected Vector3d, got Point3d

Traceback (most recent call last):
line 280, in InsertBlock, "C:\Documents and Settings\marin\Application Data\McNeel\Rhinoceros\5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\block.py"
line 3, in <module>, "C:\Documents and Settings\marin\Local Settings\Temp\TempScript.py"

so I changed the line 280:
move = Rhino.Geometry.Transform.Translation(insertion_poi nt)

to:
move = Rhino.Geometry.Transform.Translation(insertion_poi nt[0], insertion_point[1], insertion_point[2])


but then another error appeared:

Message: Find() takes exactly 2 arguments (1 given)

Traceback (most recent call last):
line 297, in InsertBlock2, "C:\Documents and Settings\marin\Application Data\McNeel\Rhinoceros\5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\block.py"
line 284, in InsertBlock, "C:\Documents and Settings\marin\Application Data\McNeel\Rhinoceros\5.0\Plug-ins\IronPython (814d908a-e25c-493d-97e9-ee3861957f49)\settings\lib\rhinoscript\block.py"
line 4, in <module>, "C:\Documents and Settings\marin\Local Settings\Temp\TempScript.py"

so I have added true as a second argument for scriptcontext.doc.InstanceDefinitions.Find() function in InsertBlock2

Now it is working so I would like to ask if these changes are globaly ok.

Thanks,
Marian

Steve Baer
10-08-2010, 03:19 PM
Hi Marian,
Yes these changes look correct. I've also updated the rhino source to match.
Thanks,
-Steve

Randolph
11-08-2010, 05:03 PM
I found the same problem with BlockInstances, so I went looking & found quite a few more of these. The following unified diff covers them, I think:


--- block-o.py 2010-11-08 09:26:32.380812900 -0800
+++ block.py 2010-11-08 10:03:43.997697000 -0800
@@ -70,7 +70,7 @@
None on error
"""
table = scriptcontext.doc.InstanceDefinitions
- idef = table.Find(block_name)
+ idef = table.Find(block_name,True)
if( idef==None ): return scriptcontext.errorhandler()
rc = idef.Description
if( description!=None ):
@@ -85,7 +85,7 @@
Parameters:
block_name = the name of an existing block definition
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None ): return 0
refs = idef.GetReferences()
if( refs==None): return 0
@@ -131,7 +131,7 @@
array of guids identifying the instances of a block if successful
None on error
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None ): return scriptcontext.errorhandler()
instances = idef.GetReferences(0)
if( instances==None ): return scriptcontext.errorhandler()
@@ -180,7 +180,7 @@
Parameters:
block_name = name of an existing block definition
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None ): return 0
return idef.ObjectCount

@@ -208,7 +208,7 @@
path to the linked block on success
None on error
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None ): return scriptcontext.errorhandler()
return idef.SourceArchive

@@ -315,7 +315,7 @@
Returns:
True or False
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
return (idef!=None)


@@ -327,7 +327,7 @@
Returns:
True or False
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None or idef.IsDeleted ): return False
if( idef.UpdateType == Rhino.DocObjects.InstanceDefinitionUpdateType.Embe dded \
or idef.UpdateType == Rhino.DocObjects.InstanceDefinitionUpdateType.Link edAndEmbedded ):
@@ -359,7 +359,7 @@
Returns:
True or False
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None or idef.IsDeleted ): return False
return idef.InUse(where_to_look)

@@ -372,7 +372,7 @@
Returns:
True or False
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None or idef.IsDeleted ): return False
return idef.IsReference

@@ -386,7 +386,7 @@
Returns:
True or False indicating success or failure
"""
- idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame)
+ idef = scriptcontext.doc.InstanceDefinitions.Find(block_n ame,True)
if( idef==None or idef.IsDeleted ): return False
description = idef.Description
rc = scriptcontext.doc.InstanceDefinitions.Modify(idef, new_name, description, False)

Steve Baer
11-08-2010, 08:10 PM
I just updated the source on googlecode to reflect these fixes. Thanks!
http://code.google.com/p/rhinopython/source/browse/trunk/scripts/rhinoscript/block.py

-Steve

Randolph
11-08-2010, 08:22 PM
Wow, that was fast!