diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-03-05 19:47:52 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2010-03-05 19:47:52 +0300 |
commit | d0c70ad1d581d69f650d604293c006b2e0023310 (patch) | |
tree | b0fdfd5063ed11dd875ca602f8bbf09f5c4cdb8f /source/blender/blenkernel/intern/cdderivedmesh.c | |
parent | bf4d8ffe3ab8a85a8e3071d54a1eaf84960ddae3 (diff) |
Constructive modifiers for curves and surfaces
Used approach with creating DerivedMesh for curves whet they've got such modifiers.
Available modifiers are: array, edge split, mirror, solidify, subsurf.
Diffstat (limited to 'source/blender/blenkernel/intern/cdderivedmesh.c')
-rw-r--r-- | source/blender/blenkernel/intern/cdderivedmesh.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/cdderivedmesh.c b/source/blender/blenkernel/intern/cdderivedmesh.c index a3924e6c1ed..d0e50dc97a8 100644 --- a/source/blender/blenkernel/intern/cdderivedmesh.c +++ b/source/blender/blenkernel/intern/cdderivedmesh.c @@ -1585,6 +1585,36 @@ DerivedMesh *CDDM_from_editmesh(EditMesh *em, Mesh *me) return dm; } +DerivedMesh *CDDM_from_curve(Object *ob) +{ + DerivedMesh *dm; + CDDerivedMesh *cddm; + MVert *allvert; + MEdge *alledge; + MFace *allface; + int totvert, totedge, totface; + + if (nurbs_to_mdata (ob, &allvert, &totvert, &alledge, &totedge, &allface, &totface) != 0) { + /* Error initializing mdata. This often happens when curve is empty */ + return CDDM_new(0, 0, 0); + } + + dm = CDDM_new(totvert, totedge, totface); + dm->deformedOnly = 1; + + cddm = (CDDerivedMesh*)dm; + + memcpy(cddm->mvert, allvert, totvert*sizeof(MVert)); + memcpy(cddm->medge, alledge, totedge*sizeof(MEdge)); + memcpy(cddm->mface, allface, totface*sizeof(MFace)); + + MEM_freeN(allvert); + MEM_freeN(alledge); + MEM_freeN(allface); + + return dm; +} + DerivedMesh *CDDM_copy(DerivedMesh *source) { CDDerivedMesh *cddm = cdDM_create("CDDM_copy cddm"); |