[Bf-python] How to get inside faces from inside verts?

joe joeedh at gmail.com
Wed May 20 22:30:19 CEST 2009


Try triangulating the fractalized sphere.

So you want to find faces attached to verts, right?  The solution is
to iterate over every face in the mesh, and check if any of the face's
vertices are inside the set of inside vertices.

Once you've found the faces, copying them shouldn't be too bad, I'd
suggest looking at the API documentation on adding new faces.

Joe

On Wed, May 20, 2009 at 1:52 PM,  <lynx.abraxas at freenet.de> wrote:
> Hello!
>
>
> I  figured  out  pointInside()  just  doesn't  work  on my fractally distorted
> sphere. Belender seems to have trouble there getting the normaldirection right
> even when recalculating them. If I just use a icosphere pointInside works.
> My new problem is now:
> How can I copy the faces that belong to the insiede verts?
> Or how to get the inside faces directly?
>
> Thanks
> Lynx
>
>
> On 20/05/09 17:37:43, lynx.abraxas at freenet.de wrote:
>> Hello again!
>>
>>
>> I'd  like to find all vertices of a mesh-object that lie within another closed
>> mesh-object (ellipsoid)  to  calulate  an  average  normal  for  the  enclosed
>> surface.
>>
>> But  ellmesh.pointInside(v.co)  never  retruns  true  althogh  my  testobjects
>> definatly intersect.
>>
>> Is there something wrong with my code below or is pointInside() only  checking
>> if a point is inside a triangle (not in a closed mesh)?
>>
>> How do the boolean modifiers check this?
>>
>> Thanks for any help or hints
>> Lynx
>>
>>
>> print "Evaluating ellipsoids now..."
>> ells = [ob for ob in obs if ob.name.find('Ellipsoid') >= 0] #get ellipsoids
>> for ell in ells:
>>   ellmesh= ell.getData(mesh=1)
>>   print ell.name
>>   vin = bpy.data.meshes.new('Imesh_')          # create a new mesh
>>   for v in potmesh.verts: #find all potato vertices inside this ellipsoid
>>     #print v.co
>>     #print len(vin.verts)
>>
>>     if ellmesh.pointInside(v.co):
>>
>>         vin.verts.extend(v) #append? No extend is from MVertSeq
>>         print "extended vert-list by: ", v
>>         #what if ell is smaller than potato trig??? Subsurf would help!
>>     #print len(vin.verts)
>>   if len(vin.verts):
>>         print vin
>>         print vin.verts
>>         if len(vin.trigs) < MinTrigs:
>>             print "Very few normals inside: ", len(vin.trigs)
>>             print "Perhaps megabool would help here"
>>             print "Just subsurfing won't help!"
>>         for t in vin.trigs:
>>             #calcNormals()#recalcNormals(direction=0)
>>             #subdivide(beauty=0)
>>             #QuadNormal(vec1, vec2, vec3, vec4)
>>             #quadToTriangle(mode=0)#triangleToQuad()
>>             a= B.Mathutils.TriangleArea(vec1, vec2, vec3)
>>             n= B.Mathutils.TriangleNormal(vec1, vec2, vec3)
>>             n.normalize() #normalize the normal
>>             ns= ns + a*n  #add area weighted normal to normal sum
>>         print "Normal sum of ellipsoid: ", ell, ns
>>
>>
>> _______________________________________________
>> Bf-python mailing list
>> Bf-python at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-python
> _______________________________________________
> Bf-python mailing list
> Bf-python at blender.org
> http://lists.blender.org/mailman/listinfo/bf-python
>



More information about the Bf-python mailing list