The script only selects the bad polygons, also the one on the blog, they don't do anything else, this will let you identify the polygons that are the problem, but then you have to decide what to do. If the issue comes from overlapping points maybe even a very small smooth might move them apart and avoid the zero area without changing topology.
On Tue, Mar 24, 2015 at 11:10 AM, Morten Bartholdy <x...@colorshopvfx.dk> wrote: > Thanks a lot Oscar - I will give both methods a shot and see what > happens. > > > Morten > > > > Den 24. marts 2015 kl. 10:45 skrev Oscar Juarez <tridi.animei...@gmail.com>: > > > 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 > > > > > > >