diff options
author | Ken Hughes <khughes@pacific.edu> | 2005-10-03 22:23:04 +0400 |
---|---|---|
committer | Ken Hughes <khughes@pacific.edu> | 2005-10-03 22:23:04 +0400 |
commit | fde63008a590ec32c26b384975012719b5cae7c5 (patch) | |
tree | 90b3f5bb54b61f82fb209ef08bddea1731cc0936 /source | |
parent | 3eb1f04509eee7234d119166373dc4342c21abfa (diff) |
Documentation for new Python thinmesh module
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/python/api2_2x/doc/Mesh.py | 403 |
1 files changed, 403 insertions, 0 deletions
diff --git a/source/blender/python/api2_2x/doc/Mesh.py b/source/blender/python/api2_2x/doc/Mesh.py new file mode 100644 index 00000000000..8fe9c7fa444 --- /dev/null +++ b/source/blender/python/api2_2x/doc/Mesh.py @@ -0,0 +1,403 @@ +# Blender.Mesh module and the Mesh PyType object + +""" +The Blender.Mesh submodule. + +Mesh Data +========= + +This module provides access to B{Mesh Data} objects in Blender. It differs +from the NMesh module by allowing direct access to the actual Blender data, +so that changes are done immediately without need to update or put the data +back into the original mesh. The result is faster operations with less memory +usage. + +Example:: + + import Blender + from Blender import Mesh, Material, Window + + editmode = Window.EditMode() # are we in edit mode? If so ... + if editmode: Window.EditMode(0) # leave edit mode before getting the mesh + + me = Mesh.Get("Plane") # get the mesh data called "Plane" + + if not me.materials: # if there are no materials ... + newmat = Material.New() # create one ... + me.materials=[newmat] # and set the mesh's list of mats + + print me.materials # print the list of materials + mat = me.materials[0] # grab the first material in the list + mat.R = 1.0 # redefine its red component + for v in me.verts: # loop the list of vertices + v.co[0] *= 2.5 # multiply the coordinates + v.co[1] *= 5.0 + v.co[2] *= 2.5 + + if editmode: Window.EditMode(1) # optional, just being nice +""" + +def Get(name=None): + """ + Get the mesh data object called I{name} from Blender. + @type name: string + @param name: The name of the mesh data object. + @rtype: Mesh + @return: If a name is given, it returns either the requested mesh or None. + If no parameter is given, it returns all the meshs in the current scene. + """ + +class MCol: + """ + The MCol object + =============== + This object is four ints representing an RGBA color. + @ivar r: The Red component in [0, 255]. + @type r: int + @ivar g: The Green component in [0, 255]. + @type g: int + @ivar b: The Blue component in [0, 255]. + @type b: int + @ivar a: The Alpha (transparency) component in [0, 255]. + @type a: int + """ + +class MVert: + """ + The MVert object + ================ + This object holds mesh vertex data. + @ivar co: The vertex coordinates (x, y, z). + @type co: vector + @ivar no: The vertex's unit normal vector (x, y, z). Read-only. B{Note}: + if vertex coordinates are changed, it may be necessary to use + L{Mesh.calcNormals()} to update the vertex normals. + @type no: vector + @ivar uvco: The vertex texture "sticky" coordinates (x, y), if present. + Use L{Mesh.vertexUV} to test for presence before trying to access; + otherwise an exception will may be thrown. + (Sticky coordinates can be set when the object is in the Edit mode; + from the Editing Panel (F9), look under the "Mesh" properties for the + "Sticky" button). + @type uvco: vector + @ivar index: The vertex's index within the mesh. Read-only. + @type index: int + @ivar sel: The vertex's selection state (selected=1). + B{Note}: a Mesh will return the selection state of the mesh when EditMode + was last exited. A Python script operating in EditMode must exit EditMode + before getting the current selection state of the mesh. + @type sel: int + @warn: There are two kinds of UV texture coordinates in Blender: per vertex + ("sticky") and per face vertex (UV in L{MFace}). In the first, there's + only one UV pair of coordinates for each vertex in the mesh. In the + second, for each face it belongs to, a vertex can have different UV + coordinates. This makes the per face option more flexible, since two + adjacent faces won't have to be mapped to a continuous region in an image: + each face can be independently mapped to any part of its texture. + """ + +class MVertSeq: + """ + The MVertSeq object + =================== + This object provides sequence and iterator access to the mesh's vertices. + """ + + def extend(coords): + """ + Append one or more vertices to the mesh. Unlike L{MEdgeSeq.extend()} and + L{MFaceSeq.extend()} no attempt is made to check for duplicate vertices in + the parameter list, or for vertices already in the mesh. + + Example:: + import Blender + from Blender import Mesh + from Blender.Mathutils import Vector + + me = Mesh.Get("Plane") # get the mesh data called "Plane" + me.verts.extend(1,1,1) # add one vertex + l=[(.1,.1,.1),Vector([2,2,.5])] + me.verts.extend(l) # add multiple vertices + + @type coords: tuple(s) of floats or vectors + @param coords: coords can be + - a tuple of three floats, + - a 3D vector, or + - a sequence (list or tuple) of either of the above. + """ + +class MEdge: + """ + The MEdge object + ================ + This object holds mesh edge data. + @ivar v1: The first vertex of the edge. + @type v1: MVert + @ivar v2: The second vertex of the edge. + @type v2: MVert + @ivar crease: The crease value of the edge. It is in the range [0,255]. + @type crease: int + @ivar flag: The bitfield describing edge properties. See L{NMesh.EdgeFlags}. + @type flag: int + @ivar index: The edge's index within the mesh. Read-only. + @type index: int + """ + + def __iter__(): + """ + Iterator for MEdge. It iterates over the MVerts of the edge, returning + v1 then v2. + @return: one of the edge's vertices + @rtype: MVert + """ + +class MEdgeSeq: + """ + The MEdgeSeq object + =================== + This object provides sequence and iterator access to the mesh's edges. + """ + + def extend(vertseq): + """ + Add one or more edges to the mesh. Edges which already exist in the + mesh are ignored. If three or four verts are specified in any tuple, + an edge is also created between the first and last vertices (this is + useful when adding faces). + + Example:: + import Blender + from Blender import Mesh + + me = Mesh.Get("Plane") # get the mesh data called "Plane" + v = me.verts # get vertices + if len(v) >= 6: # if there are enough vertices... + me.edges.extend(v[0],v[1]) # add a single edge + l=[(v[1],v[2],v[3]),(v[0],v[2],v[4],v[5])] + me.edges.extend(l) # add multiple edges + + @type vertseq: tuple(s) of MVerts + @param vertseq: either two to four MVerts, or sequence (list or tuple) + of tuples each containing two to four MVerts. + """ + +class MFace: + """ + The MFace object + ================ + This object holds mesh face data. + + Example:: + import Blender + from Blender import Mesh, Window + + in_emode = Window.EditMode() + if in_emode: Window.EditMode(0) + + me = Mesh.Get("Mesh") + faces = me.faces + + ## Example for editmode faces selection: + selected_faces = [] + for f in faces: + if f.sel: + selected_faces.append(f) + # ... unselect selected and select all the others: + for f in faces: + f.sel = 1 - f.sel # 1 becomes 0, 0 becomes 1 + + ## Example for UV textured faces selection: + selected_faces = [] + SEL = NMesh.FaceFlags['SELECT'] + # get selected faces: + for f in faces: + if f.flag & SEL: + selected_faces.append(f) + # ... unselect selected and select all the others: + for f in faces: + if f.flag & SEL: + f.flag &= ~SEL # unselect these + else: + f.flag |= SEL # and select these + + if in_emode: Window.EditMode(1) + Blender.Redraw() + + @ivar verts: The face's vertices. Each face has 3 or 4 vertices. + @type verts: list of MVerts + @ivar v: Same as L{verts}. This attribute is only for compatibility with + NMesh scripts and will probably be deprecated in the future. + @ivar sel: The face's B{edit mode} selection state (selected=1). + This is not the same as the selection state of + the textured faces (see L{flag}). + @type sel: int + @ivar hide: The face's B{edit mode} visibility state (hidden=1). + This is not the same as the visibility state of + the textured faces (see L{flag}). + @type hide: int + @ivar smooth: If set, the vertex normals are averaged to make this + face look smooth. (This is the same as choosing "Set Smooth" in the + Editing Panel (F9) under "Link and Material" properties). + @type smooth: int + @ivar col: The face's vertex colors, if defined. Each vertex has its own + color. + Will throw an exception if the mesh does not have UV faces or vertex + colors; use L{Mesh.faceUV} and L{Mesh.vertexColors} to test. B{Note}: + if a mesh has i{both} UV faces and vertex colors, the colors stored in + the UV faces will be used here. + @type col: list of MCols + @ivar mat: The face's index into the mesh's materials + list. It is in the range [0,15]. + @type mat: int + @ivar image: The Image used as a texture for this face. + Will throw an exception if the mesh does not have UV faces; use + L{Mesh.faceUV} to test. + @type image: Image + @ivar mode: The texture mode bitfield (see L{NMesh.FaceModes}). + Will throw an exception if the mesh does not have UV faces; use + L{Mesh.faceUV} to test. + @type mode: int + @ivar index: The face's index within the mesh. Read-only. + @type index: int + + @ivar flag: The face's B{texture mode} flags; indicates the selection, + active , and visibility states of a textured face (see + L{NMesh.FaceFlags} for values). + This is not the same as the selection or visibility states of + the faces in edit mode (see L{sel} and L{hide}). + To set the active face, use + the L{Mesh.activeFace} attribute instead. + Will throw an exception if the mesh does not have UV faces; use + L{Mesh.faceUV} to test. + + @ivar transp: Transparency mode. It is one of the values in + L{NMesh.FaceTranspModes}). + Will throw an exception if the mesh does not have UV faces; use + L{Mesh.faceUV} to test. + @type transp: int + + @ivar uv: The face's UV coordinates. Each vertex has its own UV coordinate. + Will throw an exception if the mesh does not have UV faces; use + L{Mesh.faceUV} to test. + @type uv: list of vectors + @ivar no: The face's normal vector (x, y, z). Read-only. + @type no: vector + @note: there are regular faces and textured faces in Blender, both currently + with their own selection and visibility states, due to a mix of old and new + code. To (un)select or (un)hide regular faces (visible in EditMode), use + L{MFace.sel} and L{MFace.hide} attributes. For textured faces (UV Face + Select and Paint modes in Blender) use the L{MFace.flag} attribute. + Check the example above and note L{Window.EditMode}. + @note: Assigning UV textures to mesh faces in Blender works like this: + 1. Select your mesh. + 2. Enter face select mode (press f) and select at least some face(s). + 3. In the UV/Image Editor window, load / select an image. + 4. Play in both windows (better split the screen to see both at the same + time) until the UV coordinates are where you want them. Hint: in the + 3D window, the 'u' key opens a menu of default UV choices and the 'r' + key lets you rotate the UV coords. + 5. Leave face select mode (press f). + """ + + def __iter__(): + """ + Iterator for MVert. It iterates over the MVerts of the face, returning + v1, v2, v3 (and optionally v4); + @return: one of the face's vertices + @rtype: MVert + """ + +class MFaceSeq: + """ + The MFaceSeq object + =================== + This object provides sequence and iterator access to the mesh's faces. + """ + + def extend(vertseq): + """ + Add one or more faces to the mesh. Faces which already exist in the + mesh are ignored. Tuples of two vertices are accepted, but no face + will be created. + + Example:: + import Blender + from Blender import Mesh + + me = Mesh.Get("Plane") # get the mesh data called "Plane" + v = me.verts # get vertices + if len(v) >= 6: # if there are enough vertices... + me.face.extend(v[1],v[2],v[3]) # add a single edge + l=[(v[0],v[1]),(v[0],v[2],v[4],v[5])] + me.face.extend(l) # add another face + + @type vertseq: tuple(s) of MVerts + @param vertseq: either two to four MVerts, or sequence (list or tuple) + of tuples each containing two to four MVerts. + """ + + +class Mesh: + """ + The Mesh Data object + ==================== + This object gives access to mesh data in Blender. + @note: the verts, edges and faces attributes are implemented as sequences. + The operator[] and len() are defined for these sequences. You cannot + assign to an item in the sequence, but you can assign to most of the + attributes of individual items. + @ivar edges: The mesh's edges. + @type edges: sequence of MEdges + @ivar faces: The mesh's faces. + @type faces: sequence of MFaces + @ivar verts: The mesh's vertices. + @type verts: sequence of MVerts + + @ivar materials: The mesh's materials. Each mesh can reference up to + 16 materials. Empty slots in the mesh's list are represented by B{None}. + @type materials: list of Materials + @ivar degr: The max angle for auto smoothing in [1,80]. + @type degr: int + @ivar maxSmoothAngle: Same as L{degr}. This attribute is only for + compatibility with NMesh scripts and will probably be deprecated in + the future. + @ivar mode: The mesh's mode bitfield. See L{NMesh.Modes}. + @type mode: int + + @ivar name: The Mesh name. It's common to use this field to store extra + data about the mesh (to be exported to another program, for example). + @type name: str + @ivar subDivLevels: The [display, rendering] subdivision levels in [1, 6]. + @type subDivLevels: list of 2 ints + @ivar users: The number of Objects using (linked to) this mesh. + @type users: int + + @ivar faceUV: The mesh contains UV-mapped textured faces. Read-only. + @type faceUV: bool + @ivar vertexColors: The mesh contains vertex colors. Read-only. + @type vertexColors: bool + @ivar vertexUV: The mesh contains "sticky" per-vertex UV coordinates. Read-only. + @type vertexUV: bool + @ivar activeFace: Index of the mesh's active face in UV Face Select and + Paint modes. Only one face can be active at a time. Note that this is + independent of the selected faces in Face Select and Edit modes. + Will throw an exception if the mesh does not have UV faces; use + L{faceUV} to test. + @type activeFace: int + """ + + def calcNormals(): + """ + Recalculates the vertex normals using face data. + """ + + def vertexShade(object): + """ + Colors vertices based on the current lighting setup, like when there + are no vertex colors and no textured faces and a user enters Vertex Paint + Mode in Blender (only lamps in visible layers account). An exception is + thrown if called while in EditMode. + @type object: Object + @param object: The Blender Object linked to the mesh. + """ + |