diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-12-22 00:08:35 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-12-22 00:13:48 +0400 |
commit | d5263c37faf73d0f6cc2466ac0806fef972119fb (patch) | |
tree | 9d5c86e3cd3a39301a6d40586324bda0155241dc /source/blender/modifiers/intern/MOD_wireframe.c | |
parent | 01acc2a7dcb3ba3bd99f75aac77c14619b10c539 (diff) |
Modifier: New Wireframe Modifier
Based on patch originally by Thomas Beck,
uses options similar to solidify.
Diffstat (limited to 'source/blender/modifiers/intern/MOD_wireframe.c')
-rw-r--r-- | source/blender/modifiers/intern/MOD_wireframe.c | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/source/blender/modifiers/intern/MOD_wireframe.c b/source/blender/modifiers/intern/MOD_wireframe.c new file mode 100644 index 00000000000..371c8d62590 --- /dev/null +++ b/source/blender/modifiers/intern/MOD_wireframe.c @@ -0,0 +1,140 @@ +/* +* ***** BEGIN GPL LICENSE BLOCK ***** +* +* This program is free software; you can redistribute it and/or +* modify it under the terms of the GNU General Public License +* as published by the Free Software Foundation; either version 2 +* of the License, or (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program; if not, write to the Free Software Foundation, +* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +* +* ***** END GPL LICENSE BLOCK ***** +* +*/ + +/** \file blender/modifiers/intern/MOD_wireframe.c +* \ingroup modifiers +*/ + +#include "MEM_guardedalloc.h" + +#include "DNA_object_types.h" +#include "DNA_meshdata_types.h" + +#include "BLI_math.h" +#include "BLI_utildefines.h" +#include "BLI_string.h" + +#include "BKE_cdderivedmesh.h" +#include "BKE_deform.h" + +#include "MOD_modifiertypes.h" +#include "MOD_util.h" + +#include "bmesh.h" +#include "tools/bmesh_wireframe.h" + +static void initData(ModifierData *md) +{ + WireframeModifierData *wmd = (WireframeModifierData *)md; + wmd->offset = 0.02f; + wmd->flag = MOD_WIREFRAME_REPLACE | MOD_MESHCACHE_OFS_EVEN; + wmd->crease_weight = 1.0f; +} + +static void copyData(ModifierData *md, ModifierData *target) +{ +#if 0 + WireframeModifierData *wmd = (WireframeModifierData *)md; + WireframeModifierData *twmd = (WireframeModifierData *)target; +#endif + modifier_copyData_generic(md, target); +} + +static bool isDisabled(ModifierData *UNUSED(md), int UNUSED(useRenderParams)) +{ + return 0; +} + +static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md) +{ + WireframeModifierData *wmd = (WireframeModifierData *)md; + CustomDataMask dataMask = 0; + + /* ask for vertexgroups if we need them */ + if (wmd->defgrp_name[0]) dataMask |= CD_MASK_MDEFORMVERT; + + return dataMask; + +} + +static DerivedMesh* WireframeModifier_do( WireframeModifierData *wmd, Object *ob, DerivedMesh *dm) +{ + DerivedMesh *result; + BMesh *bm; + + const int defgrp_index = defgroup_name_index(ob, wmd->defgrp_name);; + + bm = DM_to_bmesh(dm, true); + + BM_mesh_wireframe( + bm, + wmd->offset, wmd->offset_fac, wmd->offset_fac_vg, + (wmd->flag & MOD_WIREFRAME_REPLACE) != 0, + (wmd->flag & MOD_WIREFRAME_BOUNDARY) != 0, + (wmd->flag & MOD_MESHCACHE_OFS_EVEN) != 0, + (wmd->flag & MOD_MESHCACHE_OFS_RELATIVE) != 0, + (wmd->flag & MOD_MESHCACHE_CREASE) != 0, + wmd->crease_weight, + defgrp_index, + (wmd->flag & MOD_WIREFRAME_INVERT_VGROUP) != 0, + wmd->mat_ofs, + MAX2(ob->totcol - 1, 0), + false); + + result = CDDM_from_bmesh(bm, true); + BM_mesh_free(bm); + + return result; + +} + +static DerivedMesh *applyModifier(ModifierData *md, Object *ob, DerivedMesh *dm, ModifierApplyFlag UNUSED(flag)) +{ + return WireframeModifier_do((WireframeModifierData *)md, ob, dm); +} + + +ModifierTypeInfo modifierType_Wireframe = { + /* name */ "Wireframe", + /* structName */ "WireframeModifierData", + /* structSize */ sizeof(WireframeModifierData), + /* type */ eModifierTypeType_Constructive, + /* flags */ eModifierTypeFlag_AcceptsMesh | + eModifierTypeFlag_SupportsEditmode, + + /* copyData */ copyData, + /* deformVerts */ NULL, + /* deformMatrices */ NULL, + /* deformVertsEM */ NULL, + /* deformMatricesEM */ NULL, + /* applyModifier */ applyModifier, + /* applyModifierEM */ NULL, + /* initData */ initData, + /* requiredDataMask */ requiredDataMask, + /* freeData */ NULL, + /* isDisabled */ isDisabled, + /* updateDepgraph */ NULL, + /* dependsOnTime */ NULL, + /* dependsOnNormals */ NULL, + /* foreachObjectLink */ NULL, + /* foreachIDLink */ NULL, + /* foreachTexLink */ NULL, +}; |