this should fix the script, it will select all the polygons that are wrong

si = Application
epsilon = 0.00001

# Get PolygonArea DataArray (which is a tuple)
sel = si.Selection(0)
attr = sel.ActivePrimitive.GetICEAttributeFromName( "PolygonArea" )
areaData = attr.DataArray

#
# Find the indices of the bad polys
#
bad = [ x for x,y in enumerate( areaData ) if y < epsilon]

# Select the degenerates with a string like 'cube.poly[112,114,155]'
str_indices = '%s.poly[%s]' % (sel.FullName, ','.join(str(i) for i in bad))
si.SelectGeometryComponents(str_indices)

On Tue, Mar 24, 2015 at 10:38 AM, Oscar Juarez <tridi.animei...@gmail.com>
wrote:

> As the blog post says, degenerate polygons most of the time are zero area
> polys, a filter points with a very small distance have solved this kind of
> issues for me on the past, but since your geometry is deformed you have to
> check if it doesn't break your plotted shape or if it doesn't break other
> things.
>
> On Tue, Mar 24, 2015 at 9:44 AM, Morten Bartholdy <x...@colorshopvfx.dk>
> wrote:
>
>>   I have a scene which crashes more or less randomly and Arnold prints
>> an error that there are degenerate polygons in the scene. The geometry
>> consist of 3600 simple cubes which are imported from an alembic file
>> generated in Cinema4D, so manually examining every object is not really an
>> option. So my question is how to fix the degenerate polygons? I found this
>> script:
>> http://xsisupport.com/2013/03/13/finding-degenerate-polygons-by-area/ ,
>> but it fails with an error:
>>
>>
>>    This is what I ran:
>>
>>
>>   si = Application
>> epsilon = 0.00001
>>
>> # Get PolygonArea DataArray (which is a tuple)
>> attr = si.Selection(0).ActivePrimitive.GetICEAttributeFromName(
>> "PolygonArea" )
>> areaData = attr.DataArray
>>
>> #
>> # Find the indices of the bad polys
>> #
>> bad = [ x for x,y in enumerate( areaData ) if y < epsilon]
>>
>> # Select the degenerates with a string like 'cube.poly[112,114,155]'
>> si.SelectGeometryComponents( 'Null2.Cube_[%s]' % ','.join(str(i) for i in
>> bad) )
>>
>>
>>
>>
>>
>>    - and the error:
>>
>>
>>   Application.SelectMembers("abc_Tiles", "", "")
>> # ERROR : 2000 - Argument 0 (SelectionList) is invalid
>> # ERROR : 2001-SELE-SelectGeometryComponents - Argument 0 is invalid
>> Application.SelectGeometryComponents("Null2.Cube_[]")
>> # ERROR : Traceback (most recent call last):
>> # File "<Script Block >", line 14, in <module>
>> # si.SelectGeometryComponents( 'Null2.Cube_[%s]' % ','.join(str(i) for i
>> in bad) )
>> # File "<COMObject Application>", line 2, in SelectGeometryComponents
>> # COM Error: The parameter is incorrect. (0x-7ff8ffa9) - [line 14]
>>
>>
>>
>>
>>
>> Line 14 is this one:  si.SelectGeometryComponents( 'Null2.Cube_[%s]' %
>> ','.join(str(i) for i in bad) )
>>
>>
>>
>> So what might be wrong with this one, and when I know which polygons are
>> bad, how can I fix them? I am thinking since they dont have an ICE tree
>> they might have no ICE PolygonArea property...
>>
>>
>>
>>
>>
>> Best
>>
>> Morten
>>
>>
>>
>>
>>
>

Reply via email to