packing 2400 rectanges is about 38x faster. Use the C implimentation in uvcalc_lightmap and uvcalc_smart_project Blender.c - filename returning None raises errors with existing scripts, just return "" so string functions on the filename dont raise an error.
61 lines
2.2 KiB
Python
61 lines
2.2 KiB
Python
# Blender.Geometry module and its subtypes
|
|
|
|
"""
|
|
The Blender.Geometry submodule.
|
|
|
|
Geometry
|
|
========
|
|
|
|
This new module provides access to a geometry function.
|
|
"""
|
|
|
|
def PolyFill(polylines):
|
|
"""
|
|
Takes a list of polylines and calculates triangles that would fill in the polylines.
|
|
Multiple lines can be used to make holes inside a polyline, or fill in 2 seperate lines at once.
|
|
@type polylines: List of lists containing vectors, each representing a closed polyline.
|
|
@rtype: list
|
|
@return: a list if tuples each a tuple of 3 ints representing a triangle indexing the points given.
|
|
@note: 2D Vectors will have an assumed Z axis of zero, 4D Vectors W axis is ignored.
|
|
@note: The order of points in a polyline effect the direction returned triangles face, reverse the order of a polyline to flip the normal of returned faces.
|
|
|
|
I{B{Example:}}
|
|
|
|
The example below creates 2 polylines and fills them in with faces, then makes a mesh in the current scene::
|
|
import Blender
|
|
Vector= Blender.Mathutils.Vector
|
|
|
|
# Outline of 5 points
|
|
polyline1= [Vector(-2.0, 1.0, 1.0), Vector(-1.0, 2.0, 1.0), Vector(1.0, 2.0, 1.0), Vector(1.0, -1.0, 1.0), Vector(-1.0, -1.0, 1.0)]
|
|
polyline2= [Vector(-1, 1, 1.0), Vector(0, 1, 1.0), Vector(0, 0, 1.0), Vector(-1.0, 0.0, 1.0)]
|
|
fill= Blender.Geometry.PolyFill([polyline1, polyline2])
|
|
|
|
# Make a new mesh and add the truangles into it
|
|
me= Blender.Mesh.New()
|
|
me.verts.extend(polyline1)
|
|
me.verts.extend(polyline2)
|
|
me.faces.extend(fill) # Add the faces, they reference the verts in polyline 1 and 2
|
|
|
|
scn = Blender.Scene.GetCurrent()
|
|
ob = scn.objects.new(me)
|
|
Blender.Redraw()
|
|
"""
|
|
|
|
def LineIntersect2D(vec1, vec2, vec3, vec4):
|
|
"""
|
|
Takes 2 lines vec1, vec2 for the 2 points of the first line and vec2, vec3 for the 2 points of the second line.
|
|
@rtype: Vector
|
|
@return: a 2D Vector for the intersection or None where there is no intersection.
|
|
"""
|
|
|
|
def BoxPack2D(boxlist):
|
|
"""
|
|
Takes a list of 2D boxes and packs them into a square.
|
|
|
|
Each box in boxlist must be a list of at least 4 items - [x,y,w,h], after running this script,
|
|
the X and Y values in each box will be moved to packed, non overlapping locations.
|
|
|
|
@rtype: tuple
|
|
@return: a tuple pair - (width, height) of all the packed boxes.
|
|
"""
|
|
|