From 2065a57993698555171504476ca7c8e91fb40bc0 Mon Sep 17 00:00:00 2001 From: kaetemi Date: Fri, 7 Feb 2014 02:17:42 +0100 Subject: [PATCH] Remove duplicate tool --- code/nel/tools/3d/plugin_max/CMakeLists.txt | 1 - .../plugin_max/nel_patch_edit_adv/Bevel.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/CMakeLists.txt | 21 - .../plugin_max/nel_patch_edit_adv/CROSSHR.CUR | Bin 326 -> 0 bytes .../3d/plugin_max/nel_patch_edit_adv/NP.cpp | 857 ------- .../nel_patch_edit_adv/NP_EPM_AddPatches.cpp | 425 ---- .../nel_patch_edit_adv/NP_EPM_Attach.cpp | 276 --- .../nel_patch_edit_adv/NP_EPM_Bevel.cpp | 382 --- .../nel_patch_edit_adv/NP_EPM_Del.cpp | 541 ----- .../nel_patch_edit_adv/NP_EPM_Detach.cpp | 297 --- .../nel_patch_edit_adv/NP_EPM_Extrude.cpp | 341 --- .../nel_patch_edit_adv/NP_EPM_File.cpp | 326 --- .../nel_patch_edit_adv/NP_EPM_GUI.cpp | 161 -- .../nel_patch_edit_adv/NP_EPM_Hide.cpp | 464 ---- .../nel_patch_edit_adv/NP_EPM_Hook.cpp | 203 -- .../nel_patch_edit_adv/NP_EPM_Material.cpp | 1128 --------- .../nel_patch_edit_adv/NP_EPM_Remember.cpp | 321 --- .../nel_patch_edit_adv/NP_EPM_Selection.cpp | 1208 ---------- .../nel_patch_edit_adv/NP_EPM_Subdivide.cpp | 1470 ------------ .../nel_patch_edit_adv/NP_EPM_Surface.cpp | 789 ------- .../nel_patch_edit_adv/NP_EPM_Tess.cpp | 956 -------- .../nel_patch_edit_adv/NP_EPVertMapper.cpp | 301 --- .../nel_patch_edit_adv/NP_EditPatchData.cpp | 714 ------ .../nel_patch_edit_adv/NP_EditPatchMod.cpp | 1798 -------------- .../nel_patch_edit_adv/NP_GUI_Bind.cpp | 311 --- .../plugin_max/nel_patch_edit_adv/NP_Main.cpp | 341 --- .../nel_patch_edit_adv/NP_PatchPointTab.cpp | 197 -- .../nel_patch_edit_adv/NP_PatchRestore.cpp | 123 - .../nel_patch_edit_adv/NP_PatchSelRestore.cpp | 87 - .../NP_PatchVertexDelta.cpp | 138 -- .../nel_patch_edit_adv/NP_PickPatchAttach.cpp | 138 -- .../nel_patch_edit_adv/NP_Record.cpp | 895 ------- .../nel_patch_edit_adv/NP_Rollup.cpp | 816 ------- .../nel_patch_edit_adv/NP_editpops.cpp | 120 - .../plugin_max/nel_patch_edit_adv/NP_mods.cpp | 254 -- .../3d/plugin_max/nel_patch_edit_adv/Trim.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/addvertc.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/attach.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/bin00001.tga | Bin 16428 -> 0 bytes .../nel_patch_edit_adv/bmp00001.bmp | Bin 838 -> 0 bytes .../nel_patch_edit_adv/bmp00002.bmp | Bin 838 -> 0 bytes .../nel_patch_edit_adv/bmp00003.bmp | Bin 2998 -> 0 bytes .../nel_patch_edit_adv/booleant.bmp | Bin 838 -> 0 bytes .../nel_patch_edit_adv/boolinte.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/boolsubt.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/boolunio.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/bulbmask.bmp | Bin 478 -> 0 bytes .../plugin_max/nel_patch_edit_adv/bulbs.bmp | Bin 478 -> 0 bytes .../plugin_max/nel_patch_edit_adv/chamfer.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/crossins.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/cur00001.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/cur00002.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/cursor1.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/echamfer.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/editpat.h | 1506 ------------ .../nel_patch_edit_adv/extrudec.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/faceselt.bmp | Bin 478 -> 0 bytes .../plugin_max/nel_patch_edit_adv/fillet.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/icon1.ico | Bin 766 -> 0 bytes .../plugin_max/nel_patch_edit_adv/icon2.ico | Bin 766 -> 0 bytes .../plugin_max/nel_patch_edit_adv/icon3.ico | Bin 766 -> 0 bytes .../3d/plugin_max/nel_patch_edit_adv/keys.cfg | 172 -- .../plugin_max/nel_patch_edit_adv/large.cpp | 2068 ----------------- .../plugin_max/nel_patch_edit_adv/large.tga | Bin 16428 -> 0 bytes .../plugin_max/nel_patch_edit_adv/light.cpp | 148 -- .../plugin_max/nel_patch_edit_adv/light.tga | Bin 1068 -> 0 bytes .../plugin_max/nel_patch_edit_adv/magnify.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/mask_boo.bmp | Bin 838 -> 0 bytes .../nel_patch_edit_adv/mask_fac.bmp | Bin 182 -> 0 bytes .../nel_patch_edit_adv/mask_unw.bmp | Bin 3838 -> 0 bytes .../plugin_max/nel_patch_edit_adv/medium.cpp | 2068 ----------------- .../plugin_max/nel_patch_edit_adv/medium.tga | Bin 16428 -> 0 bytes .../3d/plugin_max/nel_patch_edit_adv/mods.def | 9 - .../3d/plugin_max/nel_patch_edit_adv/mods.h | 124 - .../3d/plugin_max/nel_patch_edit_adv/mods.rc | 1427 ------------ .../plugin_max/nel_patch_edit_adv/modsres.h | 1427 ------------ .../plugin_max/nel_patch_edit_adv/move_x.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/move_y.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/outline.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/panhand.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/patselm.bmp | Bin 2422 -> 0 bytes .../plugin_max/nel_patch_edit_adv/patselt.bmp | Bin 2424 -> 0 bytes .../nel_patch_edit_adv/pick_color.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/region.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/scale_x.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/scale_y.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/segbreak.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/segrefin.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/selmask.bmp | Bin 830 -> 0 bytes .../nel_patch_edit_adv/splinese.bmp | Bin 1846 -> 0 bytes .../plugin_max/nel_patch_edit_adv/splselm.bmp | Bin 542 -> 0 bytes .../plugin_max/nel_patch_edit_adv/stdafx.cpp | 1 - .../3d/plugin_max/nel_patch_edit_adv/stdafx.h | 13 - .../nel_patch_edit_adv/thselcur.cur | Bin 326 -> 0 bytes .../nel_patch_edit_adv/unwrap_option.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_option_mask.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_transform.bmp | Bin 7078 -> 0 bytes .../unwrap_transform_mask.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_verts.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_verts_mask.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_view.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrap_view_mask.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/unwrapto.bmp | Bin 4318 -> 0 bytes .../nel_patch_edit_adv/user_guide.txt | 72 - .../nel_patch_edit_adv/vchamfer.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/version.ver | 50 - .../nel_patch_edit_adv/vertconn.cur | Bin 326 -> 0 bytes .../plugin_max/nel_patch_edit_adv/vinsert.cur | Bin 326 -> 0 bytes .../3d/plugin_max/nel_patch_edit_adv/weld.cur | Bin 326 -> 0 bytes 109 files changed, 25485 deletions(-) delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Bevel.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/CMakeLists.txt delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/CROSSHR.CUR delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_AddPatches.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Attach.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Bevel.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Del.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Detach.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Extrude.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_File.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_GUI.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hide.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hook.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Material.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Remember.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Selection.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Subdivide.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Surface.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Tess.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPVertMapper.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchData.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchMod.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_GUI_Bind.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Main.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchPointTab.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchRestore.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchSelRestore.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchVertexDelta.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PickPatchAttach.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Record.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Rollup.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_editpops.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_mods.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Trim.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/addvertc.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/attach.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bin00001.tga delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00001.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00002.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00003.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/booleant.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolinte.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolsubt.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolunio.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bulbmask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bulbs.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/chamfer.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/crossins.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00001.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00002.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cursor1.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/echamfer.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/editpat.h delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/extrudec.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/faceselt.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/fillet.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/icon1.ico delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/icon2.ico delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/icon3.ico delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/keys.cfg delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/large.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/large.tga delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.tga delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/magnify.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mask_boo.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mask_fac.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mask_unw.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/medium.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/medium.tga delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.def delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.h delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.rc delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/modsres.h delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_x.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_y.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/outline.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/panhand.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselm.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselt.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/pick_color.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/region.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/scale_x.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/scale_y.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/segbreak.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/segrefin.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/selmask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/splinese.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/splselm.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.cpp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.h delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/thselcur.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_option.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_option_mask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_transform.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_transform_mask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_verts.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_verts_mask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view_mask.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrapto.bmp delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/user_guide.txt delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/vchamfer.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/version.ver delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/vertconn.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/vinsert.cur delete mode 100644 code/nel/tools/3d/plugin_max/nel_patch_edit_adv/weld.cur diff --git a/code/nel/tools/3d/plugin_max/CMakeLists.txt b/code/nel/tools/3d/plugin_max/CMakeLists.txt index 80fe711d7..04aee4a9e 100644 --- a/code/nel/tools/3d/plugin_max/CMakeLists.txt +++ b/code/nel/tools/3d/plugin_max/CMakeLists.txt @@ -4,7 +4,6 @@ ADD_SUBDIRECTORY(nel_patch_converter) ADD_SUBDIRECTORY(nel_3dsmax_shared) ADD_SUBDIRECTORY(nel_export) ADD_SUBDIRECTORY(nel_patch_edit) -ADD_SUBDIRECTORY(nel_patch_edit_adv) ADD_SUBDIRECTORY(nel_patch_paint) ADD_SUBDIRECTORY(nel_vertex_tree_paint) ADD_SUBDIRECTORY(tile_utility) diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Bevel.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Bevel.cur deleted file mode 100644 index 94ed805b1ae2b542f9636c30b8cd8987aefdd468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)$yA6Oa3b|=f5Sxgb@NPtQ-a#ush!3bj+>j q3$5vpa^UcJr#xx8{mt GX?y@SB6y(y diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP.cpp deleted file mode 100644 index 7b1c9c644..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP.cpp +++ /dev/null @@ -1,857 +0,0 @@ - -/********************************************************************** - *< - FILE: editpat.cpp - - DESCRIPTION: Edit Patch OSM - - CREATED BY: Tom Hudson, Dan Silva & Rolf Berteig - - HISTORY: created 23 June, 1995 - - IMPORTANT USAGE NOTE: - - When you do an operation in edit patch which will change the topology, the form - of the code should look like this code, taken from the vertex deletion: - - ----- - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - --> RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - PatchMesh *patch = patchData->TempData(this)->GetPatch(t); - if (!patch) - continue; - --> patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, "DoVertDelete")); - // Call the vertex delete function - DeleteSelVerts(patch); - --> patchData->UpdateChanges(patch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - --> ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_VERTDELETE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOVERTSSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - ----- - - The key elements in the "changed topology" case are the calls noted by arrows. - These record special tags inside the object so that after the topology is changed - by the modifier code, the UpdateChanges code can make a new mapping from the old - object topology to the new. - - If the operation doesn't change the topology, then the three topology tag calls - aren't needed and the UpdateChanges call becomes: - - patchData->UpdateChanges(patch, FALSE); - - This tells UpdateChanges not to bother remapping the topology. - - *> Copyright(c) 1994, All Rights Reserved. - **********************************************************************/ -#include "stdafx.h" -#include "editpat.h" -#include "../nel_patch_lib/vertex_neighborhood.h" - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx - -#define DBG_NAMEDSELSx - -// Uncomment this for vert mapper debugging -//#define VMAP_DEBUG 1 - -// Forward references -INT_PTR CALLBACK PatchSelectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchOpsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchObjSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchTileDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchEdgeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); - -void ResetVert (PatchMesh *patch); - -// A handy zero point -Point3 zeroPoint(0, 0, 0); - -// Our temporary prompts last 2 seconds: -#define PROMPT_TIME 2000 - -// in mods.cpp -extern HINSTANCE hInstance; - -// Select by material parameters -int sbmParams[4] = {1, 1, RPO_DEFAULT_TESSEL, RPO_DEFAULT_TESSEL}; - -// Select by smooth parameters -DWORD sbsParams[3] = {1, 1, 0}; - -float weldThreshold = 0.1f; - -// Checkbox items for rollup pages - -int attachReorient = 0; -// This is a special override value which allows us to hit-test on -// any sub-part of a patch - -extern int patchHitOverride; // If zero, no override is done - -void SetPatchHitOverride(int value) -{ - patchHitOverride = value; -} - -void ClearPatchHitOverride() -{ - patchHitOverride = 0; -} - - - - -PatchDeleteUser pDel; -extern PatchRightMenu pMenu; - -/*-------------------------------------------------------------------*/ - -static EditPatchClassDesc editPatchDesc; -extern ClassDesc* GetEditPatchModDesc() { return &editPatchDesc; } - -void EditPatchClassDesc::ResetClassParams(BOOL fileReset) -{ - sbmParams[0] = 1; - sbmParams[1] = 1; - sbmParams[2] = RPO_DEFAULT_TESSEL; - sbmParams[3] = RPO_DEFAULT_TESSEL; - EditPatchMod::condenseMat = FALSE; - EditPatchMod::attachMat = ATTACHMAT_IDTOMAT; -} - -/*-------------------------------------------------------------------*/ - -int EditPatchMod::Display(TimeValue t, INode* inode, ViewExp *vpt, int flags, ModContext *mc) -{ - return 0; -} - -void EditPatchMod::GetWorldBoundBox(TimeValue t, INode* inode, ViewExp *vpt, Box3& box, ModContext *mc) -{ - box.Init(); -} - -//--------------------------------------------------------------------- -// UI stuff - -void EditPatchMod::RecordTopologyTags() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patch->RecordTopologyTags(); - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); -} - -class ChangeNamedSetRestore : public RestoreObj -{ -public: - BitArray oldset, newset; - int index; - GenericNamedSelSetList *setList; - - ChangeNamedSetRestore(GenericNamedSelSetList *sl, int ix, BitArray *o) - { - setList = sl; - index = ix; - oldset = *o; - } - void Restore(int isUndo) - { - newset = *(setList->sets[index]); - *(setList->sets[index]) = oldset; - } - void Redo() - { - *(setList->sets[index]) = newset; - } - - TSTR Description() {return TSTR(_T("Change Named Sel Set"));} -}; - -// Selection set, misc fixup utility function -// This depends on PatchMesh::RecordTopologyTags being called prior to the topo changes -void EditPatchMod::ResolveTopoChanges() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - // First, the vertex selections - int set; - for (set = 0; set < patchData->vselSet.Count(); ++set) - { - BitArray *oldVS = &patchData->vselSet[set]; - BitArray newVS; - newVS.SetSize(patch->numVerts); - for (int vert = 0; vert < patch->numVerts; ++vert) - { - // Get the knot's previous location, then copy that selection into the new set - int tag = patch->verts[vert].aux1; - if (tag >= 0) - newVS.Set(vert, (*oldVS)[tag]); - else - newVS.Clear(vert); - } - if (theHold.Holding()) - theHold.Put(new ChangeNamedSetRestore(&patchData->vselSet, set, oldVS)); - patchData->vselSet[set] = newVS; - } - // Now the edge selections - for (set = 0; set < patchData->eselSet.Count(); ++set) - { - BitArray *oldES = &patchData->eselSet[set]; - BitArray newES; - newES.SetSize(patch->numEdges); - for (int edge = 0; edge < patch->numEdges; ++edge) - { - // Get the knot's previous location, then copy that selection into the new set - int tag = patch->edges[edge].aux1; - if (tag >= 0) - newES.Set(edge, (*oldES)[tag]); - else - newES.Clear(edge); - } - if (theHold.Holding()) - theHold.Put(new ChangeNamedSetRestore(&patchData->eselSet, set, oldES)); - patchData->eselSet[set] = newES; - } - // Now the patch selections - for (set = 0; set < patchData->pselSet.Count(); ++set) - { - BitArray *oldPS = &patchData->pselSet[set]; - BitArray newPS; - newPS.SetSize(patch->numPatches); - for (int p = 0; p < patch->numPatches; ++p) - { - // Get the knot's previous location, then copy that selection into the new set - int tag = patch->patches[p].aux1; - if (tag >= 0) - newPS.Set(p, (*oldPS)[tag]); - else - newPS.Clear(p); - } - if (theHold.Holding()) - theHold.Put(new ChangeNamedSetRestore(&patchData->pselSet, set, oldPS)); - patchData->pselSet[set] = newPS; - } - - // watje 4-16-99 - patch->HookFixTopology(); - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); -} - -class EPModContextEnumProc : public ModContextEnumProc -{ - float f; -public: - EPModContextEnumProc(float f) { this->f = f; } - BOOL proc(ModContext *mc); // Return FALSE to stop, TRUE to continue. -}; - -BOOL EPModContextEnumProc::proc(ModContext *mc) -{ - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (patchData) - patchData->RescaleWorldUnits(f); - return TRUE; -} - -// World scaling -void EditPatchMod::RescaleWorldUnits(float f) -{ - if (TestAFlag(A_WORK1)) - return; - SetAFlag(A_WORK1); - - // rescale all our references - for (int i = 0; i < NumRefs(); i++) - { - ReferenceMaker *srm = GetReference(i); - if (srm) - srm->RescaleWorldUnits(f); - } - - // Now rescale stuff inside our data structures - EPModContextEnumProc proc(f); - EnumModContexts(&proc); - NotifyDependents(FOREVER, PART_GEOM, REFMSG_CHANGE); -} - -void EditPatchMod::InvalidateSurfaceUI() -{ - if (hSurfPanel && selLevel == EP_PATCH) - { - InvalidateRect(hSurfPanel, NULL, FALSE); - patchUIValid = FALSE; - } -} - -void EditPatchMod::InvalidateTileUI() -{ - if (hTilePanel && selLevel == EP_TILE) - { - InvalidateRect(hTilePanel, NULL, FALSE); - tileUIValid = FALSE; - } -} - -void EditPatchMod::InvalidateEdgeUI() -{ - if (hEdgePanel && selLevel == EP_EDGE) - { - InvalidateRect(hEdgePanel, NULL, FALSE); - edgeUIValid = FALSE; - } -} - -BitArray *EditPatchMod::GetLevelSelectionSet(PatchMesh *patch, RPatchMesh *rpatch) -{ - switch (selLevel) - { - case EP_VERTEX: - return &patch->vertSel; - - case EP_PATCH: - return &patch->patchSel; - - case EP_EDGE: - return &patch->edgeSel; - - case EP_TILE: - return &rpatch->tileSel; - } - nlassert(0); - return NULL; -} - -void EditPatchMod::UpdateSelectDisplay() -{ - TSTR buf; - int num, j; - - if (!hSelectPanel) - return; - - ModContextList mcList; - INodeTab nodes; - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - - switch (GetSubobjectLevel()) - { - case EP_OBJECT: - buf.printf(GetString(IDS_TH_OBJECT_SEL)); - break; - - case EP_VERTEX: - { - num = 0; - PatchMesh *thePatch = NULL; - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) - { - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - int thisNum = patch->vertSel.NumberSet(); - if (thisNum) - { - num += thisNum; - thePatch = patch; - } - } - } - if (num == 1) - { - for (j = 0; j < thePatch->vertSel.GetSize(); j++) - if (thePatch->vertSel[j]) - break; - buf.printf(GetString(IDS_TH_NUMVERTSEL), j + 1); - } - else - buf.printf(GetString(IDS_TH_NUMVERTSELP), num); - } - break; - - case EP_PATCH: - { - num = 0; - PatchMesh *thePatch = NULL; - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) - { - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - int thisNum = patch->patchSel.NumberSet(); - if (thisNum) - { - num += thisNum; - thePatch = patch; - } - } - } - if (num == 1) - { - for (j = 0; j < thePatch->patchSel.GetSize(); j++) - if (thePatch->patchSel[j]) - break; - buf.printf(GetString(IDS_TH_NUMPATCHSEL), j + 1); - } - else - buf.printf(GetString(IDS_TH_NUMPATCHSELP), num); - } - break; - - case EP_EDGE: - { - num = 0; - PatchMesh *thePatch = NULL; - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) - { - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - int thisNum = patch->edgeSel.NumberSet(); - if (thisNum) - { - num += thisNum; - thePatch = patch; - } - } - } - if (num == 1) - { - for (j = 0; j < thePatch->edgeSel.GetSize(); j++) - if (thePatch->edgeSel[j]) - break; - buf.printf(GetString(IDS_TH_NUMEDGESEL), j + 1); - } - else - buf.printf(GetString(IDS_TH_NUMEDGESELP), num); - } - break; - - case EP_TILE: - { - num = 0; - RPatchMesh *thePatch = NULL; - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) - { - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - int thisNum = rpatch->tileSel.NumberSet(); - if (thisNum) - { - num += thisNum; - thePatch = rpatch; - } - } - } - if (num == 1) - { - for (j = 0; j < thePatch->tileSel.GetSize(); j++) - if (thePatch->tileSel[j]) - break; - buf.printf("Tile %d Selected", j + 1); - } - else - buf.printf("%d Tiles Selected", num); - } - break; - } - - nodes.DisposeTemporary(); - SetDlgItemText(hSelectPanel, IDC_NUMSEL_LABEL, buf); -} - -void EditPatchMod::DoVertWeld() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - BOOL hadSel = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet() > 1) - { - hadSel = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoVertWeld")); - // Call the patch weld function - if (patch->Weld(weldThreshold)) - { - rpatch->Weld (patch); - altered = holdNeeded = TRUE; - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_VERTWELD)); - } - else - { - if (!hadSel) - ip->DisplayTempPrompt(GetString(IDS_TH_NOVERTSSEL), PROMPT_TIME); - else - ip->DisplayTempPrompt(GetString(IDS_TH_NOWELDPERFORMED), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::DoVertReset () -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - BOOL hadSel = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet() > 0) - { - hadSel = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoVertReset")); - // Call the patch weld function - ResetVert (patch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_GEOM); - /*if (patch->Weld(weldThreshold)) - { - rpatch->Weld (patch); - altered = holdNeeded = TRUE; - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - }*/ - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - ResolveTopoChanges(); - theHold.Accept("Reset Vertex"); - /*if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_VERTWELD)); - } - else - { - if (!hadSel) - ip->DisplayTempPrompt(GetString(IDS_TH_NOVERTSSEL), PROMPT_TIME); - else - ip->DisplayTempPrompt(GetString(IDS_TH_NOWELDPERFORMED), PROMPT_TIME); - theHold.End(); - }*/ - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_GEOM, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::PatchSelChanged() -{ - SelectionChanged(); - if (hSurfPanel && selLevel == EP_PATCH) - InvalidateSurfaceUI(); - if (hTilePanel && selLevel == EP_TILE) - InvalidateTileUI(); - if (hEdgePanel && selLevel == EP_EDGE) - InvalidateEdgeUI(); -} - -/* -class AdvParams -{ -public: - TessSubdivStyle mStyle; - int mMin, mMax; - int mTris; -}; -*/ - - - - - -void EditPatchMod::LocalDataChanged() -{ -} - -int GetPointIndex (int nVertex, int nPatch, PatchMesh* patch) -{ - for (int n=0; n<4; n++) - { - if (patch->patches[nPatch].v[n]==nVertex) - return n; - } - nlassert (0); - return 0; -} - -Point3 GetInterior (int nPatch, int nInt, PatchMesh* patch) -{ - return patch->vecs[patch->patches[nPatch].interior[nInt]].p; -} - -void ResetVert (PatchMesh *patch) -{ - // Make a edge table - // Static table to avoid alloc prb - CVertexNeighborhood& edgeTab=vertexNeighborhoodGlobal; - edgeTab.build (*patch); - - // For each vertices - for (int nV=0; nVnumVerts; nV++) - { - // Selected ? - if (patch->vertSel[nV]) - { - Point3 vert=patch->verts[nV].p; - Point3 normal (0,0,0); - - // Count of neigbor for vertex n - uint listSize=edgeTab.getNeighborCount (nV); - - // List of neigbor - const uint* pList=edgeTab.getNeighborList (nV); - - // For each neigbor - uint nn; - for (nn=0; nnedges[pList[nn]].patch1!=-1) - normal+=patch->PatchNormal(patch->edges[pList[nn]].patch1); - if (patch->edges[pList[nn]].patch2!=-1) - normal+=patch->PatchNormal(patch->edges[pList[nn]].patch2); -#else // (MAX_RELEASE <= 4000) - // Compute average plane - if (patch->edges[pList[nn]].patches[0]!=-1) - normal+=patch->PatchNormal(patch->edges[pList[nn]].patches[0]); - if (patch->edges[pList[nn]].patches[1]!=-1) - normal+=patch->PatchNormal(patch->edges[pList[nn]].patches[1]); -#endif // (MAX_RELEASE <= 4000) - } - - // Normalize - normal=normal.Normalize(); - - // Plane - float fD=-DotProd(normal, vert); - - // Reset normales - float fNorme=0.f; - - // For each neigbor - for (nn=0; nnverts[(patch->edges[pList[nn]].v1==nV)?patch->edges[pList[nn]].v2:patch->edges[pList[nn]].v1].p; - vect2-=vert; - vect2/=3.f; - Point3 tmp1=CrossProd (vect2, normal); - tmp1=CrossProd (normal, tmp1); - tmp1=Normalize(tmp1); - int nTang=(patch->edges[pList[nn]].v1==nV)?patch->edges[pList[nn]].vec12:patch->edges[pList[nn]].vec21; - patch->vecs[nTang].p=vert+tmp1*DotProd (tmp1,vect2); - tmp1=patch->vecs[nTang].p; - tmp1-=vert; - fNorme+=tmp1.Length(); - } - - // Renorme new normal - /*fNorme/=(float)edgeTab[nV].size(); - ite=edgeTab[nV].begin(); - while (ite!=edgeTab[nV].end()) - { - int nTang=(patch->edges[pList[nn]].v1==nV)?patch->edges[pList[nn]].vec12:patch->edges[pList[nn]].vec21; - patch->vecs[nTang].p=fNorme*(Normalize(patch->vecs[nTang].p-vert))+vert; - - ite++; - }*/ - } - } - patch->computeInteriors(); - patch->InvalidateGeomCache (); -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_AddPatches.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_AddPatches.cpp deleted file mode 100644 index 9e37d9aba..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_AddPatches.cpp +++ /dev/null @@ -1,425 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern int attachReorient; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static void AddPatches(int type, PatchMesh *patch, RPatchMesh *rpatch, BOOL postWeld) -{ - if (!patch->edgeSel.NumberSet()) - return; // Nothing to do! - - int lastVert = patch->getNumVerts(); - int edges = patch->getNumEdges(); - - if (type==PATCH_TRI) - MessageBox (NULL, "Rykol tools", "C'est pas cool les tripatches...", MB_OK|MB_ICONEXCLAMATION); - - // Add a patch of the desired type to each selected edge that doesn't have two patches atatched! - for (int i = 0; i < edges; ++i) - { - if (patch->edgeSel[i]) - { - PatchEdge &edge = patch->edges[i]; -#if (MAX_RELEASE < 4000) - int nFirstPatch=edge.patch1; - if (edge.patch2 < 0) -#else // (MAX_RELEASE < 4000) - int nFirstPatch=edge.patches[0]; - if (edge.patches[1] < 0) -#endif // (MAX_RELEASE < 4000) - { - int verts = patch->getNumVerts(); - int vecs = patch->getNumVecs(); - int patches = patch->getNumPatches(); - patch->setNumPatches(patches + 1, TRUE); // Add a patch - patch->patches[patches].SetType(type); // Make it the type we want - patch->setNumVerts(verts + type - 2, TRUE); // Add the appropriate number of verts - rpatch->SetNumVerts(verts + type - 2); // And the appropriate vector count - patch->setNumVecs(vecs +(type - 1) * 2 + type, TRUE); // And the appropriate vector count - Point3 p1 = patch->verts[edge.v1].p; - Point3 p2 = patch->verts[edge.v2].p; - Point3 v12 = patch->vecs[edge.vec12].p; - Point3 v21 = patch->vecs[edge.vec21].p; - Point3 edgeCenter =(p1 + p2) / 2.0f; - // Load up the patch with the correct vert/vector indices -#if (MAX_RELEASE < 4000) - Patch &spatch = patch->patches[edge.patch1]; -#else // (MAX_RELEASE < 4000) - Patch &spatch = patch->patches[edge.patches[0]]; -#endif // (MAX_RELEASE < 4000) - Patch &dpatch = patch->patches[patches]; - switch (type) - { - case PATCH_TRI: - dpatch.setVerts(edge.v2, edge.v1, verts); - dpatch.setVecs(edge.vec21, edge.vec12, vecs, vecs + 1, vecs + 2, vecs + 3); - dpatch.setInteriors(vecs + 4, vecs + 5, vecs + 6); - switch (spatch.type) - { - case PATCH_TRI: - { // Tri from Tri - // Find the opposite vertex in the source triangle - int opposite, o2a, o1a; - if (spatch.edge[0] == i) - { - opposite = 2; - o1a = 5; - o2a = 2; - } - else - if (spatch.edge[1] == i) - { - opposite = 0; - o1a = 1; - o2a = 4; - } - else - { - opposite = 1; - o1a = 3; - o2a = 0; - } - // Compute the new vert position - Point3 oppVec = edgeCenter - patch->verts[spatch.v[opposite]].p; - float oppLen = Length(oppVec); - if (oppLen == 0.0f) - { - oppVec = Point3(0, 0, 1); - oppLen = 1.0f; - } - Point3 v1a = patch->vecs[spatch.vec[o1a]].p - p1; - Point3 v2a = patch->vecs[spatch.vec[o2a]].p - p2; - Point3 n1a, n2a; - if (Length(v1a) > 0.0f) - n1a = Normalize(v1a); - else - n1a = Normalize(oppVec); - if (Length(v2a) > 0.0f) - n2a = Normalize(v2a); - else - n2a = Normalize(oppVec); - - // Build a composite vector based on the two edge vectors - Point3 compVec = Normalize((n1a + n2a) / 2.0f); - - // Create the new vertex - Point3 newPos = edgeCenter - compVec * oppLen; - patch->verts[verts].p = newPos; - - // Compute the vectors - patch->vecs[vecs].p = p1 - v1a; - patch->vecs[vecs + 1].p = newPos -(newPos - p1) / 3.0f; - patch->vecs[vecs + 2].p = newPos -(newPos - p2) / 3.0f; - patch->vecs[vecs + 3].p = p2 - v2a; - } - break; - case PATCH_QUAD: - { // Tri from Quad - // Find the opposite edge verts in the source quad - int opposite1, opposite2, o1a, o2a; - if (spatch.edge[0] == i) - { - opposite1 = 2; - opposite2 = 3; - o1a = 7; - o2a = 2; - } - else - if (spatch.edge[1] == i) - { - opposite1 = 3; - opposite2 = 0; - o1a = 1; - o2a = 4; - } - else - if (spatch.edge[2] == i) - { - opposite1 = 0; - opposite2 = 1; - o1a = 3; - o2a = 6; - } - else - { - opposite1 = 1; - opposite2 = 2; - o1a = 5; - o2a = 0; - } - // Compute the new vert position - Point3 otherCenter =(patch->verts[spatch.v[opposite1]].p + patch->verts[spatch.v[opposite2]].p) / 2.0f; - Point3 oppVec = edgeCenter - otherCenter; - float oppLen = Length(oppVec); - if (oppLen == 0.0f) - { - oppVec = Point3(0, 0, 1); - oppLen = 1.0f; - } - Point3 v1a = patch->vecs[spatch.vec[o1a]].p - p1; - Point3 v2a = patch->vecs[spatch.vec[o2a]].p - p2; - Point3 n1a, n2a; - if (Length(v1a) > 0.0f) - n1a = Normalize(v1a); - else - n1a = Normalize(oppVec); - if (Length(v2a) > 0.0f) - n2a = Normalize(v2a); - else - n2a = Normalize(oppVec); - - // Build a composite vector based on the two edge vectors - Point3 compVec = Normalize((n1a + n2a) / 2.0f); - - // Create the new vertex - Point3 newPos = edgeCenter - compVec * oppLen; - patch->verts[verts].p = newPos; - - // Compute the vectors - patch->vecs[vecs].p = p1 - v1a; - patch->vecs[vecs + 1].p = newPos -(newPos - p1) / 3.0f; - patch->vecs[vecs + 2].p = newPos -(newPos - p2) / 3.0f; - patch->vecs[vecs + 3].p = p2 - v2a; - } - break; - } - break; - case PATCH_QUAD: - dpatch.setVerts(edge.v2, edge.v1, verts, verts + 1); - dpatch.setVecs(edge.vec21, edge.vec12, vecs, vecs + 1, vecs + 2, vecs + 3, vecs + 4, vecs + 5); - dpatch.setInteriors(vecs + 6, vecs + 7, vecs + 8, vecs + 9); - switch (spatch.type) - { - case PATCH_TRI: - { // Quad from Tri - // Find the opposite vertex in the source triangle - int opposite, o2a, o1a; - if (spatch.edge[0] == i) - { - opposite = 2; - o1a = 5; - o2a = 2; - } - else - if (spatch.edge[1] == i) - { - opposite = 0; - o1a = 1; - o2a = 4; - } - else - { - opposite = 1; - o1a = 3; - o2a = 0; - } - - Point3 oppVec = edgeCenter - patch->verts[spatch.v[opposite]].p; - float oppLen = Length(oppVec); - if (oppLen == 0.0f) - { - oppVec = Point3(0, 0, 1); - oppLen = 1.0f; - } - Point3 v1a = patch->vecs[spatch.vec[o1a]].p - p1; - Point3 v2a = patch->vecs[spatch.vec[o2a]].p - p2; - Point3 n1a, n2a; - if (Length(v1a) > 0.0f) - n1a = Normalize(v1a); - else - n1a = Normalize(oppVec); - if (Length(v2a) > 0.0f) - n2a = Normalize(v2a); - else - n2a = Normalize(oppVec); - - // Compute the new vert positions - Point3 newPos1 = p1 - n1a * oppLen; - Point3 newPos2 = p2 - n2a * oppLen; - patch->verts[verts].p = newPos1; - patch->verts[verts + 1].p = newPos2; - // Compute the vectors - patch->vecs[vecs].p = p1 - v1a; - patch->vecs[vecs + 1].p = newPos1 -(newPos1 - p1) / 3.0f; - patch->vecs[vecs + 2].p = newPos1 +(v12 - p1); - patch->vecs[vecs + 3].p = newPos2 +(v21 - p2); - patch->vecs[vecs + 4].p = newPos2 +(p2 - newPos2) / 3.0f; - patch->vecs[vecs + 5].p = p2 - v2a; - } - break; - case PATCH_QUAD: - { // Quad from Quad - // Find the opposite edge verts in the source quad - int opposite1, opposite2, o1a, o2a; - if (spatch.edge[0] == i) - { - opposite1 = 2; - opposite2 = 3; - o1a = 7; - o2a = 2; - } - else - if (spatch.edge[1] == i) - { - opposite1 = 3; - opposite2 = 0; - o1a = 1; - o2a = 4; - } - else - if (spatch.edge[2] == i) - { - opposite1 = 0; - opposite2 = 1; - o1a = 3; - o2a = 6; - } - else - { - opposite1 = 1; - opposite2 = 2; - o1a = 5; - o2a = 0; - } - - Point3 otherCenter =(patch->verts[spatch.v[opposite1]].p + patch->verts[spatch.v[opposite2]].p) / 2.0f; - Point3 oppVec = edgeCenter - otherCenter; - float oppLen = Length(oppVec); - if (oppLen == 0.0f) - { - oppVec = Point3(0, 0, 1); - oppLen = 1.0f; - } - Point3 v1a = patch->vecs[spatch.vec[o1a]].p - p1; - Point3 v2a = patch->vecs[spatch.vec[o2a]].p - p2; - Point3 n1a, n2a; - if (Length(v1a) > 0.0f) - n1a = Normalize(v1a); - else - n1a = Normalize(oppVec); - if (Length(v2a) > 0.0f) - n2a = Normalize(v2a); - else - n2a = Normalize(oppVec); - - // Compute the new vert position - Point3 newPos1 = p1 - n1a * oppLen; - Point3 newPos2 = p2 - n2a * oppLen; - patch->verts[verts].p = newPos1; - patch->verts[verts + 1].p = newPos2; - - // Compute the vectors - patch->vecs[vecs].p = p1 - v1a; - patch->vecs[vecs + 1].p = newPos1 -(newPos1 - p1) / 3.0f; - patch->vecs[vecs + 2].p = newPos1 +(v12 - p1); - patch->vecs[vecs + 3].p = newPos2 +(v21 - p2); - patch->vecs[vecs + 4].p = newPos2 +(p2 - newPos2) / 3.0f; - patch->vecs[vecs + 5].p = p2 - v2a; - } - break; - } - break; - } - rpatch->AddPatch (i, nFirstPatch, patch); - } - } - } - patch->computeInteriors(); - patch->buildLinkages(); - // This step welds all new identical verts - if (postWeld &&(patch->getNumVerts() != lastVert)) - patch->Weld(0.0f, TRUE, lastVert); -} - -// --------------------------------------------------------------------------- - -BOOL PatchAddRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - AddPatches(type, patch, rpatch, postWeld); - return TRUE; -} - -// --------------------------------------------------------------------------- - -void EditPatchMod::DoPatchAdd(int type) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->edgeSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoPatchAdd")); - // Call the patch add function - AddPatches(type, patch, rpatch, TRUE); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHADD)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOVALIDEDGESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Attach.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Attach.cpp deleted file mode 100644 index 7ea26ddb5..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Attach.cpp +++ /dev/null @@ -1,276 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern int attachReorient; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::DoAttach(INode *node, PatchMesh *attPatch, RPatchMesh *rattPatch, bool & canUndo) -{ - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return 0; - - ip->GetModContexts(mcList, nodes); - - if (mcList.Count() != 1) - { - nodes.DisposeTemporary(); - return 0; - } - - EditPatchData *patchData =(EditPatchData*)mcList[0]->localData; - if (!patchData) - { - nodes.DisposeTemporary(); - return 0; - } - patchData->BeginEdit(ip->GetTime()); - - // If the mesh isn't yet cached, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - { - nodes.DisposeTemporary(); - return 0; - } - patchData->RecordTopologyTags(patch); - RecordTopologyTags(); - - // Transform the shape for attachment: - // If reorienting, just translate to align pivots - // Otherwise, transform to match our transform - Matrix3 attMat(1); - if (attachReorient) - { - Matrix3 thisTM = nodes[0]->GetNodeTM(ip->GetTime()); - Matrix3 thisOTMBWSM = nodes[0]->GetObjTMBeforeWSM(ip->GetTime()); - Matrix3 thisPivTM = thisTM * Inverse(thisOTMBWSM); - Matrix3 otherTM = node->GetNodeTM(ip->GetTime()); - Matrix3 otherOTMBWSM = node->GetObjTMBeforeWSM(ip->GetTime()); - Matrix3 otherPivTM = otherTM * Inverse(otherOTMBWSM); - Point3 otherObjOffset = node->GetObjOffsetPos(); - attMat = Inverse(otherPivTM) * thisPivTM; - } - else - { - attMat = node->GetObjectTM(ip->GetTime()) * - Inverse(nodes[0]->GetObjectTM(ip->GetTime())); - } - - // RB 3-17-96 : Check for mirroring - AffineParts parts; - decomp_affine(attMat, &parts); - if (parts.f < 0.0f) - { - int v[8], ct, ct2, j; - Point3 p[9]; - - for (int i = 0; i < attPatch->numPatches; i++) - { - - // Re-order rpatch - if (attPatch->patches[i].type == PATCH_QUAD) - { - UI_PATCH rpatch=rattPatch->getUIPatch (i); - int ctU=rpatch.NbTilesU<<1; - int ctV=rpatch.NbTilesV<<1; - int nU; - for (nU=0; nUgetUIPatch (i).getTileDesc (nU+nV*ctU)=rpatch.getTileDesc (ctU-1-nU+(ctV-1-nV)*ctU); - } - } - for (nU=0; nUgetUIPatch (i).setColor (nU+nV*(ctU+1), rpatch.getColor (ctU-nU+(ctV-nV)*ctU)); - } - } - } - - // Re-order vertices - ct = attPatch->patches[i].type == PATCH_QUAD ? 4 : 3; - for (j = 0; j < ct; j++) - { - v[j] = attPatch->patches[i].v[j]; - } - for (j = 0; j < ct; j++) - { - attPatch->patches[i].v[j] = v[ct - j - 1]; - } - - // Re-order vecs - ct = attPatch->patches[i].type == PATCH_QUAD ? 8 : 6; - ct2 = attPatch->patches[i].type == PATCH_QUAD ? 5 : 3; - for (j = 0; j < ct; j++) - { - v[j] = attPatch->patches[i].vec[j]; - } - for (j = 0; j < ct; j++, ct2--) - { - if (ct2 < 0) - ct2 = ct - 1; - attPatch->patches[i].vec[j] = v[ct2]; - } - - // Re-order enteriors - if (attPatch->patches[i].type == PATCH_QUAD) - { - ct = 4; - for (j = 0; j < ct; j++) - { - v[j] = attPatch->patches[i].interior[j]; - } - for (j = 0; j < ct; j++) - { - attPatch->patches[i].interior[j] = v[ct - j - 1]; - } - } - - // Re-order aux - if (attPatch->patches[i].type == PATCH_TRI) - { - ct = 9; - for (j = 0; j < ct; j++) - { - p[j] = attPatch->patches[i].aux[j]; - } - for (j = 0; j < ct; j++) - { - attPatch->patches[i].aux[j] = p[ct - j - 1]; - } - } - - // Re-order TV faces if present - for (int chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (attPatch->tvPatches[chan]) - { - ct = 4; - for (j = 0; j < ct; j++) - { - v[j] = attPatch->tvPatches[chan][i].tv[j]; - } - for (j = 0; j < ct; j++) - { - attPatch->tvPatches[chan][i].tv[j] = v[ct - j - 1]; - } - } - } - } - } - - int i; - for (i = 0; i < attPatch->numVerts; ++i) - attPatch->verts[i].p = attPatch->verts[i].p * attMat; - for (i = 0; i < attPatch->numVecs; ++i) - attPatch->vecs[i].p = attPatch->vecs[i].p * attMat; - attPatch->computeInteriors(); - - theHold.Begin(); - - // Combine the materials of the two nodes. - int mat2Offset = 0; - Mtl *m1 = nodes[0]->GetMtl(); - Mtl *m2 = node->GetMtl(); - bool condenseMe = FALSE; - if (m1 && m2 &&(m1 != m2)) - { - if (attachMat == ATTACHMAT_IDTOMAT) - { - int ct = 1; - if (m1->IsMultiMtl()) - ct = m1->NumSubMtls(); - for (int i = 0; i < patch->numPatches; ++i) - { - int mtid = patch->getPatchMtlIndex(i); - if (mtid >= ct) - patch->setPatchMtlIndex(i, mtid % ct); - } - FitPatchIDsToMaterial(*attPatch, m2); - if (condenseMat) - condenseMe = TRUE; - } - // the theHold calls here were a vain attempt to make this all undoable. - // This should be revisited in the future so we don't have to use the SYSSET_CLEAR_UNDO. - theHold.Suspend(); - if (attachMat == ATTACHMAT_MATTOID) - { - m1 = FitMaterialToPatchIDs(*patch, m1); - m2 = FitMaterialToPatchIDs(*attPatch, m2); - } - - Mtl *multi = CombineMaterials(m1, m2, mat2Offset); - if (attachMat == ATTACHMAT_NEITHER) - mat2Offset = 0; - theHold.Resume(); - // We can't be in face subobject mode, else we screw up the materials: - DWORD oldSL = patch->selLevel; - DWORD roldSL = patch->selLevel; - patch->selLevel = PATCH_OBJECT; - rpatch->SetSelLevel (EP_OBJECT); - nodes[0]->SetMtl(multi); - patch->selLevel = oldSL; - rpatch->SetSelLevel (roldSL); - m1 = multi; - canUndo = FALSE; // Absolutely cannot undo material combinations. - } - if (!m1 && m2) - { - // We can't be in face subobject mode, else we screw up the materials: - DWORD oldSL = patch->selLevel; - DWORD roldSL = rpatch->GetSelLevel(); - patch->selLevel = PATCH_OBJECT; - rpatch->SetSelLevel (EP_OBJECT); - nodes[0]->SetMtl(m2); - patch->selLevel = oldSL; - rpatch->SetSelLevel (roldSL); - m1 = m2; - } - - // Start a restore object... - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoAttach")); - - // Do the attach - patch->Attach(attPatch, mat2Offset); - rpatch->Attach(rattPatch, *patch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO | PART_GEOM); - - // Get rid of the original node - ip->DeleteNode(node); - - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_ATTACH)); - - if (m1 && condenseMe) - { - // Following clears undo stack. - patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - m1 = CondenseMatAssignments(*patch, m1); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO | PART_GEOM, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - return 1; -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Bevel.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Bevel.cpp deleted file mode 100644 index 0021d62f1..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Bevel.cpp +++ /dev/null @@ -1,382 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EPM_BevelMouseProc::proc(HWND hwnd, int msg, int point, int flags, IPoint2 m) -{ - ViewExp *vpt = ip->GetViewport(hwnd); - Point3 p0, p1; - ISpinnerControl *spin; - int ln, ln2; - IPoint2 m2; - float amount; - - switch (msg) - { - case MOUSE_PROPCLICK: - ip->SetStdCommandMode(CID_OBJMOVE); - break; - - case MOUSE_POINT: - if (point == 0) - { - po->BeginExtrude(ip->GetTime()); - om = m; - } - else if (point == 1) - { - po->EndExtrude(ip->GetTime(), TRUE); - po->BeginBevel(ip->GetTime()); - om = m; - } - else - { - ip->RedrawViews(ip->GetTime(), REDRAW_END); - po->EndBevel(ip->GetTime(), TRUE); - } - break; - - case MOUSE_MOVE: - if (point == 1) - { - p0 = vpt->MapScreenToView(om, float(-200)); - // sca 1999.02.24: find worldspace point with om's x value and m's y value - m2.x = om.x; - m2.y = m.y; - p1 = vpt->MapScreenToView(m2, float(-200)); - amount = Length(p1 - p0); - ln = IsDlgButtonChecked(po->hOpsPanel, IDC_EM_EXTYPE_B); - if (om.y < m.y) - amount *= -1.0f; - po->Extrude(ip->GetTime(), amount, ln); - - spin = GetISpinner(GetDlgItem(po->hOpsPanel, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(amount, FALSE); - ReleaseISpinner(spin); - } - ip->RedrawViews(ip->GetTime(), REDRAW_INTERACTIVE); - } - else if (point == 2) - { - p0 = vpt->MapScreenToView(om, float(-200)); - // sca 1999.02.24: find worldspace point with om's x value and m's y value - m2.x = om.x; - m2.y = m.y; - p1 = vpt->MapScreenToView(m2, float(-200)); - if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH)) - ln = 0; - else if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH2)) - ln = 1; - else if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH3)) - ln = 2; - - if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH4)) - ln2 = 0; - else if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH5)) - ln2 = 1; - else if (IsDlgButtonChecked(po->hOpsPanel, IDC_EP_SM_SMOOTH6)) - ln2 = 2; - - amount = Length(p1 - p0); - if (om.y < m.y) - amount *= -1.0f; - po->Bevel(ip->GetTime(), amount, ln, ln2); - - spin = GetISpinner(GetDlgItem(po->hOpsPanel, IDC_EP_OUTLINESPINNER)); - if (spin) - { - spin->SetValue(amount, FALSE); - ReleaseISpinner(spin); - } - ip->RedrawViews(ip->GetTime(), REDRAW_INTERACTIVE); - } - break; - - case MOUSE_ABORT: - if (point == 1) - po->EndExtrude(ip->GetTime(), FALSE); - else if (point>1) - po->EndBevel(ip->GetTime(), FALSE); - - - ip->RedrawViews(ip->GetTime(), REDRAW_END); - break; - } - - if (vpt) - ip->ReleaseViewport(vpt); - return TRUE; -} - -// -------------------------------------------------------------------------------- - -HCURSOR EPM_BevelSelectionProcessor::GetTransformCursor() -{ - static HCURSOR hCur = NULL; - if (!hCur) - hCur = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_BEVEL)); - return hCur; -} - -// -------------------------------------------------------------------------------- - -void EPM_BevelCMode::EnterMode() -{ - if (!po->hOpsPanel) - return; - ICustButton *but = GetICustButton(GetDlgItem(po->hOpsPanel, IDC_EP_BEVEL)); - but->SetCheck(TRUE); - ReleaseICustButton(but); -} - -// -------------------------------------------------------------------------------- - -void EPM_BevelCMode::ExitMode() -{ - if (!po->hOpsPanel) - return; - ICustButton *but = GetICustButton(GetDlgItem(po->hOpsPanel, IDC_EP_BEVEL)); - but->SetCheck(FALSE); - ReleaseICustButton(but); - ISpinnerControl *spin; - spin = GetISpinner(GetDlgItem(po->hOpsPanel, IDC_EP_OUTLINESPINNER)); - if (spin) - { - spin->SetValue(0.0f, FALSE); - ReleaseISpinner(spin); - } - -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoBevel() -{ - - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - patch->CreateBevel(); -// patch->CreateExtrusion(); -// patch->InvalidateGeomCache(); -// InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - - /* - theHold.Begin(); - patch.RecordTopologyTags(); - POPatchGenRecord *rec = new POPatchGenRecord(this); - if (theHold.Holding()) - theHold.Put(new PatchObjectRestore(this, rec)); - - patch.CreateBevel(); - - ResolveTopoChanges(); - theHold.Accept(GetResString(IDS_TH_PATCHADD)); - - patch.InvalidateGeomCache(); - InvalidateMesh(); - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -*/ -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::BeginBevel(TimeValue t) -{ - if (inBevel) - return; - inBevel = TRUE; - theHold.SuperBegin(); - DoBevel(); -// PlugControllersSel(t,sel); - theHold.Begin(); -} - -void EditPatchMod::EndBevel(TimeValue t, BOOL accept) -{ - if (!ip) - return; - if (!inBevel) - return; - inBevel = FALSE; -// TempData()->freeBevelInfo(); - ISpinnerControl *spin; - - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_OUTLINESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } - - - theHold.Accept(GetString(IDS_EM_BEVEL)); - if (accept) - theHold.SuperAccept(GetString(IDS_EM_BEVEL)); - else theHold.SuperCancel(); - -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::Bevel(TimeValue t, float amount, BOOL smoothStart, BOOL smoothEnd) -{ - if (!inBevel) - return; - - - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - -// theHold.Begin(); - - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - patch->Bevel(amount, smoothStart, smoothEnd); -// patch->MoveNormal(amount,useLocalNorms); -// patch->InvalidateGeomCache(); -// InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -/* - theHold.Restore(); - patch.Bevel(amount, smoothStart, smoothEnd); - - patch.InvalidateGeomCache(); - InvalidateMesh(); - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -*/ -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Del.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Del.cpp deleted file mode 100644 index 3a5f23069..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Del.cpp +++ /dev/null @@ -1,541 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void DeletePatchParts(PatchMesh *patch, RPatchMesh *rpatch, BitArray &delVerts, BitArray &delPatches); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoDeleteSelected() -{ - switch (GetSubobjectLevel()) - { - case EP_VERTEX: - DoVertDelete(); - break; - case EP_EDGE: - DoEdgeDelete(); - break; - case EP_PATCH: - DoPatchDelete(); - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static void DeleteSelPatches(PatchMesh *patch, RPatchMesh *rpatch) -{ - if (!patch->patchSel.NumberSet()) - return; // Nothing to do! - - int patches = patch->getNumPatches(); - int verts = patch->getNumVerts(); - - // Tag the patches that are selected - BitArray delPatches(patches); - delPatches = patch->patchSel; - - BitArray delVerts(verts); - delVerts.ClearAll(); - - DeletePatchParts(patch, rpatch, delVerts, delPatches); - patch->computeInteriors(); -} - -// --------------------------------------------------------------------------- - -BOOL PatchDeleteRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - DeleteSelPatches(patch, rpatch); - return TRUE; -} - -// --------------------------------------------------------------------------- - -void EditPatchMod::DoPatchDelete() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoPatchDelete")); - // Call the patch delete function - DeleteSelPatches(patch, rpatch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHDELETE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void DeleteSelVerts(PatchMesh *patch, RPatchMesh *rpatch) -{ - if (!patch->vertSel.NumberSet()) - return; // Nothing to do! - - int patches = patch->getNumPatches(); - int verts = patch->getNumVerts(); - - // Tag the patches that use selected vertices - BitArray delPatches(patches); - delPatches.ClearAll(); - for (int i = 0; i < patches; ++i) - { - Patch& p = patch->patches[i]; - for (int j = 0; j < p.type; ++j) - { - if (patch->vertSel[p.v[j]]) - { - delPatches.Set(i); - goto next_patch; - } - } -next_patch:; - } - - BitArray delVerts(verts); - delVerts = patch->vertSel; - DeletePatchParts(patch, rpatch, delVerts, delPatches); - patch->computeInteriors(); -} - -// --------------------------------------------------------------------------- - -// Vertex Delete modifier method -void EditPatchMod::DoVertDelete() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoVertDelete")); - // Call the vertex delete function - DeleteSelVerts(patch, rpatch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_VERTDELETE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOVERTSSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// Edger Delete modifier method -void EditPatchMod::DoEdgeDelete() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->edgeSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoEdgeDelete")); - int edges = patch->getNumEdges(); - int patches = patch->getNumPatches(); - int verts = patch->getNumVerts(); - - // Tag the patches that are attached to selected edges - BitArray delPatches(patches); - delPatches.ClearAll(); - - for (int i = 0; i < edges; ++i) - { - if (patch->edgeSel[i]) - { -#if (MAX_RELEASE < 4000) - if (patch->edges[i].patch1 >= 0) - delPatches.Set(patch->edges[i].patch1); - if (patch->edges[i].patch2 >= 0) - delPatches.Set(patch->edges[i].patch2); -#else // (MAX_RELEASE < 4000) - if (patch->edges[i].patches[0] >= 0) - delPatches.Set(patch->edges[i].patches[0]); - if (patch->edges[i].patches[1] >= 0) - delPatches.Set(patch->edges[i].patches[1]); -#endif // (MAX_RELEASE < 4000) - } - } - - BitArray delVerts(verts); - delVerts.ClearAll(); - - DeletePatchParts(patch, rpatch, delVerts, delPatches); - patch->computeInteriors(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_EDGEDELETE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOEDGESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// Deletes any vertices tagged, also any patches tagged. Automatically deletes the vectors that -// are deleted as a result of the patch deletion and sweeps any vertices floating in space. - -void DeletePatchParts(PatchMesh *patch, RPatchMesh *rpatch, BitArray &delVerts, BitArray &delPatches) -{ - int patches = patch->getNumPatches(); - int verts = patch->getNumVerts(); - int vecs = patch->getNumVecs(); - int dest; - - // We treat vectors specially in order to clean up after welds. First, we tag 'em all, - // then untag only those on unselected patches so that any dangling vectors will be deleted. - BitArray delVectors(vecs); - delVectors.SetAll(); - - // Untag vectors that are on nondeleted patches - int i; - for (i = 0; i < patches; ++i) - { - if (!delPatches[i]) - { - Patch& p = patch->patches[i]; - int j; - for (j = 0; j <(p.type * 2); ++j) - { - delVectors.Clear(p.vec[j]); - } - for (j = 0; j < p.type; ++j) - delVectors.Clear(p.interior[j]); - } - } - - // Make a table of vertices that are still in use -- Used to - // delete those vertices which are floating, unused, in space. - BitArray usedVerts(verts); - usedVerts.ClearAll(); - for (i = 0; i < patches; ++i) - { - if (!delPatches[i]) - { - Patch& p = patch->patches[i]; - for (int j = 0; j < p.type; ++j) - { - usedVerts.Set(p.v[j]); - } - } - } - for (i = 0; i < verts; ++i) - { - if (!usedVerts[i]) - delVerts.Set(i); - } - - // If we have texture vertices, handle them, too - for (int chan = 0; chan < patch->getNumMaps(); ++chan) - { - int tverts = patch->numTVerts[chan]; - if (tverts && patch->tvPatches[chan]) - { - BitArray delTVerts(tverts); - delTVerts.SetAll(); - for (i = 0; i < patches; ++i) - { - if (!delPatches[i]) - { - Patch& p = patch->patches[i]; - TVPatch& tp = patch->tvPatches[chan][i]; - for (int j = 0; j < p.type; ++j) - delTVerts.Clear(tp.tv[j]); - } - } - // Got the list of tverts to delete -- now delete 'em - // Build a table of redirected texture vertex indices - int newTVerts = tverts - delTVerts.NumberSet(); - IntTab tVertIndex; - tVertIndex.SetCount(tverts); - UVVert *newTVertArray = new UVVert[newTVerts]; - dest = 0; - for (i = 0; i < tverts; ++i) - { - if (!delTVerts[i]) - { - newTVertArray[dest] = patch->tVerts[chan][i]; - tVertIndex[i] = dest++; - } - } - delete[] patch->tVerts[chan]; -#if MAX_RELEASE <= 3100 - patch->tVerts[chan] = newTVertArray; -#else - *(patch->tVerts[chan]) = *newTVertArray; -#endif - patch->numTVerts[chan] = newTVerts; - // Now, copy the untagged texture patches to a new array - // While you're at it, redirect the vertex indices - int newTVPatches = patches - delPatches.NumberSet(); - TVPatch *newArray = new TVPatch[newTVPatches]; - dest = 0; - for (i = 0; i < patches; ++i) - { - if (!delPatches[i]) - { - Patch& p = patch->patches[i]; - TVPatch& tp = newArray[dest++]; - tp = patch->tvPatches[chan][i]; - for (int j = 0; j < p.type; ++j) - tp.tv[j] = tVertIndex[tp.tv[j]]; - } - } - delete[] patch->tvPatches[chan]; - patch->tvPatches[chan] = newArray;; - } - } - - // Build a table of redirected vector indices - IntTab vecIndex; - vecIndex.SetCount(vecs); - int newVectors = vecs - delVectors.NumberSet(); - PatchVec *newVecArray = new PatchVec[newVectors]; - dest = 0; - for (i = 0; i < vecs; ++i) - { - if (!delVectors[i]) - { - newVecArray[dest] = patch->vecs[i]; - vecIndex[i] = dest++; - } - else - vecIndex[i] = -1; - } - delete[] patch->vecs; - patch->vecs = newVecArray; - patch->numVecs = newVectors; - - // Build a table of redirected vertex indices - int newVerts = verts - delVerts.NumberSet(); - IntTab vertIndex; - vertIndex.SetCount(verts); - PatchVert *newVertArray = new PatchVert[newVerts]; - BitArray newVertSel(newVerts); - newVertSel.ClearAll(); - dest = 0; - for (i = 0; i < verts; ++i) - { - if (!delVerts[i]) - { - newVertArray[dest] = patch->verts[i]; - newVertSel.Set(dest, patch->vertSel[i]); - // redirect & adjust attached vector list - PatchVert& v = newVertArray[dest]; - for (int j = 0; j < v.vectors.Count(); ++j) - { - v.vectors[j] = vecIndex[v.vectors[j]]; - if (v.vectors[j] < 0) - { - v.vectors.Delete(j, 1); - j--; // realign index - } - } - vertIndex[i] = dest++; - } - } - delete[] patch->verts; - patch->verts = newVertArray; - patch->numVerts = newVerts; - patch->vertSel = newVertSel; - - // Now, copy the untagged patches to a new array - // While you're at it, redirect the vertex and vector indices - int newPatches = patches - delPatches.NumberSet(); - Patch *newArray = new Patch[newPatches]; - BitArray newPatchSel(newPatches); - newPatchSel.ClearAll(); - dest = 0; - for (i = 0; i < patches; ++i) - { - if (!delPatches[i]) - { - newArray[dest] = patch->patches[i]; - Patch& p = newArray[dest]; - int j; - for (j = 0; j < p.type; ++j) - p.v[j] = vertIndex[p.v[j]]; - for (j = 0; j <(p.type * 2); ++j) - p.vec[j] = vecIndex[p.vec[j]]; - for (j = 0; j < p.type; ++j) - p.interior[j] = vecIndex[p.interior[j]]; - newPatchSel.Set(dest++, patch->patchSel[i]); - } - } - - // Rebuild info in rpatch - rpatch->DeleteAndSweep (delVerts, delPatches, *patch); - - delete[] patch->patches; - patch->patches = newArray;; - patch->numPatches = newPatches; - patch->patchSel.SetSize(newPatches, TRUE); - patch->patchSel = newPatchSel; - patch->buildLinkages(); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Detach.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Detach.cpp deleted file mode 100644 index eaf0c7369..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Detach.cpp +++ /dev/null @@ -1,297 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void DeletePatchParts(PatchMesh *patch, RPatchMesh *rpatch, BitArray &delVerts, BitArray &delPatches); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static TSTR detachName; - -static BOOL CALLBACK DetachDialogProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - TCHAR tempName[256]; - switch (message) - { - case WM_INITDIALOG: - SetDlgItemText(hDlg, IDC_DETACH_NAME, detachName); - SetFocus(GetDlgItem(hDlg, IDC_DETACH_NAME)); - return FALSE; - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - GetDlgItemText(hDlg, IDC_DETACH_NAME, tempName, 255); - detachName = TSTR(tempName); - EndDialog(hDlg, 1); - return TRUE; - case IDCANCEL: - EndDialog(hDlg, 0); - return TRUE; - } - } - return FALSE; -} - -// --------------------------------------------------------------------------- - -static int GetDetachOptions(IObjParam *ip, TSTR& newName) -{ - detachName = newName; - ip->MakeNameUnique(detachName); - if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DETACH), ip->GetMAXHWnd(), (DLGPROC)DetachDialogProc) == 1) - { - newName = detachName; - return 1; - } - return 0; -} - -// --------------------------------------------------------------------------- - -static void MakeDummyMapPatches(int channel, PatchMesh *patch) -{ - patch->setNumMapVerts(channel, 1); - patch->tVerts[channel][0] = UVVert(0, 0, 0); - patch->setNumMapPatches(channel, patch->numPatches); - for (int i = 0; i < patch->numPatches; ++i) - { - Patch &p = patch->patches[i]; - TVPatch &tp = patch->tvPatches[channel][i]; - tp.Init(); // Sets all indices to zero - } - } - -// --------------------------------------------------------------------------- - -// Detach all selected patches -void EditPatchMod::DoPatchDetach(int copy, int reorient) -{ - int dialoged = 0; - TSTR newName(GetString(IDS_TH_PATCH)); - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - - // Create a patch mesh object - RPO *patchOb = new RPO; - patchOb->rpatch = new RPatchMesh; - PatchMesh &pmesh = patchOb->patch; - RPatchMesh &prmesh = *patchOb->rpatch; - int verts = 0; - int vecs = 0; - int patches = 0; - - int multipleObjects =(mcList.Count() > 1) ? 1 : 0; - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any patches selected, we'll need to process this one - if (patch->patchSel.NumberSet()) - { - if (!dialoged) - { - dialoged = 1; - if (!GetDetachOptions(ip, newName)) - goto bail_out; - } - // Save the unmodified info. - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoPatchDetach")); - } - PatchMesh wpatch = *patch; - RPatchMesh wrpatch = *rpatch; - BitArray vdel(wpatch.numVerts); - vdel.ClearAll(); - BitArray pdel = wpatch.patchSel; // Get inverse selection set - // If not copying, delete the patches from this object - if (!copy) - DeletePatchParts(patch, rpatch, vdel, pdel); - pdel = ~wpatch.patchSel; // Get inverse selection set - if (pdel.NumberSet()) - { - vdel.ClearAll(); - DeletePatchParts(&wpatch, &wrpatch, vdel, pdel); - } - - // RPatchMesh validity - wrpatch.Validity (wpatch, true); - - // We've deleted everything that wasn't selected -- Now add this to the patch object accumulator - int oldVerts = pmesh.numVerts; - int oldVecs = pmesh.numVecs; - int oldPatches = pmesh.numPatches; - int newVerts = oldVerts + wpatch.numVerts; - int newVecs = oldVecs + wpatch.numVecs; - int newPatches = oldPatches + wpatch.numPatches; - pmesh.setNumVerts(newVerts, TRUE); - pmesh.setNumVecs(newVecs, TRUE); - pmesh.setNumPatches(newPatches, TRUE); - prmesh.SetNumVerts (newVerts); - prmesh.SetNumPatches (newPatches); - altered = holdNeeded = 1; - Matrix3 tm(1); - if (multipleObjects && !reorient) - tm = nodes[i]->GetObjectTM(t); - int i, i2; - for (i = 0, i2 = oldVerts; i < wpatch.numVerts; ++i, ++i2) - { - pmesh.verts[i2] = wpatch.verts[i]; - pmesh.verts[i2].p = pmesh.verts[i2].p * tm; - - // Copy rpatch info - prmesh.getUIVertex (i2)=wrpatch.getUIVertex (i); - } - for (i = 0, i2 = oldVecs; i < wpatch.numVecs; ++i, ++i2) - { - pmesh.vecs[i2] = wpatch.vecs[i]; - pmesh.vecs[i2].p = pmesh.vecs[i2].p * tm; - } - for (i = 0, i2 = oldPatches; i < wpatch.numPatches; ++i, ++i2) - { - Patch &p = wpatch.patches[i]; - Patch &p2 = pmesh.patches[i2]; - p2 = p; - int j; - for (j = 0; j < p2.type; ++j) - { - // Adjust vertices and interior vectors - p2.v[j] += oldVerts; - p2.interior[j] += oldVecs; - } - for (j = 0; j <(p2.type * 2); ++j) // Adjust edge vectors - p2.vec[j] += oldVecs; - - // Copy rpatch info - prmesh.getUIPatch (i2)=wrpatch.getUIPatch (i); - } - // Now copy over mapping information - int dmaps = pmesh.getNumMaps(); - int smaps = wpatch.getNumMaps(); - int maxMaps = dmaps > smaps ? dmaps : smaps; - if (maxMaps != dmaps) - pmesh.setNumMaps(maxMaps, TRUE); - if (maxMaps != smaps) - wpatch.setNumMaps(maxMaps, TRUE); - // Then make sure any active maps are active in both: - int chan; - for (chan = 0; chan < maxMaps; ++chan) - { - if (pmesh.tvPatches[chan] || wpatch.tvPatches[chan]) - { - if (!pmesh.tvPatches[chan]) - MakeDummyMapPatches(chan, &pmesh); - if (!wpatch.tvPatches[chan]) - MakeDummyMapPatches(chan, &wpatch); - } - } - for (chan = 0; chan < pmesh.getNumMaps(); ++chan) - { - if (chan < wpatch.getNumMaps()) - { - int oldTVerts = pmesh.numTVerts[chan]; - int newTVerts = oldTVerts + wpatch.numTVerts[chan]; - pmesh.setNumMapVerts(chan, newTVerts, TRUE); - for (i = 0, i2 = oldTVerts; i < wpatch.numTVerts[chan]; ++i, ++i2) - pmesh.tVerts[chan][i2] = wpatch.tVerts[chan][i]; - if (pmesh.tvPatches[chan]) - { - for (i = 0, i2 = oldPatches; i < wpatch.numPatches; ++i, ++i2) - { - Patch &p = wpatch.patches[i]; - TVPatch &tp = wpatch.tvPatches[chan][i]; - TVPatch &tp2 = pmesh.tvPatches[chan][i2]; - tp2 = tp; - for (int j = 0; j < p.type; ++j) // Adjust vertices - tp2.tv[j] += oldTVerts; - } - } - } - } - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - bail_out: - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - pmesh.computeInteriors(); - pmesh.buildLinkages(); - INode *newNode = ip->CreateObjectNode(patchOb); - newNode->SetMtl(nodes[0]->GetMtl()); - newNode->SetName(newName.data()); - patchOb->patch.InvalidateGeomCache(); - if (!multipleObjects) - { - // Single input object? - if (!reorient) - { - Matrix3 tm = nodes[0]->GetObjectTM(t); - newNode->SetNodeTM(t, tm); // Use this object's TM. - } - } - else - { - if (!reorient) - { - Matrix3 matrix; - matrix.IdentityMatrix(); - newNode->SetNodeTM(t, matrix); // Use identity TM - } - } - newNode->FlagForeground(t); // WORKAROUND! - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_DETACHPATCH)); - } - else - { - delete patchOb; // Didn't need it after all! - if (!dialoged) - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(t, REDRAW_NORMAL); - } diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Extrude.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Extrude.cpp deleted file mode 100644 index c4c502de9..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Extrude.cpp +++ /dev/null @@ -1,341 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EPM_ExtrudeMouseProc::proc(HWND hwnd, int msg, int point, int flags, IPoint2 m) -{ - ViewExp *vpt = ip->GetViewport(hwnd); - Point3 p0, p1; - ISpinnerControl *spin; - BOOL ln; - IPoint2 m2; - float amount; - switch (msg) - { - case MOUSE_PROPCLICK: - ip->SetStdCommandMode(CID_OBJMOVE); - break; - - case MOUSE_POINT: - if (!point) - { - po->BeginExtrude(ip->GetTime()); - om = m; - } else - { - ip->RedrawViews(ip->GetTime(), REDRAW_END); - po->EndExtrude(ip->GetTime(), TRUE); - - } - break; - - case MOUSE_MOVE: - p0 = vpt->MapScreenToView(om, float(-200)); - // sca 1999.02.24: Find m's projection in om's vertical axis: - m2.x = om.x; - m2.y = m.y; - p1 = vpt->MapScreenToView(m2, float(-200)); - amount = Length(p1 - p0); - if (m.y > om.y) - amount *= -1.0f; - - ln = IsDlgButtonChecked(po->hOpsPanel, IDC_EM_EXTYPE_B); - po->Extrude(ip->GetTime(), amount, ln); - - spin = GetISpinner(GetDlgItem(po->hOpsPanel, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(amount, FALSE); // sca - use signed value here too. - ReleaseISpinner(spin); - } - ip->RedrawViews(ip->GetTime(), REDRAW_INTERACTIVE); - break; - - case MOUSE_ABORT: - po->EndExtrude(ip->GetTime(), FALSE); - ip->RedrawViews(ip->GetTime(), REDRAW_END); - break; - } - - if (vpt) - ip->ReleaseViewport(vpt); - return TRUE; -} - -// -------------------------------------------------------------------------------- - -HCURSOR EPM_ExtrudeSelectionProcessor::GetTransformCursor() -{ - static HCURSOR hCur = NULL; - if (!hCur) - hCur = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_EXTRUDECUR)); - return hCur; -} - -// -------------------------------------------------------------------------------- - -void EPM_ExtrudeCMode::EnterMode() -{ - if (!po->hOpsPanel) - return; - ICustButton *but = GetICustButton(GetDlgItem(po->hOpsPanel, IDC_EP_EXTRUDE)); - but->SetCheck(TRUE); - ReleaseICustButton(but); -} - -// -------------------------------------------------------------------------------- - -void EPM_ExtrudeCMode::ExitMode() -{ - if (!po->hOpsPanel) - return; - ICustButton *but = GetICustButton(GetDlgItem(po->hOpsPanel, IDC_EP_EXTRUDE)); - but->SetCheck(FALSE); - ReleaseICustButton(but); - ISpinnerControl *spin; - spin = GetISpinner(GetDlgItem(po->hOpsPanel, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(0.0f, FALSE); - ReleaseISpinner(spin); - } - -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoExtrude() -{ - - - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - patch->CreateExtrusion(); - rpatch->CreateExtrusion(patch); -// patch->InvalidateGeomCache(); -// InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - -/* - theHold.Begin(); - patch.RecordTopologyTags(); - POPatchGenRecord *rec = new POPatchGenRecord(this); - if (theHold.Holding()) - theHold.Put(new PatchObjectRestore(this, rec)); - - patch.CreateExtrusion(); - - ResolveTopoChanges(); - theHold.Accept(GetResString(IDS_TH_PATCHADD)); - - patch.InvalidateGeomCache(); - InvalidateMesh(); - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -*/ -} - - -void EditPatchMod::BeginExtrude(TimeValue t) -{ - if (inExtrude) - return; - inExtrude = TRUE; - theHold.SuperBegin(); - DoExtrude(); -// PlugControllersSel(t,sel); - theHold.Begin(); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::EndExtrude(TimeValue t, BOOL accept) -{ - if (!ip) - return; - - if (!inExtrude) - return; - - ISpinnerControl *spin; - inExtrude = FALSE; - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } -// TempData()->freeBevelInfo(); - - theHold.Accept(GetString(IDS_RB_EXTRUDE)); - if (accept) - theHold.SuperAccept(GetString(IDS_RB_EXTRUDE)); - else theHold.SuperCancel(); - -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::Extrude(TimeValue t, float amount, BOOL useLocalNorms) -{ - if (!inExtrude) - return; - - - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - -// theHold.Begin(); - RecordTopologyTags(); - - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - - // Call the vertex type change function - #if (MAX_RELEASE < 4000) - patch->MoveNormal(amount, useLocalNorms); - #else - patch->MoveNormal(amount, useLocalNorms, PATCH_PATCH); - #endif - patch->InvalidateGeomCache(); - //InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - -/* theHold.Restore(); - patch.MoveNormal(amount, useLocalNorms); - - patch.InvalidateGeomCache(); - InvalidateMesh(); - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -*/ - - -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_File.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_File.cpp deleted file mode 100644 index 511669424..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_File.cpp +++ /dev/null @@ -1,326 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define OLD_SEL_LEVEL_CHUNK 0x1000 // Original backwards ordering -#define SEL_LEVEL_CHUNK 0x1001 -#define DISP_LATTICE_CHUNK 0x1010 -#define DISP_SURFACE_CHUNK 0x1020 -#define DISP_VERTS_CHUNK 0x1030 -#define EPM_MESH_ATTRIB_CHUNK 0x1040 -#define EPM_VTESS_ATTRIB_CHUNK 0x1090 -#define EPM_PTESS_ATTRIB_CHUNK 0x10a0 -#define EPM_DTESS_ATTRIB_CHUNK 0x10b0 -#define EPM_NORMAL_TESS_ATTRIB_CHUNK 0x10c0 -#define EPM_WELD_TESS_ATTRIB_CHUNK 0x10d0 -#define EPM_RENDERSTEPS_CHUNK 0x10e0 -#define EPM_SHOWINTERIOR_CHUNK 0x10f0 -// The following chunk is written on r3 and later files -// If not present, named selection data structures need fixup -#define EPM_SEL_NAMES_OK 0x1100 - -// Names of named selection sets -#define NAMEDVSEL_NAMES_CHUNK 0x1050 -#define NAMEDESEL_NAMES_CHUNK 0x1060 -#define NAMEDPSEL_NAMES_CHUNK 0x1070 -#define NAMEDSEL_STRING_CHUNK 0x1080 - -#define RPO_MODE_TILE 0x2000 -#define RPO_MODE_TILE_TRANSITION 0x2001 -#define RPO_INCLUDE_MESHES 0x2002 - -static int namedSelID[] = -{ - NAMEDVSEL_NAMES_CHUNK, - NAMEDESEL_NAMES_CHUNK, - NAMEDPSEL_NAMES_CHUNK -}; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -IOResult EditPatchMod::Save(ISave *isave) -{ - Modifier::Save(isave); - Interval valid; - ULONG nb; - // In r3 and later, if the named sel names are OK, write this chunk - if (!namedSelNeedsFixup) - { - isave->BeginChunk(EPM_SEL_NAMES_OK); - isave->EndChunk(); - } - isave->BeginChunk(SEL_LEVEL_CHUNK); - isave->Write(&selLevel, sizeof(int), &nb); - isave-> EndChunk(); - isave->BeginChunk(DISP_LATTICE_CHUNK); - isave->Write(&displayLattice, sizeof(BOOL), &nb); - isave-> EndChunk(); - isave->BeginChunk(DISP_SURFACE_CHUNK); - isave->Write(&displaySurface, sizeof(BOOL), &nb); - isave-> EndChunk(); - isave->BeginChunk(EPM_MESH_ATTRIB_CHUNK); - isave->Write(&meshSteps, sizeof(int), &nb); -// Future use (Not used now) - BOOL fakeAdaptive = FALSE; - isave->Write(&fakeAdaptive, sizeof(BOOL), &nb); -// isave->Write(&meshAdaptive,sizeof(BOOL),&nb); // Future use (Not used now) - isave-> EndChunk(); - -// 3-18-99 to suport render steps and removal of the mental tesselator - isave->BeginChunk(EPM_RENDERSTEPS_CHUNK); - if ((meshStepsRender < 0) ||(meshStepsRender > 100)) - { - meshStepsRender = 5; - nlassert(0); - } - isave->Write(&meshStepsRender, sizeof(int), &nb); - isave-> EndChunk(); - isave->BeginChunk(EPM_SHOWINTERIOR_CHUNK); - isave->Write(&showInterior, sizeof(BOOL), &nb); - isave-> EndChunk(); - - isave->BeginChunk(EPM_VTESS_ATTRIB_CHUNK); - viewTess.Save(isave); - isave-> EndChunk(); - isave->BeginChunk(EPM_PTESS_ATTRIB_CHUNK); - prodTess.Save(isave); - isave-> EndChunk(); - isave->BeginChunk(EPM_DTESS_ATTRIB_CHUNK); - dispTess.Save(isave); - isave-> EndChunk(); - - // Tile mode - isave->BeginChunk(RPO_MODE_TILE); - isave->Write(&tileMode, sizeof(tileMode), &nb); - isave->Write(&tileLevel, sizeof(tileLevel), &nb); - isave->Write(&keepMapping, sizeof(keepMapping), &nb); - isave-> EndChunk(); - - // Tile mode - isave->BeginChunk(RPO_INCLUDE_MESHES); - isave->Write(&includeMeshes, sizeof(includeMeshes), &nb); - isave-> EndChunk(); - - // Tile mode - isave->BeginChunk(RPO_MODE_TILE_TRANSITION); - isave->Write(&transitionType, sizeof(transitionType), &nb); - isave-> EndChunk(); - - isave->BeginChunk(EPM_NORMAL_TESS_ATTRIB_CHUNK); - isave->Write(&mViewTessNormals, sizeof(BOOL), &nb); - isave->Write(&mProdTessNormals, sizeof(BOOL), &nb); - isave-> EndChunk(); - isave->BeginChunk(EPM_WELD_TESS_ATTRIB_CHUNK); - isave->Write(&mViewTessWeld, sizeof(BOOL), &nb); - isave->Write(&mProdTessWeld, sizeof(BOOL), &nb); - isave-> EndChunk(); - - // Save names of named selection sets - for (int j = 0; j < 3; j++) - { - if (namedSel[j].Count()) - { - isave->BeginChunk(namedSelID[j]); - for (int i = 0; i < namedSel[j].Count(); i++) - { - isave->BeginChunk(NAMEDSEL_STRING_CHUNK); - isave->WriteWString(*namedSel[j][i]); - isave->EndChunk(); - } - isave->EndChunk(); - } - } - return IO_OK; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -IOResult EditPatchMod::LoadNamedSelChunk(ILoad *iload, int level) - { - IOResult res; - - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case NAMEDSEL_STRING_CHUNK: - { - TCHAR *name; - res = iload->ReadWStringChunk(&name); - // Set the name in the modifier - AddSet(TSTR(name), level + 1); - break; - } - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -IOResult EditPatchMod::Load(ILoad *iload) -{ - Modifier::Load(iload); - IOResult res; - ULONG nb; - namedSelNeedsFixup = TRUE; // Pre-r3 default - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case EPM_SEL_NAMES_OK: - namedSelNeedsFixup = FALSE; - break; - case NAMEDVSEL_NAMES_CHUNK: - { - res = LoadNamedSelChunk(iload, 0); - break; - } - case NAMEDESEL_NAMES_CHUNK: - { - res = LoadNamedSelChunk(iload, 1); - break; - } - case NAMEDPSEL_NAMES_CHUNK: - { - res = LoadNamedSelChunk(iload, 2); - break; - } - - case OLD_SEL_LEVEL_CHUNK: // Correct backwards ordering - { - short sl; - res = iload->Read(&sl, sizeof(short), &nb); - selLevel = sl; - switch (selLevel) - { - case 1: - selLevel = EP_PATCH; - break; - case 3: - selLevel = EP_VERTEX; - break; - } - } - break; - case SEL_LEVEL_CHUNK: - res = iload->Read(&selLevel, sizeof(int), &nb); - break; - case DISP_LATTICE_CHUNK: - res = iload->Read(&displayLattice, sizeof(BOOL), &nb); - break; - case DISP_SURFACE_CHUNK: - res = iload->Read(&displaySurface, sizeof(BOOL), &nb); - break; - case DISP_VERTS_CHUNK: - iload->SetObsolete(); - break; - case EPM_MESH_ATTRIB_CHUNK: - res = iload->Read(&meshSteps, sizeof(int), &nb); - res = iload->Read(&meshAdaptive, sizeof(BOOL), &nb); - break; -// 3-18-99 to suport render steps and removal of the mental tesselator - case EPM_RENDERSTEPS_CHUNK: - res = iload->Read(&meshStepsRender, sizeof(int), &nb); - if ((meshStepsRender < 0) ||(meshStepsRender > 100)) - { - meshStepsRender = 5; - nlassert(0); - } - break; - case EPM_SHOWINTERIOR_CHUNK: - res = iload->Read(&showInterior, sizeof(BOOL), &nb); - break; - - case EPM_VTESS_ATTRIB_CHUNK: - viewTess.Load(iload); - break; - case EPM_PTESS_ATTRIB_CHUNK: - prodTess.Load(iload); - break; - case EPM_DTESS_ATTRIB_CHUNK: - dispTess.Load(iload); - break; - case EPM_NORMAL_TESS_ATTRIB_CHUNK: - res = iload->Read(&mViewTessNormals, sizeof(BOOL), &nb); - res = iload->Read(&mProdTessNormals, sizeof(BOOL), &nb); - break; - case EPM_WELD_TESS_ATTRIB_CHUNK: - res = iload->Read(&mViewTessWeld, sizeof(BOOL), &nb); - res = iload->Read(&mProdTessWeld, sizeof(BOOL), &nb); - break; - - case RPO_MODE_TILE: - res = iload->Read(&tileMode, sizeof(tileMode), &nb); - res = iload->Read(&tileLevel, sizeof(tileLevel), &nb); - res = iload->Read(&keepMapping, sizeof(keepMapping), &nb); - break; - - case RPO_INCLUDE_MESHES: - res = iload->Read(&includeMeshes, sizeof(includeMeshes), &nb); - break; - - case RPO_MODE_TILE_TRANSITION: - res = iload->Read(&transitionType, sizeof(transitionType), &nb); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define EDITPATCHDATA_CHUNK 0x1000 - -IOResult EditPatchMod::SaveLocalData(ISave *isave, LocalModData *ld) -{ - EditPatchData *ep =(EditPatchData *)ld; - - isave->BeginChunk(EDITPATCHDATA_CHUNK); - ep->Save(isave); - isave->EndChunk(); - - return IO_OK; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -IOResult EditPatchMod::LoadLocalData(ILoad *iload, LocalModData **pld) -{ - IOResult res; - EditPatchData *ep; - if (*pld == NULL) - { - *pld =(LocalModData *) new EditPatchData(this); - } - ep =(EditPatchData *)*pld; - - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case EDITPATCHDATA_CHUNK: - res = ep->Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; - } diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_GUI.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_GUI.cpp deleted file mode 100644 index ddabff766..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_GUI.cpp +++ /dev/null @@ -1,161 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern HIMAGELIST hFaceImages; -int patchHitOverride = 0; // If zero, no override is done - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -class EPImageListDestroyer -{ - ~EPImageListDestroyer() - { - if (hFaceImages) - ImageList_Destroy(hFaceImages); - } -}; - -PatchRightMenu pMenu; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void LoadImages() -{ - if (hFaceImages) - return; - - HBITMAP hBitmap, hMask; - hFaceImages = ImageList_Create(24, 23, ILC_COLOR | ILC_MASK, 6, 0); - hBitmap = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_PATCHSELTYPES)); - hMask = LoadBitmap(hInstance, MAKEINTRESOURCE(IDB_PATCHSELMASK)); - ImageList_Add(hFaceImages, hBitmap, hMask); - DeleteObject(hBitmap); - DeleteObject(hMask); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void PatchRightMenu::Init(RightClickMenuManager* manager, HWND hWnd, IPoint2 m) -{ - switch (ep->GetSubobjectLevel()) - { - case EP_VERTEX: - if (ep->RememberVertThere(hWnd, m)) - { - int oldType = -1; - int flags1, flags2; - flags1 = flags2 = MF_STRING; - switch (ep->rememberedData) - { - case PVERT_COPLANAR: - flags1 |= MF_CHECKED; - break; - case 0: - flags2 |= MF_CHECKED; - break; - } - manager->AddMenu(this, MF_SEPARATOR, 0, NULL); - manager->AddMenu(this, flags1, PVERT_COPLANAR, GetString(IDS_TH_COPLANAR)); - manager->AddMenu(this, flags2, 0, GetString(IDS_TH_CORNER)); - } - break; - case EP_PATCH: - if (ep->RememberPatchThere(hWnd, m)) - { - int oldType = -1; - int flags1, flags2; - flags1 = flags2 = MF_STRING; - switch (ep->rememberedData) - { - case PATCH_AUTO: - flags1 |= MF_CHECKED; - break; - case 0: - flags2 |= MF_CHECKED; - break; - } - manager->AddMenu(this, MF_SEPARATOR, 0, NULL); - manager->AddMenu(this, flags1, PATCH_AUTO, GetString(IDS_TH_AUTOINTERIOR)); - manager->AddMenu(this, flags2, 0, GetString(IDS_TH_MANUALINTERIOR)); - } - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void PatchRightMenu::Selected(UINT id) -{ - switch (ep->GetSubobjectLevel()) - { - case EP_VERTEX: - ep->SetRememberedVertType((int)id); - break; - case EP_PATCH: - ep->SetRememberedPatchType((int)id); - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::HitTest(TimeValue t, INode* inode, int type, int crossing, - int flags, IPoint2 *p, ViewExp *vpt, ModContext* mc) -{ - Interval valid; - int savedLimits, res = 0; - GraphicsWindow *gw = vpt->getGW(); - HitRegion hr; - MakeHitRegion(hr, type, crossing, 4, p); - gw->setHitRegion(&hr); - Matrix3 mat = inode->GetObjectTM(t); - gw->setTransform(mat); - gw->setRndLimits(((savedLimits = gw->getRndLimits()) | GW_PICK) & ~GW_ILLUM); - gw->clearHitCode(); - - if (mc->localData) - { - EditPatchData *patchData =(EditPatchData*)mc->localData; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return FALSE; - - SubPatchHitList hitList; - PatchSubHitRec *rec; - - rpatch->UpdateBinding (*patch, t); - - if (selLevel!=EP_TILE) - { - res = patch->SubObjectHitTest(gw, gw->getMaterial(), &hr, - flags | ((patchHitOverride) ? patchHitLevel[patchHitOverride] : patchHitLevel[selLevel]), hitList); - } - else - { - res = rpatch->SubObjectHitTest(gw, gw->getMaterial(), &hr, - flags | ((patchHitOverride) ? patchHitLevel[patchHitOverride] : patchHitLevel[selLevel]), hitList, - t, *patch); - } - - rec = hitList.First(); - while (rec) - { - vpt->LogHit(inode, mc, rec->dist, 123456, new PatchHitData(rec->patch, rec->index, rec->type)); - rec = rec->Next(); - } - } - - gw->setRndLimits(savedLimits); - return res; -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hide.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hide.cpp deleted file mode 100644 index a6c057c31..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hide.cpp +++ /dev/null @@ -1,464 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// watje unhide all -static void UnHidePatches(PatchMesh *patch) -{ - // If positive vertex number, do it to just one vertex - int patches = patch->numPatches; - int i; - for (i = 0; i < patches; i++) - { - if (patch->patches[i].IsHidden()) - patch->patches[i].SetHidden(FALSE); - } - int verts = patch->numVerts; - for (i = 0; i < verts; i++) - { - if (patch->verts[i].IsHidden()) - patch->verts[i].SetHidden(FALSE); - } -} - -// -------------------------------------------------------------------------------- - -// watje 12-10-98 -void EditPatchMod::DoUnHide() { - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! -// if(patch->patchSel.NumberSet()) { - if (1) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - UnHidePatches(patch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoHide(int type) -{ - switch (type) - { - case EP_VERTEX: - DoVertHide(); - break; - case EP_EDGE: - DoEdgeHide(); - break; - case EP_PATCH: - DoPatchHide(); - break; - } - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// watje -static void FixUpVerts(PatchMesh *patch) -{ - int patches = patch->numPatches; - for (int i = 0; i < patches; i++) - { - - if (!(patch->patches[i].IsHidden())) - { - int ct = 4; - if (patch->patches[i].type == PATCH_TRI) - ct = 3; - for (int k = 0; k < ct; k++) - { - int a = patch->patches[i].v[k]; - patch->verts[a].SetHidden(FALSE); - } - - } - } - -} - -// -------------------------------------------------------------------------------- - -// watje hide patch -static void HidePatches(PatchMesh *patch) -{ - // If positive vertex number, do it to just one vertex - int patches = patch->numPatches; - BitArray &psel = patch->patchSel; - for (int i = 0; i < patches; i++) - { - if (psel[i]) - { - patch->patches[i].SetHidden(TRUE); - // hide all - int ct = 4; - if (patch->patches[i].type == PATCH_TRI) - ct = 3; - for (int k = 0; k < ct; k++) - { - int a = patch->patches[i].v[k]; - patch->verts[a].SetHidden(TRUE); - } - } - } - FixUpVerts(patch); -} - -// -------------------------------------------------------------------------------- - -void EditPatchMod::DoPatchHide() - { - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - HidePatches(patch); - patch->patchSel.ClearAll(); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// watje hide patches by verts -static void HideVerts(PatchMesh *patch) -{ - // If positive vertex number, do it to just one vertex - int patches = patch->numPatches; - BitArray &vsel = patch->vertSel; - int i; - for (i = 0; i < patches; i++) - { - int ct = 4; - if (patch->patches[i].type == PATCH_TRI) - ct = 3; - for (int k = 0; k < ct; k++) - { - int a = patch->patches[i].v[k]; - - if (vsel[a]) - { - patch->patches[i].SetHidden(TRUE); - } - } - } - for (i = 0; i < patches; i++) - { - if (patch->patches[i].IsHidden()) - { - // hide all - int ct = 4; - if (patch->patches[i].type == PATCH_TRI) - ct = 3; - for (int k = 0; k < ct; k++) - { - int a = patch->patches[i].v[k]; - patch->verts[a].SetHidden(TRUE); - } - } - } - - FixUpVerts(patch); -} - -// -------------------------------------------------------------------------------- - -void EditPatchMod::DoVertHide() - { - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet()) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - HideVerts(patch); - patch->vertSel.ClearAll(); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// watje hide patches by verts -static void HideEdges(PatchMesh *patch) -{ - // If positive vertex number, do it to just one vertex - int edges = patch->numEdges; - BitArray &esel = patch->edgeSel; - int i; - for (i = 0; i < edges; i++) - { - if (esel[i]) - { -#if (MAX_RELEASE < 4000) - int a = patch->edges[i].patch1; - int b = patch->edges[i].patch2; -#else // (MAX_RELEASE < 4000) - int a = patch->edges[i].patches[0]; - int b = patch->edges[i].patches[1]; -#endif // (MAX_RELEASE < 4000) - if (a>0) - patch->patches[a].SetHidden(TRUE); - if (b>0) - patch->patches[b].SetHidden(TRUE); - } - } - int patches = patch->numPatches; - for (i = 0; i < patches; i++) - { - if (patch->patches[i].IsHidden()) - { - // hide all - int ct = 4; - if (patch->patches[i].type == PATCH_TRI) - ct = 3; - for (int k = 0; k < ct; k++) - { - int a = patch->patches[i].v[k]; - patch->verts[a].SetHidden(TRUE); - } - } - } - FixUpVerts(patch); -} - -// -------------------------------------------------------------------------------- - -void EditPatchMod::DoEdgeHide() - { - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->edgeSel.NumberSet()) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - HideEdges(patch); - patch->edgeSel.ClearAll(); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - - } diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hook.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hook.cpp deleted file mode 100644 index f5cb62dd7..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Hook.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoAddHook(PatchMesh *pMesh, int vert0, int vert1, int vert2, int seg, int config) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - - if (mcList.Count() != 1) - return; - - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); -// RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if ((!patch) ||(patch != pMesh)) - continue; -// patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! -// if(patch->vertSel.NumberSet()) { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - - // ** Hulud bug hack for hooking my way \\\\\\\\\/////////// - - //patch->AddHook(vert1, seg); - - // Config 0 - switch (config) - { - case 0: - rpatch->AddHook (vert1, seg, *patch); - break; - case 1: - rpatch->AddHook (vert0, vert1, vert2, seg, *patch); - break; - default: - nlassert (0); - } - - // ** //////////\\\\\\\\\\ - -// patch->UpdateHooks(); -// InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); -// } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { -// ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - -/* // If any bits are set in the selection set, let's DO IT!! - if (!ip) - return; - theHold.Begin(); - POPatchGenRecord *rec = new POPatchGenRecord(this); - if (theHold.Holding()) - theHold.Put(new PatchObjectRestore(this, rec)); - // Call the patch type change function - - patch.AddHook(); - patch.InvalidateGeomCache(); - InvalidateMesh(); - theHold.Accept(GetResString(IDS_TH_PATCHCHANGE)); - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -*/ - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoRemoveHook() -{ - - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet()) - { - - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - // Call the vertex type change function - - // Modif by Hulud - //patch->RemoveHook(); - rpatch->RemoveHook (*patch); - -// patch->InvalidateGeomCache(); -// InvalidateMesh(); - - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Material.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Material.cpp deleted file mode 100644 index 7b56162b1..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Material.cpp +++ /dev/null @@ -1,1128 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSelMatIndex() - { - ModContextList mcList; - INodeTab nodes; - BOOL first = 1; - int mat=-1; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - if (first) - { - first = FALSE; - mat =(int)patch->getPatchMtlIndex(j); - } else - { - if ((int)patch->getPatchMtlIndex(j) != mat) - { - return -1; - } - } - } - } - } - - nodes.DisposeTemporary(); - return mat; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSelMatIndex(int index) -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetSelMatIndex")); - } - - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - altered = holdNeeded = TRUE; - patch->setPatchMtlIndex(j, (MtlID)index); - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept(GetString(IDS_TH_PATCHMTLCHANGE)); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateSurfaceUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSelTessU() -{ - ModContextList mcList; - INodeTab nodes; - BOOL first = 1; - int mat=-1; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - if (first) - { - first = FALSE; - mat = (int)rpatch->getUIPatch (j).NbTilesU; - } - else - { - if ((int)rpatch->getUIPatch (j).NbTilesU != mat) - { - return -1; - } - } - } - } - } - - nodes.DisposeTemporary(); - return mat; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSelTessV() -{ - ModContextList mcList; - INodeTab nodes; - BOOL first = 1; - int mat=-1; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - if (first) - { - first = FALSE; - mat = (int)rpatch->getUIPatch (j).NbTilesV; - } - else - { - if ((int)rpatch->getUIPatch (j).NbTilesV != mat) - { - return -1; - } - } - } - } - } - - nodes.DisposeTemporary(); - return mat; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSelTess(int nU, int nV) -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetSelTess")); - } - - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - altered = holdNeeded = TRUE; - rpatch->getUIPatch (j).Init (nU, nV, true); - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept("Tile count in U and V change"); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateSurfaceUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::getSmoothFlags () -{ - ModContextList mcList; - INodeTab nodes; - bool notFlagged=false; - bool flagged=false; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // For each edges - for (int j = 0; j < patch->getNumEdges(); j++) - { - // Is edge selected - if (patch->edgeSel[j]) - { - // Patch num -#if (MAX_RELEASE < 4000) - int p0=patch->edges[j].patch1; - int p1=patch->edges[j].patch2; -#else // (MAX_RELEASE < 4000) - int p0=patch->edges[j].patches[0]; - int p1=patch->edges[j].patches[1]; -#endif // (MAX_RELEASE < 4000) - - // Is edge flaged ? - if ( - ((p0!=-1)&&(rpatch->getUIPatch (p0).getEdgeFlag (WhereIsTheEdge (p0, j, *patch)))) || - ((p1!=-1)&&(rpatch->getUIPatch (p1).getEdgeFlag (WhereIsTheEdge (p1, j, *patch)))) - ) - { - // Flagged ! - flagged=true; - } - else - { - // Not flagged ! - notFlagged=true; - } - } - } - } - - nodes.DisposeTemporary(); - return flagged?(notFlagged?2:1):0; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::setSmoothFlags (bool smooth) -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetSmoothFlags")); - } - - // For each edges - for (int j = 0; j < patch->getNumEdges(); j++) - { - // Is edge selected - if (patch->edgeSel[j]) - { - // Patch num -#if (MAX_RELEASE < 4000) - int p0=patch->edges[j].patch1; - int p1=patch->edges[j].patch2; -#else // (MAX_RELEASE < 4000) - int p0=patch->edges[j].patches[0]; - int p1=patch->edges[j].patches[1]; -#endif // (MAX_RELEASE < 4000) - - // Patch exist ? - if (p0!=-1) - { - // Set the flag - rpatch->getUIPatch (p0).setEdgeFlag (WhereIsTheEdge (p0, j, *patch), smooth); - - // Touched - altered=TRUE; - holdNeeded=TRUE; - } - - // idem patch #2 - if (p1!=-1) - { - // Set the flag - rpatch->getUIPatch (p1).setEdgeFlag (WhereIsTheEdge (p1, j, *patch), smooth); - - // Touched - altered=TRUE; - holdNeeded=TRUE; - } - } - } - - // If touched - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept("Tile count in U and V change"); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateEdgeUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::BalanceSelPatch (int patch, int size, bool balanceU, std::set& visitedU, std::set& visitedV, RPatchMesh* rpatch, PatchMesh *ppatch) -{ - // already visited ? - if ((balanceU&&(visitedU.find(patch)!=visitedU.end()))||((!balanceU)&&(visitedV.find(patch)!=visitedV.end()))) - return; - - // insert in the visit set - if (balanceU) - visitedU.insert (patch); - else - visitedV.insert (patch); - - // Get patch tess level.. - int nU=rpatch->getUIPatch (patch).NbTilesU; - int nV=rpatch->getUIPatch (patch).NbTilesV; - if (balanceU) - nU=size; - else - nV=size; - - // Resize the patch - rpatch->getUIPatch (patch).Init (nU, nV, true); - - // Call neiborhood - for (int i=0; i<4; i++) - { - int nEdge=ppatch->patches[patch].edge[i]; -#if (MAX_RELEASE < 4000) - int nOtherPatch=(ppatch->edges[nEdge].patch1==patch)?ppatch->edges[nEdge].patch2:ppatch->edges[nEdge].patch1; -#else // (MAX_RELEASE < 4000) - int nOtherPatch=(ppatch->edges[nEdge].patches[0]==patch)?ppatch->edges[nEdge].patches[1]:ppatch->edges[nEdge].patches[0]; -#endif // (MAX_RELEASE < 4000) - if (nOtherPatch>=0) - { - int nNeiborEdge=WhereIsTheEdge (nOtherPatch, nEdge, *ppatch); - BalanceSelPatch (nOtherPatch, (i&1)?nU:nV, (nNeiborEdge&1)!=0, visitedU, visitedV, rpatch, ppatch); - } - } -} - -void EditPatchMod::BalanceSelPatch () -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetSelTess")); - } - - std::set visitedU; - std::set visitedV; - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - altered = holdNeeded = TRUE; - - // insert it - visitedU.insert (j); - visitedV.insert (j); - - // Get patch tess level.. - int nU=rpatch->getUIPatch (j).NbTilesU; - int nV=rpatch->getUIPatch (j).NbTilesV; - - // Call neiborhood - for (int i=0; i<4; i++) - { - int nEdge=patch->patches[j].edge[i]; -#if (MAX_RELEASE < 4000) - int nOtherPatch=(patch->edges[nEdge].patch1==j)?patch->edges[nEdge].patch2:patch->edges[nEdge].patch1; -#else // (MAX_RELEASE < 4000) - int nOtherPatch=(patch->edges[nEdge].patches[0]==j)?patch->edges[nEdge].patches[1]:patch->edges[nEdge].patches[0]; -#endif // (MAX_RELEASE < 4000) - if (nOtherPatch>=0) - { - int nNeiborEdge=WhereIsTheEdge (nOtherPatch, nEdge, *patch); - BalanceSelPatch (nOtherPatch, (i&1)?nU:nV, (nNeiborEdge&1)!=0, visitedU, visitedV, rpatch, patch); - } - } - - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept("Balance tile"); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateSurfaceUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -/*void EditPatchMod::SetTileNum (ULONG nU) -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetTileNum")); - } - - nlassert (patch->numPatches==(int)rpatch->UIPatch.size()); - for (int j = 0; j < patch->getNumPatches(); j++) - { - int nTileU=1<UIPatch[j].NbTilesU; - int nTileV=1<UIPatch[j].NbTilesV; - - for (int v = 0; v < nTileV; v++) - for (int u= 0; u < nTileU; u++) - { - if (rpatch->tileSel[rpatch->GetTileNumber(j, u, v)]) - { - altered = holdNeeded = TRUE; - rpatch->UIPatch[j].Tile[u+v*nTileU].MatID = nU; - } - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept("Tile number change"); - else - { - ip->DisplayTempPrompt("No tile selected", PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateSurfaceUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -}*/ - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -/*ULONG EditPatchMod::GetTileNum () -{ - ModContextList mcList; - INodeTab nodes; - BOOL first = 1; - ULONG num=0xffffffff; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - nlassert (patch->numPatches==(int)rpatch->UIPatch.size()); - for (int j = 0; j < patch->getNumPatches(); j++) - { - int nTileU=1<UIPatch[j].NbTilesU; - int nTileV=1<UIPatch[j].NbTilesV; - - for (int v = 0; v < nTileV; v++) - for (int u= 0; u < nTileU; u++) - { - if (rpatch->tileSel[rpatch->GetTileNumber(j, u, v)]) - { - if (first) - { - first = FALSE; - num = rpatch->UIPatch[j].Tile[u+v*nTileU].MatID; - } - else - { - if (rpatch->UIPatch[j].Tile[u+v*nTileU].MatID != num) - { - return 0xffffffff; - } - } - } - } - } - } - - nodes.DisposeTemporary(); - return num; -}*/ - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -/*void EditPatchMod::SetTileRot (int nRot) -{ - ModContextList mcList; - INodeTab nodes; - BOOL holdNeeded = FALSE; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - BOOL altered = FALSE; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SetTileRot")); - } - - nlassert (patch->numPatches==(int)rpatch->UIPatch.size()); - for (int j = 0; j < patch->getNumPatches(); j++) - { - int nTileU=1<UIPatch[j].NbTilesU; - int nTileV=1<UIPatch[j].NbTilesV; - - for (int v = 0; v < nTileV; v++) - for (int u= 0; u < nTileU; u++) - { - if (rpatch->tileSel[rpatch->GetTileNumber(j, u, v)]) - { - altered = holdNeeded = TRUE; - rpatch->UIPatch[j].Tile[u+v*nTileU].Rotate = nRot; - } - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept("Tile rotation change"); - else - { - ip->DisplayTempPrompt("No tile selected", PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - InvalidateSurfaceUI(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -}*/ - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -/*int EditPatchMod::GetTileRot () -{ - ModContextList mcList; - INodeTab nodes; - BOOL first = 1; - int rot=-1; - - if (!ip) - return -1; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - nlassert (patch->numPatches==(int)rpatch->UIPatch.size()); - for (int j = 0; j < patch->getNumPatches(); j++) - { - int nTileU=1<UIPatch[j].NbTilesU; - int nTileV=1<UIPatch[j].NbTilesV; - - for (int v = 0; v < nTileV; v++) - for (int u= 0; u < nTileU; u++) - { - if (rpatch->tileSel[rpatch->GetTileNumber(j, u, v)]) - { - if (first) - { - first = FALSE; - rot = rpatch->UIPatch[j].Tile[u+v*nTileU].Rotate; - } - else - { - if (rpatch->UIPatch[j].Tile[u+v*nTileU].Rotate != rot) - { - return -1; - } - } - } - } - } - } - - nodes.DisposeTemporary(); - return rot; -}*/ - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SelectByMat(int index, BOOL clear) - { - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchSelRestore(patchData, this, patch)); - } - - if (clear) - patch->patchSel.ClearAll(); - - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->getPatchMtlIndex(j) == index) - patch->patchSel.Set(j); - } - - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->SetFlag(EPD_BEENDONE, TRUE); - patchData->TempData(this)->Invalidate(PART_SELECT); - } - - PatchSelChanged(); - theHold.Accept(GetString(IDS_RB_SELECTBYMATID)); - - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -MtlID EditPatchMod::GetNextAvailMtlID(ModContext* mc) -{ - if (!mc) - return 1; - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return 1; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return 1; - - int mtlID = GetSelFaceUniqueMtlID(mc); - - if (mtlID == -1) - { - int i; - - MtlID min, max; - BOOL first = TRUE; - - int p; - for (p = 0; p < patch->numPatches; ++p) - { - MtlID thisID = patch->getPatchMtlIndex(p); - if (first) - { - min = max = thisID; - first = FALSE; - } - else - if (thisID < min) - min = thisID; - else - if (thisID > max) - max = thisID; - } - // If room below, return it - if (min > 0) - return min - 1; - // Build a bit array to find any gaps - BitArray b; - int bits = max - min + 1; - b.SetSize(bits); - b.ClearAll(); - for (p = 0; p < patch->numPatches; ++p) - b.Set(patch->getPatchMtlIndex(p) - min); - for (i = 0; i < bits; ++i) - { - if (!b[i]) - return (MtlID)(i + min); - } - // No gaps! If room above, return it - if (max < 65535) - return max + 1; - } - return (MtlID)mtlID; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL EditPatchMod::HasFaceSelection(ModContext* mc) -{ - // Are we the edited object? - if (ip == NULL) - return FALSE; - - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return FALSE; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return FALSE; - - // Is Patch selection active? - if (selLevel == EP_PATCH && patch->patchSel.NumberSet()) - return TRUE; - - return FALSE; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSelFaceMtlID(ModContext* mc, MtlID id, BOOL bResetUnsel) -{ - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return; - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(ip->GetTime()); - - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch)); - - for (int p = 0; p < patch->numPatches; ++p) - { - if (patch->patchSel[p]) - { - altered = TRUE; - patch->setPatchMtlIndex(p, id); - } - } - - if (altered) - { - patchData->UpdateChanges(patch, rpatch, FALSE); - InvalidateSurfaceUI(); - } - - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSelFaceUniqueMtlID(ModContext* mc) -{ - int mtlID; - - mtlID = GetSelFaceAnyMtlID(mc); - if (mtlID == -1) - return mtlID; - - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return 1; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return 1; - - for (int p = 0; p < patch->numPatches; ++p) - { - if (patch->patchSel[p]) - continue; - if (patch->getPatchMtlIndex(p) != mtlID) - continue; - mtlID = -1; - } - return mtlID; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSelFaceAnyMtlID(ModContext* mc) -{ - int mtlID = -1; - BOOL bGotFirst = FALSE; - - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return 1; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return 1; - - for (int p = 0; p < patch->numPatches; ++p) - { - if (!patch->patchSel[p]) - continue; - if (bGotFirst) - { - if (mtlID != patch->getPatchMtlIndex(p)) - { - mtlID = -1; - break; - } - } - else - { - mtlID = patch->getPatchMtlIndex(p); - bGotFirst = TRUE; - } - } - return mtlID; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetMaxMtlID(ModContext* mc) -{ - MtlID mtlID = 0; - - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (!patchData) - return 1; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - return 1; - - for (int p = 0; p < patch->numPatches; ++p) - mtlID = std::max(mtlID, patch->getPatchMtlIndex(p)); - - return mtlID; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Remember.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Remember.cpp deleted file mode 100644 index 3ab9a629b..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Remember.cpp +++ /dev/null @@ -1,321 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void ChangePatchType(PatchMesh *patch, int index, int type); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::RememberPatchThere(HWND hWnd, IPoint2 m) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - - // Initialize so there isn't any remembered patch - rememberedPatch = NULL; - - if (!ip) - return 0; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - // See if we're over a patch - ViewExp *vpt = ip->GetViewport(hWnd); - GraphicsWindow *gw = vpt->getGW(); - HitRegion hr; - MakeHitRegion(hr, HITTYPE_POINT, 1, 4, &m); - gw->setHitRegion(&hr); - SubPatchHitList hitList; - - int result = 0; - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - INode *inode = nodes[i]; - Matrix3 mat = inode->GetObjectTM(t); - gw->setTransform(mat); - patch->SubObjectHitTest(gw, gw->getMaterial(), &hr, SUBHIT_PATCH_PATCHES/* | HIT_ABORTONHIT*/, hitList); - PatchSubHitRec *hit = hitList.First(); - if (hit) - { - result = 1; - // Go thru the list and see if we have one that's selected - // If more than one selected and they're different types, set unknown type - hit = hitList.First(); - while (hit) - { - if (patch->patchSel[hit->index]) - { - if (patch->SelPatchesSameType()) - { - rememberedPatch = NULL; - rememberedData = patch->patches[hit->index].flags &(~PATCH_INTERIOR_MASK); - goto finish; - } - // Selected patches not all the same type! - rememberedPatch = NULL; - rememberedData = -1; // Not all the same! - goto finish; - } - hit = hit->Next(); - } - if (ip->SelectionFrozen()) - goto finish; - // Select just this patch - hit = hitList.First(); - theHold.Begin(); - if (theHold.Holding()) - theHold.Put(new PatchSelRestore(patchData, this, patch)); - patch->patchSel.ClearAll(); - patch->patchSel.Set(hit->index); - patchData->UpdateChanges(patch, rpatch, FALSE); - theHold.Accept(GetString(IDS_DS_SELECT)); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - PatchSelChanged(); - - rememberedPatch = patch; - rememberedIndex = hit->index; - rememberedData = patch->patches[rememberedIndex].flags &(~PATCH_INTERIOR_MASK); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - -finish: - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - if (vpt) - ip->ReleaseViewport(vpt); - return result; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ChangeRememberedPatch(int type) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - if (patch == rememberedPatch) - { - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - theHold.Begin(); - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "ChangeRememberedPatch")); - // Call the patch type change function - ChangePatchType(patch, rememberedIndex, type); - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - nodes.DisposeTemporary(); - return; - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::RememberVertThere(HWND hWnd, IPoint2 m) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - - // Initialize so there isn't any remembered patch - rememberedPatch = NULL; - - if (!ip) - return 0; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - // See if we're over a vertex - ViewExp *vpt = ip->GetViewport(hWnd); - GraphicsWindow *gw = vpt->getGW(); - HitRegion hr; - MakeHitRegion(hr, HITTYPE_POINT, 1, 4, &m); - gw->setHitRegion(&hr); - SubPatchHitList hitList; - - int result = 0; - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - INode *inode = nodes[i]; - Matrix3 mat = inode->GetObjectTM(t); - gw->setTransform(mat); - patch->SubObjectHitTest(gw, gw->getMaterial(), &hr, SUBHIT_PATCH_VERTS/* | HIT_ABORTONHIT*/, hitList); - PatchSubHitRec *hit = hitList.First(); - if (hit) - { - result = 1; - // Go thru the list and see if we have one that's selected - // If more than one selected and they're different types, set unknown type - hit = hitList.First(); - while (hit) - { - if (patch->vertSel[hit->index]) - { - if (patch->SelVertsSameType()) - { - rememberedPatch = NULL; - rememberedData = patch->verts[hit->index].flags &(~PVERT_TYPE_MASK); - goto finish; - } - // Selected verts not all the same type! - rememberedPatch = NULL; - rememberedData = -1; // Not all the same! - goto finish; - } - hit = hit->Next(); - } - if (ip->SelectionFrozen()) - goto finish; - // Select just this vertex - hit = hitList.First(); - theHold.Begin(); - if (theHold.Holding()) - theHold.Put(new PatchSelRestore(patchData, this, patch)); - patch->vertSel.ClearAll(); - patch->vertSel.Set(hit->index); - patchData->UpdateChanges(patch, rpatch, FALSE); - theHold.Accept(GetString(IDS_DS_SELECT)); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - PatchSelChanged(); - - rememberedPatch = patch; - rememberedIndex = hit->index; - rememberedData = patch->verts[rememberedIndex].flags &(~PVERT_TYPE_MASK); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - -finish: - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - if (vpt) - ip->ReleaseViewport(vpt); - return result; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ChangeRememberedVert(int type) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - if (patch == rememberedPatch) - { - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - theHold.Begin(); - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "ChangeRememberedVert")); - // Call the vertex type change function - patch->ChangeVertType(rememberedIndex, type); - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - theHold.Accept(GetString(IDS_TH_VERTCHANGE)); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - nodes.DisposeTemporary(); - return; - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Selection.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Selection.cpp deleted file mode 100644 index 3814a2df9..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Selection.cpp +++ /dev/null @@ -1,1208 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -INT_PTR CALLBACK PatchSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchTileDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchEdgeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -extern void ChangePatchType(PatchMesh *patch, int index, int type); -extern BOOL filterVerts; -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -int EditPatchMod::GetSubobjectLevel() -{ - return selLevel; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSubobjectLevel(int level) -{ - selLevel = level; - if (hSelectPanel) - RefreshSelType(); - // Setup named selection sets - SetupNamedSelDropDown(); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static int butIDs[] = { 0, EP_VERTEX, EP_EDGE, EP_PATCH, EP_TILE }; - -void EditPatchMod::RefreshSelType() -{ - if (!hSelectPanel) - return; - if (hOpsPanel) - { - // Set up or remove the surface properties rollup if needed - if (hSurfPanel) - { - rsSurf = IsRollupPanelOpen(hSurfPanel); - ip->DeleteRollupPage(hSurfPanel); - hSurfPanel = NULL; - } - if (hTilePanel) - { - rsTile = IsRollupPanelOpen(hTilePanel); - ip->DeleteRollupPage(hTilePanel); - hTilePanel = NULL; - } - if (hEdgePanel) - { - rsEdge = IsRollupPanelOpen(hEdgePanel); - ip->DeleteRollupPage(hEdgePanel); - hEdgePanel = NULL; - } - /* watje 3 - 18 - 99 - if (selLevel == EP_OBJECT) - { - hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF_OBJ), - PatchObjSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); - } - else - */ - if (selLevel == EP_PATCH) - { - hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF), - PatchSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); - } - if (selLevel == EP_TILE) - { - hTilePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_TILE), - PatchTileDlgProc, "Tile Properties", (LPARAM) this, rsTile ? 0 : APPENDROLL_CLOSED); - } - if (selLevel == EP_EDGE) - { - hEdgePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_EDGE), - PatchEdgeDlgProc, "Edge Properties", (LPARAM) this, rsEdge ? 0 : APPENDROLL_CLOSED); - } - SetSurfDlgEnables(); - SetTileDlgEnables(); - SetEdgeDlgEnables(); - } - - ICustToolbar *iToolbar = GetICustToolbar(GetDlgItem(hSelectPanel, IDC_SELTYPE)); - ICustButton *but; - for (int i = 1; i < 5; i++) - { - but = iToolbar->GetICustButton(butIDs[i]); - but->SetCheck(GetSubobjectLevel() == i); - ReleaseICustButton(but); - } - ReleaseICustToolbar(iToolbar); - SetSelDlgEnables(); - SetOpsDlgEnables(); - UpdateSelectDisplay(); - PatchSelChanged(); -} - -void EditPatchMod::SelectionChanged() -{ - if (hSelectPanel) - { - UpdateSelectDisplay(); - InvalidateRect(hSelectPanel, NULL, FALSE); - } - // Now see if the selection set matches one of the named selections! - if (ip &&(selLevel != EP_OBJECT)&&(selLevel != EP_TILE)) - { - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - ip->GetModContexts(mcList, nodes); - int sublevel = selLevel - 1; - int dataSet; - for (int set = 0; set < namedSel[sublevel].Count(); ++set) - { - ClearPatchDataFlag(mcList, EPD_BEENDONE); - BOOL gotMatch = FALSE; - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - // See if this patch has the named selection set - switch (selLevel) - { - case EP_VERTEX: - for (dataSet = 0; dataSet < patchData->vselSet.Count(); ++dataSet) - { - if (*(patchData->vselSet.names[dataSet]) == *namedSel[sublevel][set]) - { - if (!(*patchData->vselSet.sets[set] == patch->vertSel)) - goto next_set; - gotMatch = TRUE; - break; - } - } - break; - case EP_EDGE: - for (dataSet = 0; dataSet < patchData->eselSet.Count(); ++dataSet) - { - if (*(patchData->eselSet.names[dataSet]) == *namedSel[sublevel][set]) - { - if (!(*patchData->eselSet.sets[set] == patch->edgeSel)) - goto next_set; - gotMatch = TRUE; - break; - } - } - break; - case EP_PATCH: - for (dataSet = 0; dataSet < patchData->pselSet.Count(); ++dataSet) - { - if (*(patchData->pselSet.names[dataSet]) == *namedSel[sublevel][set]) - { - if (!(*patchData->pselSet.sets[set] == patch->patchSel)) - goto next_set; - gotMatch = TRUE; - break; - } - } - break; - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - // If we reach here, we might have a set that matches - if (gotMatch) - { - ip->SetCurNamedSelSet(*namedSel[sublevel][set]); - goto namedSelUpdated; - } -next_set:; - } - // No set matches, clear the named selection - ip->ClearCurNamedSelSet(); - - -namedSelUpdated: - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSelDlgEnables() -{ - if (!hSelectPanel) - return; - ICustButton *but = GetICustButton(GetDlgItem(hSelectPanel, IDC_NS_PASTE)); - but->Disable(); - switch (GetSubobjectLevel()) - { - case PO_VERTEX: - if (GetPatchNamedSelClip(CLIP_P_VERT)) - but->Enable(); - break; - case PO_EDGE: - if (GetPatchNamedSelClip(CLIP_P_EDGE)) - but->Enable(); - break; - case PO_PATCH: - if (GetPatchNamedSelClip(CLIP_P_PATCH)) - but->Enable(); - break; - case PO_TILE: - break; - } - ReleaseICustButton(but); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -DWORD EditPatchMod::GetSelLevel() -{ - return GetSubobjectLevel(); -} - -void EditPatchMod::SetSelLevel(DWORD level) -{ -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// Select a subcomponent within our object(s). WARNING! Because the HitRecord list can -// indicate any of the objects contained within the group of patches being edited, we need -// to watch for control breaks in the patchData pointer within the HitRecord! - - void EditPatchMod::SelectSubComponent(HitRecord *hitRec, BOOL selected, BOOL all, BOOL invert) -{ - // Don't do anything if at vertex level with verts turned off - if (selLevel == EP_VERTEX && !filterVerts) - return; - - if (!ip) - return; - TimeValue t = ip->GetTime(); - - ip->ClearCurNamedSelSet(); - - // Keep processing hit records as long as we have them! - while (hitRec) - { - EditPatchData *patchData =(EditPatchData*)hitRec->modContext->localData; - - if (!patchData) - return; - - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - return; - - patchData->BeginEdit(t); - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SelectSubComponent")); - - switch (selLevel) - { - case EP_VERTEX: - { - if (all) - { - if (invert) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto vert_done; - int index =((PatchHitData *)(hitRec->hitData))->index; - if (((PatchHitData *)(hitRec->hitData))->type == PATCH_HIT_VERTEX) - { - if (patch->vertSel[index]) - patch->vertSel.Clear(index); - else - patch->vertSel.Set(index); - } - hitRec = hitRec->Next(); - } - } - else - if (selected) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto vert_done; - PatchHitData *hit =(PatchHitData *)(hitRec->hitData); - if (hit->type == PATCH_HIT_VERTEX) - patch->vertSel.Set(hit->index); - hitRec = hitRec->Next(); - } - } - else - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto vert_done; - PatchHitData *hit =(PatchHitData *)(hitRec->hitData); - if (hit->type == PATCH_HIT_VERTEX) - patch->vertSel.Clear(hit->index); - hitRec = hitRec->Next(); - } - } - } - else - { - int index =((PatchHitData *)(hitRec->hitData))->index; - if (((PatchHitData *)(hitRec->hitData))->type == PATCH_HIT_VERTEX) - { - if (invert) - { - if (patch->vertSel[index]) - patch->vertSel.Clear(index); - else - patch->vertSel.Set(index); - } - else - if (selected) - patch->vertSel.Set(index); - else - patch->vertSel.Clear(index); - } - hitRec = NULL; // Reset it so we can exit - } -vert_done: - break; - } - case EP_EDGE: - { - if (all) - { - if (invert) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto edge_done; - int index =((PatchHitData *)(hitRec->hitData))->index; - if (patch->edgeSel[index]) - patch->edgeSel.Clear(index); - else - patch->edgeSel.Set(index); - hitRec = hitRec->Next(); - } - } - else - if (selected) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto edge_done; - patch->edgeSel.Set(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - else - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto edge_done; - patch->edgeSel.Clear(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - } - else - { - int index =((PatchHitData *)(hitRec->hitData))->index; - if (invert) - { - if (patch->edgeSel[index]) - patch->edgeSel.Clear(index); - else - patch->edgeSel.Set(index); - } - else - if (selected) - { - patch->edgeSel.Set(index); - } - else - { - patch->edgeSel.Clear(index); - } - hitRec = NULL; // Reset it so we can exit - } -edge_done: - break; - } - case EP_PATCH: - { - if (all) - { - if (invert) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto patch_done; - int index =((PatchHitData *)(hitRec->hitData))->index; - if (patch->patchSel[index]) - patch->patchSel.Clear(index); - else - patch->patchSel.Set(index); - hitRec = hitRec->Next(); - } - } - else - if (selected) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto patch_done; - patch->patchSel.Set(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - else - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto patch_done; - patch->patchSel.Clear(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - } - else - { - int index =((PatchHitData *)(hitRec->hitData))->index; - if (invert) - { - if (patch->patchSel[index]) - patch->patchSel.Clear(index); - else - patch->patchSel.Set(index); - } - else - if (selected) - { - patch->patchSel.Set(index); - } - else - { - patch->patchSel.Clear(index); - } - hitRec = NULL; // Reset it so we can exit - } -patch_done: - break; - } - case EP_TILE: - { - if (all) - { - if (invert) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto tile_done; - int index =((PatchHitData *)(hitRec->hitData))->index; - if (rpatch->tileSel[index]) - rpatch->tileSel.Clear(index); - else - rpatch->tileSel.Set(index); - hitRec = hitRec->Next(); - } - } - else - if (selected) - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto tile_done; - rpatch->tileSel.Set(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - else - { - while (hitRec) - { - // If the object changes, we're done! - if (patchData !=(EditPatchData*)hitRec->modContext->localData) - goto tile_done; - rpatch->tileSel.Clear(((PatchHitData *)(hitRec->hitData))->index); - hitRec = hitRec->Next(); - } - } - } - else - { - int index =((PatchHitData *)(hitRec->hitData))->index; - if (invert) - { - if (rpatch->tileSel[index]) - rpatch->tileSel.Clear(index); - else - rpatch->tileSel.Set(index); - } - else - if (selected) - { - rpatch->tileSel.Set(index); - } - else - { - rpatch->tileSel.Clear(index); - } - hitRec = NULL; // Reset it so we can exit - } -tile_done: - break; - } - case EP_OBJECT: - default: - return; - } - patchData->UpdateChanges(patch, rpatch, FALSE); - if (patchData->tempData) - { - patchData->tempData->Invalidate(PART_SELECT); - } - PatchSelChanged(); - } - - UpdateSelectDisplay(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); -} - - - -void EditPatchMod::ClearSelection(int selLevel) -{ - // Don't do anything if at vertex level with verts turned off - if (selLevel == EP_VERTEX && !filterVerts) - return; - if (selLevel == EP_OBJECT) - return; - - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->ClearCurNamedSelSet(); - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patchData->BeginEdit(ip->GetTime()); - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "ClearSelection")); - } - - switch (selLevel) - { - case EP_VERTEX: - { - patch->vertSel.ClearAll(); - break; - } - case EP_EDGE: - { - patch->edgeSel.ClearAll(); - break; - } - case EP_PATCH: - { - patch->patchSel.ClearAll(); - break; - } - case EP_TILE: - { - rpatch->tileSel.ClearAll(); - break; - } - } - patchData->UpdateChanges(patch, rpatch, FALSE); - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_SELECT); - } - PatchSelChanged(); - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void UnselectHiddenPatches(int level, PatchMesh *patch) -{ - switch (level) - { - case EP_VERTEX: - { - for (int i = 0; i < patch->numVerts; i++) - { - if (patch->getVert(i).IsHidden()) - patch->vertSel.Set(i, FALSE); - } - break; - } - case EP_EDGE: - { - for (int i = 0; i < patch->numEdges; i++) - { - int a, b; - a = patch->edges[i].v1; - b = patch->edges[i].v2; - if (patch->getVert(a).IsHidden() && patch->getVert(b).IsHidden()) - patch->edgeSel.Set(i, FALSE); - } - break; - } - case EP_PATCH: - { - for (int i = 0; i < patch->numPatches; i++) - { - if (patch->patches[i].IsHidden()) - patch->patchSel.Set(i, FALSE); - } - break; - } - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SelectAll(int selLevel) -{ - // Don't do anything if at vertex level with verts turned off - if (selLevel == EP_VERTEX && !filterVerts) - return; - if (selLevel == EP_OBJECT) - return; - - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ip->ClearCurNamedSelSet(); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patchData->BeginEdit(ip->GetTime()); - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "SelectAll")); - } - - switch (selLevel) - { - case EP_VERTEX: - { - patch->vertSel.SetAll(); - break; - } - case EP_EDGE: - { - patch->edgeSel.SetAll(); - break; - } - case EP_PATCH: - { - patch->patchSel.SetAll(); - break; - } - case EP_TILE: - { - rpatch->tileSel.SetAll(); - break; - } - } - UnselectHiddenPatches(selLevel, patch); - patchData->UpdateChanges(patch, rpatch, FALSE); - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_SELECT); - } - PatchSelChanged(); - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::InvertSelection(int selLevel) -{ - // Don't do anything if at vertex level with verts turned off - if (selLevel == EP_VERTEX && !filterVerts) - return; - if (selLevel == EP_OBJECT) - return; - - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ip->ClearCurNamedSelSet(); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patchData->BeginEdit(ip->GetTime()); - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "InvertSelection")); - - switch (selLevel) - { - case EP_VERTEX: - { - patch->vertSel = ~patch->vertSel; - break; - } - case EP_EDGE: - { - patch->edgeSel = ~patch->edgeSel; - break; - } - case EP_PATCH: - { - patch->patchSel = ~patch->patchSel; - break; - } - case EP_TILE: - { - rpatch->tileSel = ~rpatch->tileSel; - break; - } - } - UnselectHiddenPatches(selLevel, patch); - patchData->UpdateChanges(patch, rpatch, FALSE); - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_SELECT); - } - PatchSelChanged(); - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ActivateSubobjSel(int level, XFormModes& modes) -{ - ModContextList mcList; - INodeTab nodes; - int old = selLevel; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - - selLevel = level; - // 3-10-99 watje - if (level != EP_PATCH) - { - if (ip->GetCommandMode() == bevelMode) - ip->SetStdCommandMode(CID_OBJMOVE); - if (ip->GetCommandMode() == extrudeMode) - ip->SetStdCommandMode(CID_OBJMOVE); - if (inBevel) - { - ISpinnerControl *spin; - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_OUTLINESPINNER)); - if (spin) - { - HWND hWnd = spin->GetHwnd(); - SendMessage(hWnd, WM_LBUTTONUP, 0, 0); - ReleaseISpinner(spin); - } - - } - if (inExtrude) - { - ISpinnerControl *spin; - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - HWND hWnd = spin->GetHwnd(); - SendMessage(hWnd, WM_LBUTTONUP, 0, 0); - ReleaseISpinner(spin); - } - } - } - if (level != EP_VERTEX) - { - if (ip->GetCommandMode() == bindMode) - ip->SetStdCommandMode(CID_OBJMOVE); - } - - - switch (level) - { - case EP_OBJECT: - // Not imp. - break; - - case EP_PATCH: - modes = XFormModes(moveMode, rotMode, nuscaleMode, uscaleMode, squashMode, selectMode); - break; - - case EP_EDGE: - modes = XFormModes(moveMode, rotMode, nuscaleMode, uscaleMode, squashMode, selectMode); - break; - - case EP_VERTEX: - - modes = XFormModes(moveMode, rotMode, nuscaleMode, uscaleMode, squashMode, selectMode); - break; - - case EP_TILE: - - modes = XFormModes(NULL, NULL, NULL, NULL, NULL, selectMode); - break; - } - - if (selLevel != old) - { - SetSubobjectLevel(level); - - // Modify the caches to reflect the new sel level. - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) - { - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (patch) - { - if (selLevel == EP_VERTEX) - patch->dispFlags = DISP_VERTS; - else - patch->dispFlags = 0; - if (displayLattice) - patch->SetDispFlag(DISP_LATTICE); - patch->SetDispFlag(patchLevelDispFlags[selLevel]); - patch->selLevel = patchLevel[selLevel]; - rpatch->SetSelLevel (selLevel); - } - } - } - - NotifyDependents(FOREVER, PART_SUBSEL_TYPE | PART_DISPLAY, REFMSG_CHANGE); - ip->PipeSelLevelChanged(); - // Update selection UI display, named sel - SelectionChanged(); - } - - nodes.DisposeTemporary(); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ChangeSelPatches(int type) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "ChangeSelPatches")); - // Call the vertex type change function - ChangePatchType(patch, -1, type); - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept(GetString(IDS_TH_PATCHCHANGE)); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetRememberedPatchType(int type) -{ - if (rememberedPatch) - ChangeRememberedPatch(type); - else - ChangeSelPatches(type); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ChangeSelVerts(int type) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - BOOL holdNeeded = FALSE; - BOOL hadSelected = FALSE; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - BOOL altered = FALSE; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->vertSel.NumberSet()) - { - altered = holdNeeded = TRUE; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "ChangeSelVerts")); - // Call the vertex type change function - patch->ChangeVertType(-1, type); - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - theHold.Accept(GetString(IDS_TH_VERTCHANGE)); - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOVERTSSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static void AssignSetMatchSize(BitArray &dst, BitArray &src) -{ - int size = dst.GetSize(); - dst = src; - if (dst.GetSize() != size) - { - dst.SetSize(size, TRUE); - } -} - -void EditPatchMod::ActivateSubSelSet(TSTR &setName) -{ - MaybeFixupNamedSels(); - ModContextList mcList; - INodeTab nodes; - int index = FindSet(setName, selLevel); - if (index < 0 || !ip) - return; - - ip->GetModContexts(mcList, nodes); - - theHold.Begin(); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - patchData->BeginEdit(ip->GetTime()); - // If that set exists in this context, deal with it - GenericNamedSelSetList &sel = patchData->GetSelSet(this); - BitArray *set = sel.GetSet(setName); - if (set) - { - if (theHold.Holding()) - theHold.Put(new PatchSelRestore(patchData, this, patch)); - BitArray *psel = GetLevelSelectionSet(patch, rpatch); // Get the appropriate selection set - AssignSetMatchSize(*psel, *set); - PatchSelChanged(); - } - - patchData->UpdateChanges(patch, rpatch, FALSE); - if (patchData->tempData) - patchData->TempData(this)->Invalidate(PART_SELECT); - } - - theHold.Accept(GetString(IDS_DS_SELECT)); - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::NewSetFromCurSel(TSTR &setName) -{ - MaybeFixupNamedSels(); - - ModContextList mcList; - INodeTab nodes; - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - GenericNamedSelSetList &sel = patchData->GetSelSet(this); - BitArray *exist = sel.GetSet(setName); - switch (selLevel) - { - case EP_VERTEX: - if (exist) - { - *exist = patch->vertSel; - } else - { - patchData->vselSet.AppendSet(patch->vertSel, 0, setName); - } - break; - - case EP_PATCH: - if (exist) - { - *exist = patch->patchSel; - } else - { - patchData->pselSet.AppendSet(patch->patchSel, 0, setName); - } - break; - - case EP_EDGE: - if (exist) - { - *exist = patch->edgeSel; - } else - { - patchData->eselSet.AppendSet(patch->edgeSel, 0, setName); - } - break; - } - } - - int index = FindSet(setName, selLevel); - if (index < 0) - AddSet(setName, selLevel); - nodes.DisposeTemporary(); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::RemoveSubSelSet(TSTR &setName) -{ - MaybeFixupNamedSels(); - - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - patchData->BeginEdit(ip->GetTime()); - GenericNamedSelSetList &sel = patchData->GetSelSet(this); - sel.RemoveSet(setName); - } - // Remove the modifier's entry - RemoveSet(setName, selLevel); - ip->ClearCurNamedSelSet(); - SetupNamedSelDropDown(); - nodes.DisposeTemporary(); -} \ No newline at end of file diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Subdivide.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Subdivide.cpp deleted file mode 100644 index e3a85f893..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Subdivide.cpp +++ /dev/null @@ -1,1470 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 -#define SUBDIV_EDGES 0 -#define SUBDIV_PATCHES 1 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -class NewEdge -{ -public: - int oldEdge; - int v1; - int vec12; - int vec21; - int v2; - int vec23; - int vec32; - int v3; - NewEdge() { oldEdge = v1 = v2 = v3 = vec12 = vec21 = vec23 = vec32 = -1; } -}; - -class PatchDivInfo -{ -public: - BOOL div02; - BOOL div13; - PatchDivInfo() { div02 = div13 = FALSE; } -}; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void DeletePatchParts(PatchMesh *patch, RPatchMesh *rpatch, BitArray &delVerts, BitArray &delPatches); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// Handy fractional constants -#define _1_16 0.0625f -#define _1_8 0.125f -#define _3_16 0.1875f -#define _1_4 0.25f - -static Point3 GetOuterInside(Point3 a, Point3 b, Point3 c, Point3 d, Point3 e, Point3 f) -{ - return a * _1_8 + b * _1_8 + c * _1_4 + d * _1_8 + e * _1_4 + f * _1_8; -} - -// -------------------------------------------------------------------------------- - -static Point3 GetNewEdgeVec(Point3 a, Point3 b, Point3 c, Point3 d, Point3 e, Point3 f, Point3 g, Point3 h) -{ - return a * _1_16 + b * _1_16 + c * _3_16 + d * _3_16 + e * _1_16 + f * _1_16 + g * _3_16 + h * _3_16; -} - -// -------------------------------------------------------------------------------- - -static Point3 GetCentralInterior(Point3 a, Point3 b, Point3 c, Point3 d, Point3 e, Point3 f, Point3 g, Point3 h, Point3 i, Point3 j) -{ - return a * _1_16 + b * _1_8 + c * _1_16 + d * _1_16 + e * _1_16 + f * _1_16 + g * _1_16 + h * _3_16 + i * _3_16 + j * _1_8; -} - -// -------------------------------------------------------------------------------- - -static Point3 GetNewEdgeCenter(Point3 a, Point3 b, Point3 c, Point3 d, Point3 e, Point3 f, Point3 g, Point3 h, Point3 i) -{ - return a * _1_16 + b * _1_8 + c * _1_16 + d * _1_8 + e * _1_16 + f * _1_16 + g * _1_4 + h * _1_8 + i * _1_8; -} - -// -------------------------------------------------------------------------------- - -static Point3 GetOuterOutside(Point3 a, Point3 b, Point3 c, Point3 d) -{ - return a * _1_4 + b * _1_4 + c * _1_4 + d * _1_4; -} - -// -------------------------------------------------------------------------------- - -static Point3 InterpCenter(PatchMesh *patch, int index, int e1, int i1, int i2, int e2, Point3 *v1 = NULL, Point3 *v2 = NULL, Point3 *v3 = NULL, Point3 *v4 = NULL) -{ - PatchVec *v = patch->vecs; - Patch &p = patch->patches[index]; - Point3 e1i1 =(v[p.vec[e1]].p + v[p.interior[i1]].p) / 2.0f; - Point3 i1i2 =(v[p.interior[i1]].p + v[p.interior[i2]].p) / 2.0f; - Point3 i2e2 =(v[p.interior[i2]].p + v[p.vec[e2]].p) / 2.0f; - Point3 a =(e1i1 + i1i2) / 2.0f; - Point3 b =(i1i2 + i2e2) / 2.0f; - if (v1) - *v1 = e1i1; - if (v2) - *v2 = a; - if (v3) - *v3 = b; - if (v4) - *v4 = i2e2; - return (a + b) / 2.0f; -} - -// -------------------------------------------------------------------------------- - -static Point3 InterpCenter(PatchMesh *patch, int index, int e1, int i1, int e2, Point3 *v1 = NULL, Point3 *v2 = NULL) -{ - PatchVec *v = patch->vecs; - Patch &p = patch->patches[index]; - Point3 a =(p.aux[e1] + v[p.interior[i1]].p) / 2.0f; - Point3 b =(v[p.interior[i1]].p + p.aux[e2]) / 2.0f; - if (v1) - *v1 = a; - if (v2) - *v2 = b; - return (a + b) / 2.0f; -} - -// -------------------------------------------------------------------------------- - -static Point3 InterpCenter(Point3 e1, Point3 i1, Point3 i2, Point3 e2, Point3 *v1 = NULL, Point3 *v2 = NULL, Point3 *v3 = NULL, Point3 *v4 = NULL) -{ - Point3 e1i1 =(e1 + i1) / 2.0f; - Point3 i1i2 =(i1 + i2) / 2.0f; - Point3 i2e2 =(i2 + e2) / 2.0f; - Point3 a =(e1i1 + i1i2) / 2.0f; - Point3 b =(i1i2 + i2e2) / 2.0f; - if (v1) - *v1 = e1i1; - if (v2) - *v2 = a; - if (v3) - *v3 = b; - if (v4) - *v4 = i2e2; - return (a + b) / 2.0f; -} - -// -------------------------------------------------------------------------------- - -static Point3 InterpCenter(Point3 e1, Point3 i1, Point3 e2, Point3 *v1 = NULL, Point3 *v2 = NULL) -{ - Point3 a =(e1 + i1) / 2.0f; - Point3 b =(i1 + e2) / 2.0f; - if (v1) - *v1 = a; - if (v2) - *v2 = b; - return (a + b) / 2.0f; -} - -// -------------------------------------------------------------------------------- - -static Point3 InterpEdge(PatchMesh *patch, int index, float pct, int c1, int e1, int e2, int c2, Point3 *v1 = NULL, Point3 *v2 = NULL, Point3 *v3 = NULL, Point3 *v4 = NULL) -{ - PatchVert *vert = patch->verts; - PatchVec *v = patch->vecs; - Patch &p = patch->patches[index]; - Point3 pv1 = vert[p.v[c1]].p; - Point3 pv2 = vert[p.v[c2]].p; - Point3 pe1 = v[p.vec[e1]].p; - Point3 pe2 = v[p.vec[e2]].p; - Point3 v1e1 = pv1 +(pe1 - pv1) * pct; - Point3 e1e2 = pe1 +(pe2 - pe1) * pct; - Point3 e2v2 = pe2 +(pv2 - pe2) * pct; - Point3 a = v1e1 +(e1e2 - v1e1) * pct; - Point3 b = e1e2 +(e2v2 - e1e2) * pct; - if (v1) - *v1 = v1e1; - if (v2) - *v2 = a; - if (v3) - *v3 = b; - if (v4) - *v4 = e2v2; - return a +(b - a) * pct; -} - -// -------------------------------------------------------------------------------- - -static void FindNewTriEdge(PatchMesh *patch, Patch &p, int vert, Point3 &e1, Point3 &e2, Point3 &e3) -{ - int a = vert; - int b = vert * 3; - int c = b + 1; - int d =(b + 8) % 9; - int e =(b + 7) % 9; - int f =(b + 4) % 9; - int g = vert; - int h =(g + 1) % 3; - int i =(g + 2) % 3; - int j =(b + 6) % 9; - int k =(b + 5) % 9; - int l = b + 2; - int m =(b + 3) % 9; - Point3 pa = patch->verts[p.v[a]].p; - Point3 pb = p.aux[b]; - Point3 pc = p.aux[c]; - Point3 pd = p.aux[d]; - Point3 pe = p.aux[e]; - Point3 pf = p.aux[f]; - Point3 pg = patch->vecs[p.interior[g]].p; - Point3 ph = patch->vecs[p.interior[h]].p; - Point3 pi = patch->vecs[p.interior[i]].p; - Point3 pj = p.aux[j]; - Point3 pk = p.aux[k]; - Point3 pl = p.aux[l]; - Point3 pm = p.aux[m]; - e1 = GetNewEdgeVec(pa, pb, pd, pe, pj, pk, pg, pi); - e2 = GetNewEdgeCenter(pa, pb, pc, pd, pe, pf, pg, ph, pi); - e3 = GetNewEdgeVec(pa, pd, pb, pc, pl, pm, pg, ph); -} - -// -------------------------------------------------------------------------------- - -static void FindNewOuterTriInteriors(PatchMesh *patch, Patch &p, int vert, Point3 &i1, Point3 &i2, Point3 &i3) -{ - int a = vert; - int b = vert * 3; - int c =(b + 8) % 9; - int d =(b + 7) % 9; - int e = vert; - int f =(e + 2) % 3; - int g = b + 1; - int h =(e + 1) % 3; - Point3 pa = patch->verts[p.v[a]].p; - Point3 pb = p.aux[b]; - Point3 pc = p.aux[c]; - Point3 pd = p.aux[d]; - Point3 pe = patch->vecs[p.interior[e]].p; - Point3 pf = patch->vecs[p.interior[f]].p; - Point3 pg = p.aux[g]; - Point3 ph = patch->vecs[p.interior[h]].p; - i1 = GetOuterOutside(pa, pb, pc, pe); - i2 = GetOuterInside(pa, pc, pb, pg, pe, ph); - i3 = GetOuterInside(pa, pb, pc, pd, pe, pf); -} - -// -------------------------------------------------------------------------------- - -static void FindNewInnerTriInteriors(PatchMesh *patch, Patch &p, Point3 &i1, Point3 &i2, Point3 &i3) -{ - Point3 pa = p.aux[0]; - Point3 pb = p.aux[1]; - Point3 pc = p.aux[2]; - Point3 pd = p.aux[3]; - Point3 pe = p.aux[4]; - Point3 pf = p.aux[5]; - Point3 pg = p.aux[6]; - Point3 ph = p.aux[7]; - Point3 pi = p.aux[8]; - Point3 pj = patch->vecs[p.interior[0]].p; - Point3 pk = patch->vecs[p.interior[1]].p; - Point3 pl = patch->vecs[p.interior[2]].p; - i1 = GetCentralInterior(pa, pb, pc, pi, ph, pe, pd, pj, pk, pl); - i2 = GetCentralInterior(pd, pe, pf, pc, pb, ph, pg, pk, pl, pj); - i3 = GetCentralInterior(pg, ph, pi, pf, pe, pb, pa, pl, pj, pk); -} - -// This is a first shot at a degree reducer which turns a degree-4 curve into a degree-3 curve, -// it probably won't give very good results unless the curve was converted from degree 3 to degree 4 -// returns just the vector points -static void CubicFromQuartic(Point3 q1, Point3 q2, Point3 q3, Point3 q4, Point3 q5, Point3 &c2, Point3 &c3) -{ - c2 = q1 +(q2 - q1) * 1.33333f; - c3 = q5 +(q4 - q5) * 1.33333f; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void SubdividePatch(int type, BOOL propagate, PatchMesh *patch, RPatchMesh *rpatch) -{ - int i; - - int verts = patch->getNumVerts(); - int vecs = patch->getNumVecs(); - int edges = patch->getNumEdges(); - int patches = patch->getNumPatches(); - - // Make an edge flags array to note which edges must be processed - BitArray eDiv(edges); - // Make a patch flags array to note which patches must be processed - BitArray pDiv(patches); - // Make an edge flags array to note which edges have been done - BitArray eDone(edges); - eDone.ClearAll(); - // Make a patch flags array to note which patches have been done - BitArray pDone(patches); - pDone.ClearAll(); - - switch (type) - { - case SUBDIV_EDGES: - if (!patch->edgeSel.NumberSet()) - return; // Nothing to do! - eDiv = patch->edgeSel; - pDiv.ClearAll(); - break; - case SUBDIV_PATCHES: - if (!patch->patchSel.NumberSet()) - return; // Nothing to do! - eDiv.ClearAll(); - pDiv = patch->patchSel; - for (i = 0; i < patches; ++i) - { - if (pDiv[i]) - { - Patch &p = patch->patches[i]; - // Mark all edges for division - eDiv.Set(p.edge[0]); - eDiv.Set(p.edge[1]); - eDiv.Set(p.edge[2]); - if (p.type == PATCH_QUAD) - eDiv.Set(p.edge[3]); - } - } - // If not propagating, mark the edges as done - if (!propagate) - eDone = eDiv; - break; - } - - BOOL more = TRUE; - while (more) - { - BOOL altered = FALSE; - for (i = 0; i < edges; ++i) - { - if (eDiv[i] && !eDone[i]) - { - PatchEdge &e = patch->edges[i]; -#if (MAX_RELEASE < 4000) - pDiv.Set(e.patch1); - if (e.patch2 >= 0) - pDiv.Set(e.patch2); -#else // (MAX_RELEASE < 4000) - pDiv.Set(e.patches[0]); - if (e.patches[1] >= 0) - pDiv.Set(e.patches[1]); -#endif // (MAX_RELEASE < 4000) - eDone.Set(i); - altered = TRUE; - } - } - if (altered && propagate) - { - for (i = 0; i < patches; ++i) - { - if (pDiv[i] && !pDone[i]) - { - Patch &p = patch->patches[i]; - if (p.type == PATCH_TRI) - { - // Triangle -- tag all edges for division - eDiv.Set(p.edge[0]); - eDiv.Set(p.edge[1]); - eDiv.Set(p.edge[2]); - } - else - { // Quad -- Tag edges opposite tagged edges - if (eDiv[p.edge[0]]) - eDiv.Set(p.edge[2]); - if (eDiv[p.edge[1]]) - eDiv.Set(p.edge[3]); - if (eDiv[p.edge[2]]) - eDiv.Set(p.edge[0]); - if (eDiv[p.edge[3]]) - eDiv.Set(p.edge[1]); - } - pDone.Set(i); - } - } - } - else - more = FALSE; - } - - // Keep a count of the new interior vectors - int newInteriors = 0; - - // Also keep a count of the new vertices inside double-divided quads - int newCenters = 0; - - // And a count of new texture vertices - Tab < int> newTVerts; - newTVerts.SetCount(patch->getNumMaps()); - int chan; - for (chan = 0; chan < patch->getNumMaps(); ++chan) - newTVerts[chan] = 0; - - // And a count of new patches - int newPatches = 0; - - int divPatches = pDiv.NumberSet(); - PatchDivInfo *pInfo = new PatchDivInfo[divPatches]; - int pDivIx; - - // Tag the edges that are on tagged patches but aren't tagged (only happens in propagate=0) - // And set up a table with useful division info - for (i = 0, pDivIx = 0; i < patches; ++i) - { - if (pDiv[i]) - { - PatchDivInfo &pi = pInfo[pDivIx]; - Patch &p = patch->patches[i]; - if (p.type == PATCH_TRI) - { - // Triangle -- tag all edges for division - eDiv.Set(p.edge[0]); - eDiv.Set(p.edge[1]); - eDiv.Set(p.edge[2]); - newInteriors +=(6 + 12); - newPatches += 4; - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - newTVerts[chan] += 3; - } - } - else - { // Quad -- Tag edges opposite tagged edges - int divs = 0; - pi.div02 = pi.div13 = FALSE; - if (eDiv[p.edge[0]]) - { - eDiv.Set(p.edge[2]); - divs++; - pi.div02 = TRUE; - } - else - if (eDiv[p.edge[2]]) - { - eDiv.Set(p.edge[0]); - divs++; - pi.div02 = TRUE; - } - if (eDiv[p.edge[1]]) - { - eDiv.Set(p.edge[3]); - divs++; - pi.div13 = TRUE; - } - else - if (eDiv[p.edge[3]]) - { - eDiv.Set(p.edge[1]); - divs++; - pi.div13 = TRUE; - } - newPatches +=(divs == 1) ? 2 : 4; - newInteriors +=(divs == 1) ?(2 + 8) :(8 + 16); - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - { - if (divs == 2) - newTVerts[chan] += 5; - else - newTVerts[chan] += 2; - } - } - if (divs == 2) - newCenters++; - } - pDivIx++; - } - } - - // Figure out how many new verts and vecs we'll need... - int divEdges = eDiv.NumberSet(); - int newVerts = divEdges + newCenters; // 1 new vert per edge - int newVecs = divEdges * 4 + newInteriors; // 4 new vectors per edge + new interior verts - - int vert = verts; - Tab < int> tvert; - tvert.SetCount(patch->getNumMaps()); - Tab < int> tverts; - tverts.SetCount(patch->getNumMaps()); - Tab < int> tpat; - tpat.SetCount(patch->getNumMaps()); - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - tverts[chan] = tvert[chan] = patch->getNumMapVerts(chan); - tpat[chan] = patches; - } - int vec = vecs; - int pat = patches; - - // Add the new vertices - patch->setNumVerts(verts + newVerts, TRUE); - rpatch->SetNumVerts(verts + newVerts); - - // Add the new texture vertices - for (chan = 0; chan < patch->getNumMaps(); ++chan) - patch->setNumMapVerts(chan, tverts[chan] + newTVerts[chan], TRUE); - - // Add the new vectors - patch->setNumVecs(vecs + newVecs, TRUE); - - // Add the new patches - patch->setNumPatches(patches + newPatches, TRUE); - rpatch->SetNumPatches(patches + newPatches); - - // Create a new edge map - NewEdge *eMap = new NewEdge[edges]; - for (i = 0; i < edges; ++i) - { - if (eDiv[i]) - { - PatchEdge &edge = patch->edges[i]; - NewEdge &map = eMap[i]; - map.oldEdge = i; - map.v1 = edge.v1; - map.vec12 = vec++; - map.vec21 = vec++; - map.v2 = vert++; - map.vec23 = vec++; - map.vec32 = vec++; - map.v3 = edge.v2; - - // Compute the new edge vertex and vectors - Point3 v00 = patch->verts[edge.v1].p; - Point3 v10 = patch->vecs[edge.vec12].p; - Point3 v20 = patch->vecs[edge.vec21].p; - Point3 v30 = patch->verts[edge.v2].p; - Point3 v01 =(v10 + v00) / 2.0f; - Point3 v21 =(v30 + v20) / 2.0f; - Point3 v11 =(v20 + v10) / 2.0f; - Point3 v02 =(v11 + v01) / 2.0f; - Point3 v12 =(v21 + v11) / 2.0f; - Point3 v03 =(v12 + v02) / 2.0f; - - patch->verts[map.v2].p = v03; - patch->vecs[map.vec12].p = v01; - patch->vecs[map.vec21].p = v02; - patch->vecs[map.vec23].p = v12; - patch->vecs[map.vec32].p = v21; - } - } - -#ifdef DUMPING - // Dump edge map - DebugPrint("Edge map:\n"); - for (i = 0; i < edges; ++i) - { - NewEdge &e = eMap[i]; - DebugPrint("Old edge: %d New edge: %d (%d %d) %d (%d %d) %d\n", e.oldEdge, e.v1, e.vec12, e.vec21, e.v2, e.vec23, e.vec32, e.v3); - } -#endif - - // Now go and subdivide them! - - for (i = 0, pDivIx = 0; i < patches; ++i) - { - if (pDiv[i]) - { - PatchDivInfo &pi = pInfo[pDivIx]; - Patch &p = patch->patches[i]; - if (p.type == PATCH_TRI) - { - // Need to create four new patches - int newev1 = vec++; // edge 0 -> edge 1 - int newev2 = vec++; // edge 1 -> edge 0 - int newev3 = vec++; // edge 1 -> edge 2 - int newev4 = vec++; // edge 2 -> edge 1 - int newev5 = vec++; // edge 2 -> edge 0 - int newev6 = vec++; // edge 0 -> edge 2 - - // Get pointers to new edges - NewEdge &e0 = eMap[p.edge[0]]; - NewEdge &e1 = eMap[p.edge[1]]; - NewEdge &e2 = eMap[p.edge[2]]; - - // See if edges need to be flopped - BOOL flop0 =(e0.v1 == p.v[0]) ? FALSE : TRUE; - BOOL flop1 =(e1.v1 == p.v[1]) ? FALSE : TRUE; - BOOL flop2 =(e2.v1 == p.v[2]) ? FALSE : TRUE; - - // Create the four new patches - Patch &p1 = patch->patches[pat++]; - Patch &p2 = patch->patches[pat++]; - Patch &p3 = patch->patches[pat++]; - Patch &p4 = patch->patches[pat++]; - - p1.SetType(PATCH_TRI); - p1.v[0] = e0.v2; - p1.v[1] = flop1 ? e1.v3 : e1.v1; - p1.v[2] = e1.v2; - p1.vec[0] = flop0 ? e0.vec21 : e0.vec23; - p1.vec[1] = flop0 ? e0.vec12 : e0.vec32; - p1.vec[2] = flop1 ? e1.vec32 : e1.vec12; - p1.vec[3] = flop1 ? e1.vec23 : e1.vec21; - p1.vec[4] = newev2; - p1.vec[5] = newev1; - p1.interior[0] = vec++; - p1.interior[1] = vec++; - p1.interior[2] = vec++; - - p2.SetType(PATCH_TRI); - p2.v[0] = e1.v2; - p2.v[1] = flop2 ? e2.v3 : e2.v1; - p2.v[2] = e2.v2; - p2.vec[0] = flop1 ? e1.vec21 : e1.vec23; - p2.vec[1] = flop1 ? e1.vec12 : e1.vec32; - p2.vec[2] = flop2 ? e2.vec32 : e2.vec12; - p2.vec[3] = flop2 ? e2.vec23 : e2.vec21; - p2.vec[4] = newev4; - p2.vec[5] = newev3; - p2.interior[0] = vec++; - p2.interior[1] = vec++; - p2.interior[2] = vec++; - - p3.SetType(PATCH_TRI); - p3.v[0] = e0.v2; - p3.v[1] = e1.v2; - p3.v[2] = e2.v2; - p3.vec[0] = newev1; - p3.vec[1] = newev2; - p3.vec[2] = newev3; - p3.vec[3] = newev4; - p3.vec[4] = newev5; - p3.vec[5] = newev6; - p3.interior[0] = vec++; - p3.interior[1] = vec++; - p3.interior[2] = vec++; - - p4.SetType(PATCH_TRI); - p4.v[0] = flop0 ? e0.v3 : e0.v1; - p4.v[1] = e0.v2; - p4.v[2] = e2.v2; - p4.vec[0] = flop0 ? e0.vec32 : e0.vec12; - p4.vec[1] = flop0 ? e0.vec23 : e0.vec21; - p4.vec[2] = newev6; - p4.vec[3] = newev5; - p4.vec[4] = flop2 ? e2.vec21 : e2.vec23; - p4.vec[5] = flop2 ? e2.vec12 : e2.vec32; - p4.interior[0] = vec++; - p4.interior[1] = vec++; - p4.interior[2] = vec++; - - // If this patch is textured, create three new texture verts for it - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - { - int tva = tvert[chan]++; - int tvb = tvert[chan]++; - int tvc = tvert[chan]++; - TVPatch &tp = patch->tvPatches[chan][i]; - TVPatch &tp1 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp2 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp3 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp4 = patch->tvPatches[chan][tpat[chan]++]; - tp1.tv[0] = tva; - tp1.tv[1] = tp.tv[1]; - tp1.tv[2] = tvb; - tp2.tv[0] = tvb; - tp2.tv[1] = tp.tv[2]; - tp2.tv[2] = tvc; - tp3.tv[0] = tva; - tp3.tv[1] = tvb; - tp3.tv[2] = tvc; - tp4.tv[0] = tp.tv[0]; - tp4.tv[1] = tva; - tp4.tv[2] = tvc; -#if MAX_RELEASE <= 3100 - patch->tVerts[chan][tva] =(patch->tVerts[chan][tp.tv[0]] + patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =(patch->tVerts[chan][tp.tv[1]] + patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvc] =(patch->tVerts[chan][tp.tv[2]] + patch->tVerts[chan][tp.tv[0]]) / 2.0f; -#else - patch->tVerts[chan][tva] =((UVVert&)patch->tVerts[chan][tp.tv[0]] + (UVVert&)patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =((UVVert&)patch->tVerts[chan][tp.tv[1]] + (UVVert&)patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvc] =((UVVert&)patch->tVerts[chan][tp.tv[2]] + (UVVert&)patch->tVerts[chan][tp.tv[0]]) / 2.0f; -#endif - } - } - - // Now we'll compute the vectors for the three new edges being created inside this patch - // These come back as degree 4's, and we need to reduce them to degree 3 for use in our - // edges -- This is a bit risky because we aren't guaranteed a perfect fit. - Point3 i1, i2, i3, i4, i5, i6, i7, i8, i9; - FindNewTriEdge(patch, p, 0, i1, i2, i3); - FindNewTriEdge(patch, p, 1, i4, i5, i6); - FindNewTriEdge(patch, p, 2, i7, i8, i9); - Point3 v1, v2, v3, v4, v5, v6; - CubicFromQuartic(patch->verts[e2.v2].p, i1, i2, i3, patch->verts[e0.v2].p, v1, v2); - CubicFromQuartic(patch->verts[e0.v2].p, i4, i5, i6, patch->verts[e1.v2].p, v3, v4); - CubicFromQuartic(patch->verts[e1.v2].p, i7, i8, i9, patch->verts[e2.v2].p, v5, v6); - patch->vecs[newev1].p = v3; - patch->vecs[newev2].p = v4; - patch->vecs[newev3].p = v5; - patch->vecs[newev4].p = v6; - patch->vecs[newev5].p = v1; - patch->vecs[newev6].p = v2; - // Now compute the interior vectors for the new patches if the one we're dividing isn't automatic - // Must compute vectors for this patch's divided edges - if (!(p.flags & PATCH_AUTO)) - { - p1.flags &= ~PATCH_AUTO; - p2.flags &= ~PATCH_AUTO; - p3.flags &= ~PATCH_AUTO; - p4.flags &= ~PATCH_AUTO; - - FindNewOuterTriInteriors(patch, p, 1, patch->vecs[p1.interior[1]].p, patch->vecs[p1.interior[2]].p, patch->vecs[p1.interior[0]].p); - FindNewOuterTriInteriors(patch, p, 2, patch->vecs[p2.interior[1]].p, patch->vecs[p2.interior[2]].p, patch->vecs[p2.interior[0]].p); - FindNewInnerTriInteriors(patch, p, patch->vecs[p3.interior[0]].p, patch->vecs[p3.interior[1]].p, patch->vecs[p3.interior[2]].p); - FindNewOuterTriInteriors(patch, p, 0, patch->vecs[p4.interior[0]].p, patch->vecs[p4.interior[1]].p, patch->vecs[p4.interior[2]].p); - } - } - else - { // Quad patch - // Check division flags to see how many patches we'll need - if (pi.div02 && pi.div13) - { - // Divide both ways - // Need a new central vertex - Point3 newc = p.interp(patch, 0.5f, 0.5f); - patch->verts[vert].p = newc; - int center = vert++; - - // Need to create four new patches - int newev1 = vec++; // edge 0 -> center - int newev2 = vec++; // center -> edge 0 - int newev3 = vec++; // edge 1 -> center - int newev4 = vec++; // center -> edge 1 - int newev5 = vec++; // edge 2 -> center - int newev6 = vec++; // center -> edge 2 - int newev7 = vec++; // edge 3 -> center - int newev8 = vec++; // center -> edge 3 - - // Get pointers to new edges - NewEdge &e0 = eMap[p.edge[0]]; - NewEdge &e1 = eMap[p.edge[1]]; - NewEdge &e2 = eMap[p.edge[2]]; - NewEdge &e3 = eMap[p.edge[3]]; - - // See if edges need to be flopped - BOOL flop0 =(e0.v1 == p.v[0]) ? FALSE : TRUE; - BOOL flop1 =(e1.v1 == p.v[1]) ? FALSE : TRUE; - BOOL flop2 =(e2.v1 == p.v[2]) ? FALSE : TRUE; - BOOL flop3 =(e3.v1 == p.v[3]) ? FALSE : TRUE; - - // Compute the new vectors for the dividing line - Point3 w1, w2, w3, w4; - w1 = InterpCenter(patch, i, 7, 0, 1, 2); - w2 = InterpCenter(patch, i, 6, 3, 2, 3); - w3 = InterpCenter(patch, i, 1, 1, 2, 4); - w4 = InterpCenter(patch, i, 0, 0, 3, 5); - Point3 new0 = patch->verts[e0.v2].p; - Point3 new1 = patch->verts[e1.v2].p; - Point3 new2 = patch->verts[e2.v2].p; - Point3 new3 = patch->verts[e3.v2].p; - InterpCenter(new0, w1, w2, new2, &patch->vecs[newev1].p, &patch->vecs[newev2].p, &patch->vecs[newev6].p, &patch->vecs[newev5].p); - InterpCenter(new1, w3, w4, new3, &patch->vecs[newev3].p, &patch->vecs[newev4].p, &patch->vecs[newev8].p, &patch->vecs[newev7].p); - - // Create the four new patches - Patch &p1 = patch->patches[pat++]; - Patch &p2 = patch->patches[pat++]; - Patch &p3 = patch->patches[pat++]; - Patch &p4 = patch->patches[pat++]; - - p1.SetType(PATCH_QUAD); - p1.v[0] = p.v[0]; - p1.v[1] = e0.v2; - p1.v[2] = center; - p1.v[3] = e3.v2; - p1.vec[0] = flop0 ? e0.vec32 : e0.vec12; - p1.vec[1] = flop0 ? e0.vec23 : e0.vec21; - p1.vec[2] = newev1; - p1.vec[3] = newev2; - p1.vec[4] = newev8; - p1.vec[5] = newev7; - p1.vec[6] = flop3 ? e3.vec21 : e3.vec23; - p1.vec[7] = flop3 ? e3.vec12 : e3.vec32; - p1.interior[0] = vec++; - p1.interior[1] = vec++; - p1.interior[2] = vec++; - p1.interior[3] = vec++; - -#define RPO_REMAR_V2(a,b,c) (a) - p2.SetType(PATCH_QUAD); - p2.v[RPO_REMAR_V2(0,1,4)] = p.v[1]; - p2.v[RPO_REMAR_V2(1,1,4)] = e1.v2; - p2.v[RPO_REMAR_V2(2,1,4)] = center; - p2.v[RPO_REMAR_V2(3,1,4)] = e0.v2; - p2.vec[RPO_REMAR_V2(0,1,8)] = flop1 ? e1.vec32 : e1.vec12; - p2.vec[RPO_REMAR_V2(1,1,8)] = flop1 ? e1.vec23 : e1.vec21; - p2.vec[RPO_REMAR_V2(2,1,8)] = newev3; - p2.vec[RPO_REMAR_V2(3,1,8)] = newev4; - p2.vec[RPO_REMAR_V2(4,1,8)] = newev2; - p2.vec[RPO_REMAR_V2(5,1,8)] = newev1; - p2.vec[RPO_REMAR_V2(6,1,8)] = flop0 ? e0.vec21 : e0.vec23; - p2.vec[RPO_REMAR_V2(7,1,8)] = flop0 ? e0.vec12 : e0.vec32; - p2.interior[RPO_REMAR_V2(0,1,4)] = vec++; - p2.interior[RPO_REMAR_V2(1,1,4)] = vec++; - p2.interior[RPO_REMAR_V2(2,1,4)] = vec++; - p2.interior[RPO_REMAR_V2(3,1,4)] = vec++; - - p3.SetType(PATCH_QUAD); - p3.v[RPO_REMAR_V2(0,2,4)] = p.v[2]; - p3.v[RPO_REMAR_V2(1,2,4)] = e2.v2; - p3.v[RPO_REMAR_V2(2,2,4)] = center; - p3.v[RPO_REMAR_V2(3,2,4)] = e1.v2; - p3.vec[RPO_REMAR_V2(0,2,8)] = flop2 ? e2.vec32 : e2.vec12; - p3.vec[RPO_REMAR_V2(1,2,8)] = flop2 ? e2.vec23 : e2.vec21; - p3.vec[RPO_REMAR_V2(2,2,8)] = newev5; - p3.vec[RPO_REMAR_V2(3,2,8)] = newev6; - p3.vec[RPO_REMAR_V2(4,2,8)] = newev4; - p3.vec[RPO_REMAR_V2(5,2,8)] = newev3; - p3.vec[RPO_REMAR_V2(6,2,8)] = flop1 ? e1.vec21 : e1.vec23; - p3.vec[RPO_REMAR_V2(7,2,8)] = flop1 ? e1.vec12 : e1.vec32; - p3.interior[RPO_REMAR_V2(0,2,4)] = vec++; - p3.interior[RPO_REMAR_V2(1,2,4)] = vec++; - p3.interior[RPO_REMAR_V2(2,2,4)] = vec++; - p3.interior[RPO_REMAR_V2(3,2,4)] = vec++; - - p4.SetType(PATCH_QUAD); - p4.v[RPO_REMAR_V2(0,3,4)] = p.v[3]; - p4.v[RPO_REMAR_V2(1,3,4)] = e3.v2; - p4.v[RPO_REMAR_V2(2,3,4)] = center; - p4.v[RPO_REMAR_V2(3,3,4)] = e2.v2; - p4.vec[RPO_REMAR_V2(0,3,8)] = flop3 ? e3.vec32 : e3.vec12; - p4.vec[RPO_REMAR_V2(1,3,8)] = flop3 ? e3.vec23 : e3.vec21; - p4.vec[RPO_REMAR_V2(2,3,8)] = newev7; - p4.vec[RPO_REMAR_V2(3,3,8)] = newev8; - p4.vec[RPO_REMAR_V2(4,3,8)] = newev6; - p4.vec[RPO_REMAR_V2(5,3,8)] = newev5; - p4.vec[RPO_REMAR_V2(6,3,8)] = flop2 ? e2.vec21 : e2.vec23; - p4.vec[RPO_REMAR_V2(7,3,8)] = flop2 ? e2.vec12 : e2.vec32; - p4.interior[RPO_REMAR_V2(0,3,4)] = vec++; - p4.interior[RPO_REMAR_V2(1,3,4)] = vec++; - p4.interior[RPO_REMAR_V2(2,3,4)] = vec++; - p4.interior[RPO_REMAR_V2(3,3,4)] = vec++; - - // If this patch is textured, create five new texture verts for it - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - { - int tva = tvert[chan]++; - int tvb = tvert[chan]++; - int tvc = tvert[chan]++; - int tvd = tvert[chan]++; - int tve = tvert[chan]++; - TVPatch &tp = patch->tvPatches[chan][i]; - TVPatch &tp1 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp2 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp3 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp4 = patch->tvPatches[chan][tpat[chan]++]; - tp1.tv[0] = tp.tv[0]; - tp1.tv[1] = tva; - tp1.tv[2] = tve; - tp1.tv[3] = tvd; - tp2.tv[RPO_REMAR_V2(0,1,4)] = tp.tv[1]; - tp2.tv[RPO_REMAR_V2(1,1,4)] = tvb; - tp2.tv[RPO_REMAR_V2(2,1,4)] = tve; - tp2.tv[RPO_REMAR_V2(3,1,4)] = tva; - tp3.tv[RPO_REMAR_V2(0,2,4)] = tp.tv[2]; - tp3.tv[RPO_REMAR_V2(1,2,4)] = tvc; - tp3.tv[RPO_REMAR_V2(2,2,4)] = tve; - tp3.tv[RPO_REMAR_V2(3,2,4)] = tvb; - tp4.tv[RPO_REMAR_V2(0,3,4)] = tp.tv[3]; - tp4.tv[RPO_REMAR_V2(1,3,4)] = tvd; - tp4.tv[RPO_REMAR_V2(2,3,4)] = tve; - tp4.tv[RPO_REMAR_V2(3,3,4)] = tvc; -#if MAX_RELEASE <= 3100 - patch->tVerts[chan][tva] =(patch->tVerts[chan][tp.tv[0]] + patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =(patch->tVerts[chan][tp.tv[1]] + patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvc] =(patch->tVerts[chan][tp.tv[3]] + patch->tVerts[chan][tp.tv[0]]) / 2.0f; - patch->tVerts[chan][tve] =(patch->tVerts[chan][tp.tv[0]] + patch->tVerts[chan][tp.tv[1]] + patch->tVerts[chan][tp.tv[2]] + patch->tVerts[chan][tp.tv[3]]) / 4.0f; -#else - patch->tVerts[chan][tva] =((UVVert&)patch->tVerts[chan][tp.tv[0]] + (UVVert&)patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =((UVVert&)patch->tVerts[chan][tp.tv[1]] + (UVVert&)patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvc] =((UVVert&)patch->tVerts[chan][tp.tv[3]] + (UVVert&)patch->tVerts[chan][tp.tv[0]]) / 2.0f; - patch->tVerts[chan][tve] =((UVVert&)patch->tVerts[chan][tp.tv[0]] + (UVVert&)patch->tVerts[chan][tp.tv[1]] + patch->tVerts[chan][tp.tv[2]] + patch->tVerts[chan][tp.tv[3]]) / 4.0f; -#endif - } - } - - // If it's not an auto patch, compute the new interior points - if (!(p.flags & PATCH_AUTO)) - { - p1.flags &= ~PATCH_AUTO; - p2.flags &= ~PATCH_AUTO; - p3.flags &= ~PATCH_AUTO; - p4.flags &= ~PATCH_AUTO; - - Point3 a, b, c, d; - Point3 a1, b1, c1, d1; - Point3 a2, b2, c2, d2; - Point3 a3, b3, c3, d3; - Point3 a4, b4, c4, d4; - InterpEdge(patch, i, 0.5f, 0, 0, 1, 1, &a1, &b1, &c1, &d1); - InterpCenter(patch, i, 7, 0, 1, 2, &a2, &b2, &c2, &d2); - InterpCenter(patch, i, 6, 3, 2, 3, &a3, &b3, &c3, &d3); - InterpEdge(patch, i, 0.5f, 3, 5, 4, 2, &a4, &b4, &c4, &d4); - - InterpCenter(a1, a2, a3, a4, &a, &b, &c, &d); - patch->vecs[p1.interior[0]].p = a; - patch->vecs[p1.interior[3]].p = b; - patch->vecs[p4.interior[1]].p = c; - patch->vecs[p4.interior[0]].p = d; - InterpCenter(b1, b2, b3, b4, &a, &b, &c, &d); - patch->vecs[p1.interior[1]].p = a; - patch->vecs[p1.interior[2]].p = b; - patch->vecs[p4.interior[2]].p = c; - patch->vecs[p4.interior[3]].p = d; - InterpCenter(c1, c2, c3, c4, &a, &b, &c, &d); - patch->vecs[p2.interior[3]].p = a; - patch->vecs[p2.interior[2]].p = b; - patch->vecs[p3.interior[2]].p = c; - patch->vecs[p3.interior[1]].p = d; - InterpCenter(d1, d2, d3, d4, &a, &b, &c, &d); - patch->vecs[p2.interior[0]].p = a; - patch->vecs[p2.interior[1]].p = b; - patch->vecs[p3.interior[3]].p = c; - patch->vecs[p3.interior[0]].p = d; - } - - // Subdivide both ways the rpatch - rpatch->Subdivide (i, e0.v2, e1.v2, e2.v2, e3.v2, center, pat-4, *patch); - } - else - if (pi.div02) - { - // Divide edges 0 & 2 - // Need to create two new patches - // Compute new edge vectors between new edge verts - int newev1 = vec++; // edge 0 -> edge 2 - int newev2 = vec++; // edge 2 -> edge 0 - - // Get pointers to new edges - NewEdge &e0 = eMap[p.edge[0]]; - NewEdge &e2 = eMap[p.edge[2]]; - - // See if edges need to be flopped - BOOL flop0 =(e0.v1 == p.v[0]) ? FALSE : TRUE; - BOOL flop2 =(e2.v1 == p.v[2]) ? FALSE : TRUE; - - // Compute the new vectors for the dividing line - - patch->vecs[newev1].p = InterpCenter(patch, i, 7, 0, 1, 2); - patch->vecs[newev2].p = InterpCenter(patch, i, 6, 3, 2, 3); - - // Create the two new patches - Patch &p1 = patch->patches[pat++]; - Patch &p2 = patch->patches[pat++]; - - p1.SetType(PATCH_QUAD); - p1.v[0] = flop0 ? e0.v3 : e0.v1; - p1.v[1] = e0.v2; - p1.v[2] = e2.v2; - p1.v[3] = flop2 ? e2.v1 : e2.v3; - p1.vec[0] = flop0 ? e0.vec32 : e0.vec12; - p1.vec[1] = flop0 ? e0.vec23 : e0.vec21; - p1.vec[2] = newev1; - p1.vec[3] = newev2; - p1.vec[4] = flop2 ? e2.vec21 : e2.vec23; - p1.vec[5] = flop2 ? e2.vec12 : e2.vec32; - p1.vec[6] = p.vec[6]; - p1.vec[7] = p.vec[7]; - p1.interior[0] = vec++; - p1.interior[1] = vec++; - p1.interior[2] = vec++; - p1.interior[3] = vec++; - - p2.SetType(PATCH_QUAD); - p2.v[0] = e0.v2; - p2.v[1] = flop0 ? e0.v1 : e0.v3; - p2.v[2] = flop2 ? e2.v3 : e2.v1; - p2.v[3] = e2.v2; - p2.vec[0] = flop0 ? e0.vec21 : e0.vec23; - p2.vec[1] = flop0 ? e0.vec12 : e0.vec32; - p2.vec[2] = p.vec[2]; - p2.vec[3] = p.vec[3]; - p2.vec[4] = flop2 ? e2.vec32 : e2.vec12; - p2.vec[5] = flop2 ? e2.vec23 : e2.vec21; - p2.vec[6] = newev2; - p2.vec[7] = newev1; - p2.interior[0] = vec++; - p2.interior[1] = vec++; - p2.interior[2] = vec++; - p2.interior[3] = vec++; - - // If this patch is textured, create two new texture verts for it - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - { - int tva = tvert[chan]++; - int tvb = tvert[chan]++; - TVPatch &tp = patch->tvPatches[chan][i]; - TVPatch &tp1 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp2 = patch->tvPatches[chan][tpat[chan]++]; - tp1.tv[0] = tp.tv[0]; - tp1.tv[1] = tva; - tp1.tv[2] = tvb; - tp1.tv[3] = tp.tv[3]; - tp2.tv[0] = tva; - tp2.tv[1] = tp.tv[1]; - tp2.tv[2] = tp.tv[2]; - tp2.tv[3] = tvb; -#if MAX_RELEASE <= 3100 - patch->tVerts[chan][tva] =(patch->tVerts[chan][tp.tv[0]] + patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =(patch->tVerts[chan][tp.tv[2]] + patch->tVerts[chan][tp.tv[3]]) / 2.0f; -#else - patch->tVerts[chan][tva] =((UVVert&)patch->tVerts[chan][tp.tv[0]] + (UVVert&)patch->tVerts[chan][tp.tv[1]]) / 2.0f; - patch->tVerts[chan][tvb] =((UVVert&)patch->tVerts[chan][tp.tv[2]] + (UVVert&)patch->tVerts[chan][tp.tv[3]]) / 2.0f; -#endif - } - } - - // If it's not an auto patch, compute the new interior points - if (!(p.flags & PATCH_AUTO)) - { - p1.flags &= ~PATCH_AUTO; - p2.flags &= ~PATCH_AUTO; - - Point3 a, b, c, d; - InterpCenter(patch, i, 7, 0, 1, 2, &a, &b, &c, &d); - patch->vecs[p1.interior[0]].p = a; - patch->vecs[p1.interior[1]].p = b; - patch->vecs[p2.interior[0]].p = c; - patch->vecs[p2.interior[1]].p = d; - InterpCenter(patch, i, 6, 3, 2, 3, &a, &b, &c, &d); - patch->vecs[p1.interior[3]].p = a; - patch->vecs[p1.interior[2]].p = b; - patch->vecs[p2.interior[3]].p = c; - patch->vecs[p2.interior[2]].p = d; - } - - // Subdivide edge 0 and 2 - rpatch->SubdivideV (i, p1.v[1], p2.v[0], pat-2, *patch); - } - else - { // Divide edges 1 & 3 - // Need to create two new patches - // Compute new edge vectors between new edge verts - int newev1 = vec++; // edge 1 -> edge 3 - int newev2 = vec++; // edge 3 -> edge 1 - - // Get pointers to new edges - NewEdge &e1 = eMap[p.edge[1]]; - NewEdge &e3 = eMap[p.edge[3]]; - - // See if edges need to be flopped - BOOL flop1 =(e1.v1 == p.v[1]) ? FALSE : TRUE; - BOOL flop3 =(e3.v1 == p.v[3]) ? FALSE : TRUE; - - // Compute the new vectors for the dividing line - patch->vecs[newev1].p = InterpCenter(patch, i, 1, 1, 2, 4); - patch->vecs[newev2].p = InterpCenter(patch, i, 0, 0, 3, 5); - - // Create the two new patches - Patch &p1 = patch->patches[pat++]; - Patch &p2 = patch->patches[pat++]; - -#define RPO_REMAP_V(a) (a) -#define RPO_REMAP_VEC(a) (a) - p1.SetType(PATCH_QUAD); - p1.v[RPO_REMAP_V(0)] = p.v[1]; - p1.v[RPO_REMAP_V(1)] = e1.v2; - p1.v[RPO_REMAP_V(2)] = e3.v2; - p1.v[RPO_REMAP_V(3)] = p.v[0]; - p1.vec[RPO_REMAP_VEC(0)] = flop1 ? e1.vec32 : e1.vec12; - p1.vec[RPO_REMAP_VEC(1)] = flop1 ? e1.vec23 : e1.vec21; - p1.vec[RPO_REMAP_VEC(2)] = newev1; - p1.vec[RPO_REMAP_VEC(3)] = newev2; - p1.vec[RPO_REMAP_VEC(4)] = flop3 ? e3.vec21 : e3.vec23; - p1.vec[RPO_REMAP_VEC(5)] = flop3 ? e3.vec12 : e3.vec32; - p1.vec[RPO_REMAP_VEC(6)] = p.vec[0]; - p1.vec[RPO_REMAP_VEC(7)] = p.vec[1]; - p1.interior[RPO_REMAP_V(0)] = vec++; - p1.interior[RPO_REMAP_V(1)] = vec++; - p1.interior[RPO_REMAP_V(2)] = vec++; - p1.interior[RPO_REMAP_V(3)] = vec++; - - p2.SetType(PATCH_QUAD); - p2.v[RPO_REMAP_V(0)] = e1.v2; - p2.v[RPO_REMAP_V(1)] = p.v[2]; - p2.v[RPO_REMAP_V(2)] = p.v[3]; - p2.v[RPO_REMAP_V(3)] = e3.v2; - p2.vec[RPO_REMAP_VEC(0)] = flop1 ? e1.vec21 : e1.vec23; - p2.vec[RPO_REMAP_VEC(1)] = flop1 ? e1.vec12 : e1.vec32; - p2.vec[RPO_REMAP_VEC(2)] = p.vec[4]; - p2.vec[RPO_REMAP_VEC(3)] = p.vec[5]; - p2.vec[RPO_REMAP_VEC(4)] = flop3 ? e3.vec32 : e3.vec12; - p2.vec[RPO_REMAP_VEC(5)] = flop3 ? e3.vec23 : e3.vec21; - p2.vec[RPO_REMAP_VEC(6)] = newev2; - p2.vec[RPO_REMAP_VEC(7)] = newev1; - p2.interior[RPO_REMAP_V(0)] = vec++; - p2.interior[RPO_REMAP_V(1)] = vec++; - p2.interior[RPO_REMAP_V(2)] = vec++; - p2.interior[RPO_REMAP_V(3)] = vec++; - - // If this patch is textured, create two new texture verts for it - for (chan = 0; chan < patch->getNumMaps(); ++chan) - { - if (patch->tvPatches[chan]) - { - int tva = tvert[chan]++; - int tvb = tvert[chan]++; - TVPatch &tp = patch->tvPatches[chan][i]; - TVPatch &tp1 = patch->tvPatches[chan][tpat[chan]++]; - TVPatch &tp2 = patch->tvPatches[chan][tpat[chan]++]; - tp1.tv[RPO_REMAP_V(0)] = tp.tv[1]; - tp1.tv[RPO_REMAP_V(1)] = tva; - tp1.tv[RPO_REMAP_V(2)] = tvb; - tp1.tv[RPO_REMAP_V(3)] = tp.tv[0]; - tp2.tv[RPO_REMAP_V(0)] = tva; - tp2.tv[RPO_REMAP_V(1)] = tp.tv[2]; - tp2.tv[RPO_REMAP_V(2)] = tp.tv[3]; - tp2.tv[RPO_REMAP_V(3)] = tvb; -#if MAX_RELEASE <= 3100 - patch->tVerts[chan][tva] =(patch->tVerts[chan][tp.tv[1]] + patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvb] =(patch->tVerts[chan][tp.tv[0]] + patch->tVerts[chan][tp.tv[3]]) / 2.0f; -#else - patch->tVerts[chan][tva] =((UVVert&)patch->tVerts[chan][tp.tv[1]] + (UVVert&)patch->tVerts[chan][tp.tv[2]]) / 2.0f; - patch->tVerts[chan][tvb] =((UVVert&)patch->tVerts[chan][tp.tv[0]] + (UVVert&)patch->tVerts[chan][tp.tv[3]]) / 2.0f; -#endif - } - } - - // If it's not an auto patch, compute the new interior points - if (!(p.flags & PATCH_AUTO)) - { - p1.flags &= ~PATCH_AUTO; - p2.flags &= ~PATCH_AUTO; - - Point3 a, b, c, d; - InterpCenter(patch, i, 1, 1, 2, 4, &a, &b, &c, &d); - patch->vecs[p1.interior[0]].p = a; - patch->vecs[p1.interior[1]].p = b; - patch->vecs[p2.interior[0]].p = c; - patch->vecs[p2.interior[1]].p = d; - InterpCenter(patch, i, 0, 0, 3, 5, &a, &b, &c, &d); - patch->vecs[p1.interior[3]].p = a; - patch->vecs[p1.interior[2]].p = b; - patch->vecs[p2.interior[3]].p = c; - patch->vecs[p2.interior[2]].p = d; - } - - // Subdivide edge 1 and 3 - rpatch->SubdivideU (i, p1.v[1], p2.v[0], pat-2, *patch); - } - } - pDivIx++; - } - } - - delete[] pInfo; - delete[] eMap; - - // Now call the DeletePatchParts function to clean it all up - BitArray dumVerts(patch->getNumVerts()); - dumVerts.ClearAll(); - BitArray dumPatches(patch->getNumPatches()); - dumPatches.ClearAll(); - // Mark the subdivided patches as deleted - for (i = 0; i < patches; ++i) - dumPatches.Set(i, pDiv[i]); - -#ifdef DUMPING - DebugPrint("Before:\n"); - patch->Dump(); -#endif - - DeletePatchParts(patch, rpatch, dumVerts, dumPatches); - -#ifdef DUMPING - DebugPrint("After:\n"); - patch->Dump(); -#endif - - patch->computeInteriors(); - patch->buildLinkages(); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoSubdivide(int type) -{ - switch (type) - { - case EP_EDGE: - DoEdgeSubdivide(); - break; - case EP_PATCH: - DoPatchSubdivide(); - break; - } - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoEdgeSubdivide() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->edgeSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoEdgeSubdivide")); - // Call the patch add function - SubdividePatch(SUBDIV_EDGES, propagate, patch, rpatch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_EDGESUBDIVIDE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOVALIDEDGESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::DoPatchSubdivide() -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoPatchSubdivide")); - // Call the patch add function - SubdividePatch(SUBDIV_PATCHES, propagate, patch, rpatch); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHSUBDIVIDE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void TurnPatch(PatchMesh *patch, RPatchMesh *rpatch, bool ccw) -{ - // - if (ccw) - { - // For each patches - for (int p=0; pnumPatches; p++) - { - // Selected and quad ? - if ((patch->patchSel[p])&&(patch->patches[p].type==PATCH_QUAD)) - { - // Turn it! - - // Turn the vertices - int tmp=patch->patches[p].v[3]; - patch->patches[p].v[3]=patch->patches[p].v[0]; - patch->patches[p].v[0]=patch->patches[p].v[1]; - patch->patches[p].v[1]=patch->patches[p].v[2]; - patch->patches[p].v[2]=tmp; - - // Turn the vectors - tmp=patch->patches[p].vec[6]; - int tmp2=patch->patches[p].vec[7]; - patch->patches[p].vec[6]=patch->patches[p].vec[0]; - patch->patches[p].vec[7]=patch->patches[p].vec[1]; - patch->patches[p].vec[0]=patch->patches[p].vec[2]; - patch->patches[p].vec[1]=patch->patches[p].vec[3]; - patch->patches[p].vec[2]=patch->patches[p].vec[4]; - patch->patches[p].vec[3]=patch->patches[p].vec[5]; - patch->patches[p].vec[4]=tmp; - patch->patches[p].vec[5]=tmp2; - - // Turn the interiors - tmp=patch->patches[p].interior[3]; - patch->patches[p].interior[3]=patch->patches[p].interior[0]; - patch->patches[p].interior[0]=patch->patches[p].interior[1]; - patch->patches[p].interior[1]=patch->patches[p].interior[2]; - patch->patches[p].interior[2]=tmp; - -#if MAX_RELEASE <= 3100 - // Turn the adjacents - tmp=patch->patches[p].adjacent[3]; - patch->patches[p].adjacent[3]=patch->patches[p].adjacent[0]; - patch->patches[p].adjacent[0]=patch->patches[p].adjacent[1]; - patch->patches[p].adjacent[1]=patch->patches[p].adjacent[2]; - patch->patches[p].adjacent[2]=tmp; -#else -// todo, there s no more adj. what to do? -#endif - // Turn the edges - tmp=patch->patches[p].edge[3]; - patch->patches[p].edge[3]=patch->patches[p].edge[0]; - patch->patches[p].edge[0]=patch->patches[p].edge[1]; - patch->patches[p].edge[1]=patch->patches[p].edge[2]; - patch->patches[p].edge[2]=tmp; - } - } - - // Turn the rpatch - rpatch->TurnPatch(patch); - } - else - { - // Turn three times the other way - TurnPatch(patch, rpatch, true); - TurnPatch(patch, rpatch, true); - TurnPatch(patch, rpatch, true); - } -} - -void EditPatchMod::DoPatchTurn(bool ccw) -{ - ModContextList mcList; - INodeTab nodes; - TimeValue t = ip->GetTime(); - int holdNeeded = 0; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - RecordTopologyTags(); - for (int i = 0; i < mcList.Count(); i++) - { - int altered = 0; - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - patchData->RecordTopologyTags(patch); - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // If any bits are set in the selection set, let's DO IT!! - if (patch->patchSel.NumberSet()) - { - altered = holdNeeded = 1; - if (theHold.Holding()) - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "DoTurnPatch")); - - // Call the patch add function - TurnPatch (patch, rpatch, ccw); - patchData->UpdateChanges(patch, rpatch); - patchData->TempData(this)->Invalidate(PART_TOPO); - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - if (holdNeeded) - { - ResolveTopoChanges(); - theHold.Accept(GetString(IDS_TH_PATCHSUBDIVIDE)); - } - else - { - ip->DisplayTempPrompt(GetString(IDS_TH_NOPATCHESSEL), PROMPT_TIME); - theHold.End(); - } - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Surface.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Surface.cpp deleted file mode 100644 index 4f72420b1..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Surface.cpp +++ /dev/null @@ -1,789 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern int sbmParams[4]; -extern DWORD sbsParams[3]; -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK SelectByMatDlgProc( - HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) - { - static int *param; - switch (msg) - { - case WM_INITDIALOG: - param =(int*)lParam; - SetupIntSpinner(hWnd, IDC_MAT_IDSPIN, IDC_MAT_ID, 1, MAX_MATID, param[0]); - CheckDlgButton(hWnd, IDC_CLEARSELECTION, param[1]); - /*SetupIntSpinner(hWnd, IDC_TESS_U_SPIN, IDC_TESS_U2, 1, RPO_DEFAULT_TESSEL, param[2]); - SetupIntSpinner(hWnd, IDC_TESS_V_SPIN, IDC_TESS_V2, 1, RPO_DEFAULT_TESSEL, param[3]);*/ - CenterWindow(hWnd, GetParent(hWnd)); - break; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - { - ISpinnerControl *spin = GetISpinner(GetDlgItem(hWnd, IDC_MAT_IDSPIN)); - param[0] = spin->GetIVal(); - param[1] = IsDlgButtonChecked(hWnd, IDC_CLEARSELECTION); - ReleaseISpinner(spin); - EndDialog(hWnd, 1); - break; - } - - case IDCANCEL: - EndDialog(hWnd, 0); - break; - } - break; - - default: - return FALSE; - } - return TRUE; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void SetSmoothButtonState(HWND hWnd, DWORD bits, DWORD invalid, DWORD unused = 0) -{ - for (int i = IDC_SMOOTH_GRP1; i < IDC_SMOOTH_GRP1 + 32; i++) - { - if ((unused&(1 << (i - IDC_SMOOTH_GRP1)))) - { - ShowWindow(GetDlgItem(hWnd, i), SW_HIDE); - continue; - } - - if ((invalid&(1 << (i - IDC_SMOOTH_GRP1)))) - { - SetWindowText(GetDlgItem(hWnd, i), NULL); - SendMessage(GetDlgItem(hWnd, i), CC_COMMAND, CC_CMD_SET_STATE, FALSE); - } else - { - TSTR buf; - buf.printf(_T("%d"), i - IDC_SMOOTH_GRP1 + 1); - SetWindowText(GetDlgItem(hWnd, i), buf); - SendMessage(GetDlgItem(hWnd, i), CC_COMMAND, CC_CMD_SET_STATE,(bits&(1 << (i - IDC_SMOOTH_GRP1)))?TRUE:FALSE); - } - InvalidateRect(GetDlgItem(hWnd, i), NULL, TRUE); - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK SelectBySmoothDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static DWORD *param; - switch (msg) - { - case WM_INITDIALOG: - param =(DWORD*)lParam; - int i; - for (i = IDC_SMOOTH_GRP1; i < IDC_SMOOTH_GRP1 + 32; i++) - SendMessage(GetDlgItem(hWnd, i), CC_COMMAND, CC_CMD_SET_TYPE, CBT_CHECK); - SetSmoothButtonState(hWnd, param[0], 0, param[2]); - CheckDlgButton(hWnd, IDC_CLEARSELECTION, param[1]); - CenterWindow(hWnd, GetParent(hWnd)); - break; - - case WM_COMMAND: - if (LOWORD(wParam) >= IDC_SMOOTH_GRP1 && - LOWORD(wParam) <= IDC_SMOOTH_GRP32) - { - ICustButton *iBut = GetICustButton(GetDlgItem(hWnd, LOWORD(wParam))); - int shift = LOWORD(wParam) - IDC_SMOOTH_GRP1; - if (iBut->IsChecked()) - { - param[0] |= 1 << shift; - } else - { - param[0] &= ~(1 << shift); - } - ReleaseICustButton(iBut); - break; - } - - switch (LOWORD(wParam)) - { - case IDOK: - param[1] = IsDlgButtonChecked(hWnd, IDC_CLEARSELECTION); - EndDialog(hWnd, 1); - break; - - case IDCANCEL: - EndDialog(hWnd, 0); - break; - } - break; - - default: - return FALSE; - } - return TRUE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK PatchTileDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - if (!ep && message != WM_INITDIALOG) - return FALSE; - - switch (message) - { - case WM_INITDIALOG: - { - - ep =(EditPatchMod *)lParam; - ep->hTilePanel = hDlg; - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - ep->tileNum = SetupIntSpinner(hDlg, IDC_TILE_MAT_SPIN, IDC_TILE_MAT, 0, 65535, 0); - ep->tileRot = SetupIntSpinner(hDlg, IDC_TILE_ROT_SPIN, IDC_TILE_ROT, 0, 3, 0); - ep->SetTileDlgEnables(); - return TRUE; - } - - case WM_DESTROY: - if (ep->tileNum) - { - ReleaseISpinner(ep->tileNum); - ep->tileNum = NULL; - } - if (ep->tileRot) - { - ReleaseISpinner(ep->tileRot); - ep->tileRot = NULL; - } - return FALSE; - - case CC_SPINNER_CHANGE: - /*switch (LOWORD(wParam)) - { - case IDC_TILE_MAT_SPIN: - if (HIWORD(wParam)) - break; // No interactive action - ep->SetTileNum (ep->tileNum->GetIVal()); - break; - case IDC_TILE_ROT_SPIN: - if (HIWORD(wParam)) - break; // No interactive action - ep->SetTileRot (ep->tileRot->GetIVal()); - break; - }*/ - break; - - case CC_SPINNER_BUTTONUP: - /*switch (LOWORD(wParam)) - { - case IDC_TILE_MAT_SPIN: - ep->SetTileNum (ep->tileNum->GetIVal()); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - case IDC_TILE_ROT_SPIN: - ep->SetTileRot (ep->tileRot->GetIVal()); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - }*/ - break; - - case WM_PAINT: - if (!ep->tileUIValid) - { - // Tilenum - /*ULONG u = ep->GetTileNum(); - if (u == 0xffffffff) - { - ep->tileNum->SetIndeterminate(TRUE); - } - else - { - ep->tileNum->SetIndeterminate(FALSE); - ep->tileNum->SetValue((int)u, FALSE); - } - - // Tilerot - int v = ep->GetTileRot(); - if (v == -1) - { - ep->tileRot->SetIndeterminate(TRUE); - } - else - { - ep->tileRot->SetIndeterminate(FALSE); - ep->tileRot->SetValue(v, FALSE); - }*/ - - ep->patchUIValid = TRUE; - } - return FALSE; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - /*switch (LOWORD(wParam)) - { - }*/ - break; - } - - return FALSE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK PatchEdgeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - if (!ep && message != WM_INITDIALOG) - return FALSE; - - switch (message) - { - case WM_INITDIALOG: - { - - ep =(EditPatchMod *)lParam; - ep->hEdgePanel = hDlg; - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - ep->SetEdgeDlgEnables(); - return TRUE; - } - - case WM_DESTROY: - return FALSE; - - case WM_PAINT: - if (!ep->edgeUIValid) - { - // No smooth active ? - HWND hButton=GetDlgItem (hDlg, IDC_NO_SMOOTH); - nlassert (hButton); - if (IsWindowEnabled (hButton)) - { - // Get its value - switch (ep->getSmoothFlags ()) - { - case 0: - CheckDlgButton (hDlg, IDC_NO_SMOOTH, BST_UNCHECKED); - break; - case 1: - CheckDlgButton (hDlg, IDC_NO_SMOOTH, BST_CHECKED); - break; - case 2: - CheckDlgButton (hDlg, IDC_NO_SMOOTH, BST_INDETERMINATE); - break; - } - } - - // Valid now - ep->edgeUIValid = TRUE; - } - return FALSE; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_NO_SMOOTH: - // 3 states management - if (IsDlgButtonChecked(hDlg, IDC_NO_SMOOTH)==BST_INDETERMINATE) - CheckDlgButton (hDlg, IDC_NO_SMOOTH, BST_UNCHECKED); - - // Set the smooth flag for selected edges if state is checked or indeterminate - ep->setSmoothFlags (IsDlgButtonChecked(hDlg, IDC_NO_SMOOTH)==BST_CHECKED); - break; - } - break; - } - - return FALSE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK PatchSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - if (!ep && message != WM_INITDIALOG) - return FALSE; - - switch (message) - { - case WM_INITDIALOG: - { - ep = (EditPatchMod *)lParam; - ep->hSurfPanel = hDlg; - - for (int i = IDC_SMOOTH_GRP1; i < IDC_SMOOTH_GRP1 + 32; i++) - SendMessage(GetDlgItem(hDlg, i), CC_COMMAND, CC_CMD_SET_TYPE, CBT_CHECK); - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - ep->matSpin = SetupIntSpinner(hDlg, IDC_MAT_IDSPIN, IDC_MAT_ID, 1, MAX_MATID, 0); - ep->tessUSpin = SetupIntSpinner(hDlg, IDC_TESS_U_SPIN, IDC_TESS_U2, 1, 4, RPO_DEFAULT_TESSEL); - ep->tessVSpin = SetupIntSpinner(hDlg, IDC_TESS_V_SPIN, IDC_TESS_V2, 1, 4, RPO_DEFAULT_TESSEL); - - ep->SetSurfDlgEnables(); - - return TRUE; - } - - case WM_DESTROY: - if (ep->matSpin) - { - ReleaseISpinner(ep->matSpin); - ep->matSpin = NULL; - } - if (ep->tessUSpin) - { - ReleaseISpinner(ep->tessUSpin); - ep->tessUSpin = NULL; - } - if (ep->tessVSpin) - { - ReleaseISpinner(ep->tessVSpin); - ep->tessVSpin = NULL; - } - return FALSE; - - case CC_SPINNER_CHANGE: - switch (LOWORD(wParam)) - { - case IDC_MAT_IDSPIN: - if (HIWORD(wParam)) - break; // No interactive action - ep->SetSelMatIndex(ep->matSpin->GetIVal() - 1); - break; - case IDC_TESS_U_SPIN: - case IDC_TESS_V_SPIN: - if (HIWORD(wParam)) - break; // No interactive action - ep->SetSelTess(ep->tessUSpin->GetIVal(), ep->tessVSpin->GetIVal()); - break; - } - break; - - case CC_SPINNER_BUTTONUP: - switch (LOWORD(wParam)) - { - case IDC_MAT_IDSPIN: - ep->SetSelMatIndex(ep->matSpin->GetIVal() - 1); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - case IDC_TESS_U_SPIN: - case IDC_TESS_V_SPIN: - ep->SetSelTess(ep->tessUSpin->GetIVal(), ep->tessVSpin->GetIVal()); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - } - break; - - case WM_PAINT: - if (!ep->patchUIValid) - { - // Material index - int mat = ep->GetSelMatIndex(); - if (mat == -1) - { - ep->matSpin->SetIndeterminate(TRUE); - } - else - { - ep->matSpin->SetIndeterminate(FALSE); - ep->matSpin->SetValue(mat + 1, FALSE); - } - // Smoothing groups - DWORD invalid, bits; - bits = ep->GetSelSmoothBits(invalid); - SetSmoothButtonState(hDlg, bits, invalid); - - // U tess index - int u = ep->GetSelTessU(); - if (u == -1) - { - ep->tessUSpin->SetIndeterminate(TRUE); - } - else - { - ep->tessUSpin->SetIndeterminate(FALSE); - ep->tessUSpin->SetValue(u, FALSE); - } - - // V tess index - int v = ep->GetSelTessV(); - if (v == -1) - { - ep->tessVSpin->SetIndeterminate(TRUE); - } - else - { - ep->tessVSpin->SetIndeterminate(FALSE); - ep->tessVSpin->SetValue(v, FALSE); - } - - ep->patchUIValid = TRUE; - } - return FALSE; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - if (LOWORD(wParam) >= IDC_SMOOTH_GRP1 && - LOWORD(wParam) <= IDC_SMOOTH_GRP32) - { - ICustButton *iBut = GetICustButton(GetDlgItem(hDlg, LOWORD(wParam))); - int bit = iBut->IsChecked() ? 1 : 0; - int shift = LOWORD(wParam) - IDC_SMOOTH_GRP1; - ep->SetSelSmoothBits(bit << shift, 1 << shift); - ReleaseICustButton(iBut); - break; - } - switch (LOWORD(wParam)) - { - // Material - case IDC_SELECT_BYID: - { - if (DialogBoxParam( - hInstance, - MAKEINTRESOURCE(IDD_SELECTBYMAT), - ep->ip->GetMAXHWnd(), - SelectByMatDlgProc, - (LPARAM)sbmParams)) - { - - ep->SelectByMat(sbmParams[0] - 1/*index*/, sbmParams[1]/*clear*/); - } - break; - } - // Smoothing groups - case IDC_SELECTBYSMOOTH: - { - sbsParams[2] = ~ep->GetUsedSmoothBits(); - if (DialogBoxParam(hInstance, MAKEINTRESOURCE(IDD_EM_SELECTBYSMOOTH), - ep->ip->GetMAXHWnd(), SelectBySmoothDlgProc, (LPARAM)sbsParams)) - { - ep->SelectBySmoothGroup(sbsParams[0], (BOOL)sbsParams[1]); - } - break; - } - case IDC_SMOOTH_CLEAR: - ep->SetSelSmoothBits(0, 0xffffffff); - break; - // Balance button - case IDC_BALANCE_SELECTED: - { - ep->BalanceSelPatch (); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - } - break; - } - break; - } - - return FALSE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSurfDlgEnables() -{ - if (!hSurfPanel) - return; - - nlassert(ip); - - BOOL oType =(GetSubobjectLevel() == EP_OBJECT) ? TRUE : FALSE; - BOOL pType =(GetSubobjectLevel() == EP_PATCH) ? TRUE : FALSE; - - if (oType) - return; - if (!pType) - return; - - ICustButton *but; - ISpinnerControl *spin; - but = GetICustButton(GetDlgItem(hSurfPanel, IDC_SELECT_BYID)); - but->Enable(pType); - ReleaseICustButton(but); - spin = GetISpinner(GetDlgItem(hSurfPanel, IDC_MAT_IDSPIN)); - spin->Enable(pType); - ReleaseISpinner(spin); - for (int i = 0; i < 32; ++i) - { - but = GetICustButton(GetDlgItem(hSurfPanel, IDC_SMOOTH_GRP1 + i)); - but->Enable(pType); - ReleaseICustButton(but); - } - but = GetICustButton(GetDlgItem(hSurfPanel, IDC_SELECTBYSMOOTH)); - but->Enable(pType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hSurfPanel, IDC_SMOOTH_CLEAR)); - but->Enable(pType); - ReleaseICustButton(but); -} - - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetTileDlgEnables() -{ - if (!hTilePanel) - return; - - nlassert(ip); - - BOOL oType =(GetSubobjectLevel() == EP_OBJECT) ? TRUE : FALSE; - BOOL pType =(GetSubobjectLevel() == EP_TILE) ? TRUE : FALSE; - - if (oType) - return; - if (!pType) - return; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetEdgeDlgEnables() -{ - if (!hEdgePanel) - return; - - nlassert(ip); - - BOOL oType =(GetSubobjectLevel() == EP_OBJECT) ? TRUE : FALSE; - BOOL pType =(GetSubobjectLevel() == EP_TILE) ? TRUE : FALSE; - - if (oType) - return; - if (!pType) - return; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -DWORD EditPatchMod::GetSelSmoothBits(DWORD &invalid) - { - BOOL first = 1; - DWORD bits = 0; - invalid = 0; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return 0; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - if (first) - { - first = FALSE; - bits = patch->patches[j].smGroup; - } else - { - if (patch->patches[j].smGroup != bits) - { - invalid |= patch->patches[j].smGroup^bits; - } - } - } - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - nodes.DisposeTemporary(); - return bits; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -DWORD EditPatchMod::GetUsedSmoothBits() - { - DWORD bits = 0; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return 0; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - for (int j = 0; j < patch->getNumPatches(); j++) - { - bits |= patch->patches[j].smGroup; - } - - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - nodes.DisposeTemporary(); - return bits; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SelectBySmoothGroup(DWORD bits, BOOL clear) - { - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchSelRestore(patchData, this, patch)); - } - - if (clear) - patch->patchSel.ClearAll(); - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patches[j].smGroup & bits) - { - patch->patchSel.Set(j); - } - } - - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->SetFlag(EPD_BEENDONE, TRUE); - patchData->TempData(this)->Invalidate(PART_SELECT); - } - - PatchSelChanged(); - theHold.Accept(GetString(IDS_RB_SELECTBYSMOOTH)); - - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_SELECT, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime()); - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetSelSmoothBits(DWORD bits, DWORD which) - { - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - - theHold.Begin(); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - patchData->BeginEdit(ip->GetTime()); - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - // Start a restore object... - if (theHold.Holding()) - { - theHold.Put(new PatchSelRestore(patchData, this, patch)); - } - - for (int j = 0; j < patch->getNumPatches(); j++) - { - if (patch->patchSel[j]) - { - patch->patches[j].smGroup &= ~which; - patch->patches[j].smGroup |= bits&which; - } - } - - patchData->UpdateChanges(patch, rpatch, FALSE); - patchData->SetFlag(EPD_BEENDONE, TRUE); - patchData->TempData(this)->Invalidate(PART_SELECT); - } - - PatchSelChanged(); - theHold.Accept(GetString(IDS_RB_SETSMOOTHGROUP)); - - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - InvalidateSurfaceUI(); - ip->RedrawViews(ip->GetTime()); - } - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Tess.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Tess.cpp deleted file mode 100644 index 5a1a54cb4..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPM_Tess.cpp +++ /dev/null @@ -1,956 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -extern AdvParams sParams; -INT_PTR CALLBACK AdvParametersDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetTessUI(HWND hDlg, TessApprox *tess) -{ - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U_SPINNER), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V_SPINNER), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE_SPINNER), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST_SPINNER), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG_SPINNER), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_PARAMETERS), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), FALSE); - EnableWindow(GetDlgItem(hDlg, IDC_WELDTESS), FALSE); - - CheckDlgButton(hDlg, IDC_TESS_SET, FALSE); - CheckDlgButton(hDlg, IDC_TESS_REGULAR, FALSE); - CheckDlgButton(hDlg, IDC_TESS_PARAM, FALSE); - CheckDlgButton(hDlg, IDC_TESS_SPATIAL, FALSE); - CheckDlgButton(hDlg, IDC_TESS_CURV, FALSE); - CheckDlgButton(hDlg, IDC_TESS_LDA, FALSE); - - ShowWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_WELDTESS), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_MESH), SW_HIDE); - ShowWindow(GetDlgItem(hDlg, IDC_DISP), SW_HIDE); - -// watje 12-10-98 - if (tess->showInteriorFaces) - CheckDlgButton(hDlg, IDC_SHOW_INTERIOR_FACES, TRUE); - else CheckDlgButton(hDlg, IDC_SHOW_INTERIOR_FACES, FALSE); - if (tileMode) - { - CheckDlgButton(hDlg, IDC_TILE_MODE, TRUE); - } - else - { - CheckDlgButton(hDlg, IDC_TILE_MODE, FALSE); - } - // Old - BOOL bCheck=(IsDlgButtonChecked(hDlg, IDC_TILE_MODE)==BST_CHECKED); - EnableWindow (GetDlgItem (hDlg, IDC_STEPS), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSSPINNER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPS_RENDER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSRENDERSPINNER), !bCheck); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPS), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPSSPINNER), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITION), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITIONSPINNER), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_KEEP_MAPPING), bCheck); - - if (keepMapping) - CheckDlgButton(hDlg, IDC_KEEP_MAPPING, TRUE); - else - CheckDlgButton(hDlg, IDC_KEEP_MAPPING, FALSE); - - switch (tess->type) - { - case TESS_SET: - CheckDlgButton(hDlg, IDC_TESS_SET, TRUE); - mergeSpin->Disable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - - case TESS_REGULAR: - CheckDlgButton(hDlg, IDC_TESS_REGULAR, TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V_SPINNER), TRUE); - - ShowWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), SW_HIDE); - mergeSpin->Enable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), FALSE); - break; - - case TESS_PARAM: - CheckDlgButton(hDlg, IDC_TESS_PARAM, TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_U_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_V_SPINNER), TRUE); - - mergeSpin->Enable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), FALSE); - break; - - case TESS_SPATIAL: - CheckDlgButton(hDlg, IDC_TESS_SPATIAL, TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), TRUE); - - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), !settingViewportTess); - ShowWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), settingViewportTess?SW_HIDE:SW_SHOW); - EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_PARAMETERS), TRUE); - mergeSpin->Enable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), FALSE); - break; - - case TESS_CURVE: - CheckDlgButton(hDlg, IDC_TESS_CURV, TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG_SPINNER), TRUE); - - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), !settingViewportTess); - ShowWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), settingViewportTess?SW_HIDE:SW_SHOW); - EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_PARAMETERS), TRUE); - mergeSpin->Enable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), FALSE); - break; - - case TESS_LDA: - CheckDlgButton(hDlg, IDC_TESS_LDA, TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_EDGE_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_DIST_SPINNER), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG), TRUE); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_ANG_SPINNER), TRUE); - - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), !settingViewportTess); - ShowWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), settingViewportTess?SW_HIDE:SW_SHOW); - EnableWindow(GetDlgItem(hDlg, IDC_ADVANCED_PARAMETERS), TRUE); - mergeSpin->Enable(); - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), FALSE); - break; - } - - - if (settingViewportTess) - { - ShowWindow(GetDlgItem(hDlg, IDC_TESS_SET), SW_SHOW); - - if (tess->type != TESS_SET) - { - ShowWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), SW_SHOW); - ShowWindow(GetDlgItem(hDlg, IDC_WELDTESS), SW_SHOW); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), !GetViewTessWeld()); - EnableWindow(GetDlgItem(hDlg, IDC_WELDTESS), tess->merge > 0.0f); - } - } else - { - if (settingDisp) - { - ShowWindow(GetDlgItem(hDlg, IDC_MESH), SW_SHOW); - ShowWindow(GetDlgItem(hDlg, IDC_DISP), SW_SHOW); - } else - { - if (tess->type != TESS_SET) - { - ShowWindow(GetDlgItem(hDlg, IDC_MESH), SW_SHOW); - ShowWindow(GetDlgItem(hDlg, IDC_DISP), SW_SHOW); - ShowWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), SW_SHOW); - ShowWindow(GetDlgItem(hDlg, IDC_WELDTESS), SW_SHOW); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_NORMALS), !GetProdTessWeld()); - EnableWindow(GetDlgItem(hDlg, IDC_WELDTESS), tess->merge > 0.0f); - CheckDlgButton(hDlg, IDC_MESH, TRUE); - } - ShowWindow(GetDlgItem(hDlg, IDC_TESS_SET), SW_SHOW); - } - } - - // now set all the settings - uSpin->SetValue(tess->u, FALSE); - vSpin->SetValue(tess->v, FALSE); - edgeSpin->SetValue(tess->edge, FALSE); - distSpin->SetValue(tess->dist, FALSE); - angSpin->SetValue(tess->ang, FALSE); - mergeSpin->SetValue(tess->merge, FALSE); - CheckDlgButton(hDlg, IDC_TESS_VIEW_DEP, tess->view); - if (settingViewportTess) - { - CheckDlgButton(hDlg, IDC_TESS_VIEW, TRUE); - CheckDlgButton(hDlg, IDC_TESS_RENDERER, FALSE); - CheckDlgButton(hDlg, IDC_TESS_NORMALS, GetViewTessNormals()); - CheckDlgButton(hDlg, IDC_WELDTESS, GetViewTessWeld()); - } else - { - CheckDlgButton(hDlg, IDC_TESS_VIEW, FALSE); - CheckDlgButton(hDlg, IDC_TESS_RENDERER, TRUE); - CheckDlgButton(hDlg, IDC_TESS_NORMALS, GetProdTessNormals()); - CheckDlgButton(hDlg, IDC_WELDTESS, GetProdTessWeld()); - } - CheckDlgButton(hDlg, IDC_DISP, settingDisp); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK PatchObjSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) - { - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - if (!ep && message != WM_INITDIALOG) - return FALSE; - - switch (message) - { - case WM_INITDIALOG: - { - - ep =(EditPatchMod *)lParam; - ep->hSurfPanel = hDlg; - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - if (!ep->settingViewportTess && ep->settingDisp && ep->GetProdTess().type == TESS_SET) - ep->settingDisp = FALSE; - TessApprox t; - if (ep->settingViewportTess) - { - t = ep->GetViewTess(); - } else - { - if (ep->settingDisp) - t = ep->GetDispTess(); - else - t = ep->GetProdTess(); - } - ep->uSpin = SetupIntSpinner(hDlg, IDC_TESS_U_SPINNER, IDC_TESS_U, 1, 100, t.u); - ep->vSpin = SetupIntSpinner(hDlg, IDC_TESS_V_SPINNER, IDC_TESS_V, 1, 100, t.v); -#define MAX_F 1000.0f - ep->edgeSpin = SetupFloatSpinner(hDlg, IDC_TESS_EDGE_SPINNER, IDC_TESS_EDGE, 0.0f, MAX_F, t.edge); - ep->distSpin = SetupFloatSpinner(hDlg, IDC_TESS_DIST_SPINNER, IDC_TESS_DIST, 0.0f, MAX_F, t.dist); - ep->angSpin = SetupFloatSpinner(hDlg, IDC_TESS_ANG_SPINNER, IDC_TESS_ANG, 0.0f, MAX_F, t.ang); - ep->mergeSpin = SetupFloatSpinner(hDlg, IDC_MERGE_SPINNER, IDC_MERGE, 0.000f, MAX_F, t.merge); - ep->SetTessUI(hDlg, &t); - ep->SetSurfDlgEnables(); - ep->SetTileDlgEnables(); - return TRUE; - } - - case WM_DESTROY: - if (ep->uSpin) - { - ReleaseISpinner(ep->uSpin); - ep->uSpin = NULL; - } - if (ep->vSpin) - { - ReleaseISpinner(ep->vSpin); - ep->vSpin = NULL; - } - if (ep->edgeSpin) - { - ReleaseISpinner(ep->edgeSpin); - ep->edgeSpin = NULL; - } - if (ep->distSpin) - { - ReleaseISpinner(ep->distSpin); - ep->distSpin = NULL; - } - if (ep->angSpin) - { - ReleaseISpinner(ep->angSpin); - ep->angSpin = NULL; - } - if (ep->mergeSpin) - { - ReleaseISpinner(ep->mergeSpin); - ep->mergeSpin = NULL; - } - return FALSE; - - case CC_SPINNER_BUTTONUP: - { - TessApprox tess; - if (ep->settingViewportTess) - { - tess = ep->GetViewTess(); - } else - { - if (ep->settingDisp) - tess = ep->GetDispTess(); - else - tess = ep->GetProdTess(); - } - ep->SetTessUI(hDlg, &tess); - } - break; - - case CC_SPINNER_CHANGE: - switch (LOWORD(wParam)) - { - case IDC_TESS_U_SPINNER: - case IDC_TESS_V_SPINNER: - case IDC_TESS_EDGE_SPINNER: - case IDC_TESS_DIST_SPINNER: - case IDC_TESS_ANG_SPINNER: - case IDC_MERGE_SPINNER: - { - TessApprox tess; - if (ep->settingViewportTess) - { - tess = ep->GetViewTess(); - } else - { - if (ep->settingDisp) - tess = ep->GetDispTess(); - else - tess = ep->GetProdTess(); - } - switch (LOWORD(wParam)) - { - case IDC_TESS_U_SPINNER: - tess.u = ep->uSpin->GetIVal(); - break; - case IDC_TESS_V_SPINNER: - tess.v = ep->vSpin->GetIVal(); - break; - case IDC_TESS_EDGE_SPINNER: - tess.edge = ep->edgeSpin->GetFVal(); - break; - case IDC_TESS_DIST_SPINNER: - tess.dist = ep->distSpin->GetFVal(); - break; - case IDC_TESS_ANG_SPINNER: - tess.ang = ep->angSpin->GetFVal(); - break; - case IDC_MERGE_SPINNER: - tess.merge = ep->mergeSpin->GetFVal(); - break; - } - if (ep->settingViewportTess) - { - ep->SetViewTess(tess); - } else - { - if (ep->settingDisp) - ep->SetDispTess(tess); - else - ep->SetProdTess(tess); - } - if (!HIWORD(wParam)) - ep->SetTessUI(hDlg, &tess); - break; - } - } - break; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - // Tessellation - case IDC_TESS_VIEW: - { - ep->settingViewportTess = TRUE; - TessApprox t = ep->GetViewTess(); - ep->SetTessUI(hDlg, &t); - EnableWindow(GetDlgItem(hDlg, IDC_TESS_VIEW_DEP), FALSE); // always off here - break; - } - case IDC_TESS_RENDERER: - { - ep->settingViewportTess = FALSE; - if (ep->settingDisp) - { - TessApprox t = ep->GetDispTess(); - ep->SetTessUI(hDlg, &t); - } else - { - TessApprox t = ep->GetProdTess(); - ep->SetTessUI(hDlg, &t); - } - break; - } - case IDC_MESH: - ep->settingDisp = FALSE; - ep->SetTessUI(hDlg, &ep->GetProdTess()); - break; - case IDC_DISP: - ep->settingDisp = TRUE; - ep->SetTessUI(hDlg, &ep->GetDispTess()); - break; - case IDC_TILE_MODE: - { - BOOL bCheck=(IsDlgButtonChecked(hDlg, IDC_TILE_MODE)==BST_CHECKED); - ep->SetTileMode (bCheck!=0); - - // Old - EnableWindow (GetDlgItem (hDlg, IDC_STEPS), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSSPINNER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPS_RENDER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSRENDERSPINNER), !bCheck); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPS), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPSSPINNER), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITION), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITIONSPINNER), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_KEEP_MAPPING), bCheck); - - ep->SetTessUI(hDlg, &ep->GetDispTess()); - } - break; - case IDC_KEEP_MAPPING: - ep->SetKeepMapping (IsDlgButtonChecked(hDlg, IDC_KEEP_MAPPING)!=0); - ep->SetTessUI(hDlg, &ep->GetDispTess()); - break; -// watje 12-10-98 - case IDC_SHOW_INTERIOR_FACES: - case IDC_TESS_SET: - case IDC_TESS_REGULAR: - case IDC_TESS_PARAM: - case IDC_TESS_SPATIAL: - case IDC_TESS_CURV: - case IDC_TESS_LDA: - { - TessApprox tess; - if (ep->settingViewportTess) - { - tess = ep->GetViewTess(); - } else - { - if (ep->settingDisp) - tess = ep->GetDispTess(); - else - tess = ep->GetProdTess(); - } - switch (LOWORD(wParam)) - { -// watje 12-10-98 - case IDC_SHOW_INTERIOR_FACES: - tess.showInteriorFaces = IsDlgButtonChecked(hDlg, IDC_SHOW_INTERIOR_FACES); - break; - case IDC_TESS_SET: - tess.type = TESS_SET; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - case IDC_TESS_REGULAR: - tess.type = TESS_REGULAR; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - case IDC_TESS_PARAM: - tess.type = TESS_PARAM; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - case IDC_TESS_SPATIAL: - tess.type = TESS_SPATIAL; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - case IDC_TESS_CURV: - tess.type = TESS_CURVE; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - case IDC_TESS_LDA: - tess.type = TESS_LDA; - EnableWindow(GetDlgItem(hDlg, IDC_SHOW_INTERIOR_FACES), TRUE); - break; - } - if (ep->settingViewportTess) - { - ep->SetViewTess(tess); - } else - { - if (ep->settingDisp) - ep->SetDispTess(tess); - else - ep->SetProdTess(tess); - } - ep->SetTessUI(hDlg, &tess); - } - break; - case IDC_TESS_VIEW_DEP: - { - TessApprox tess; - tess = ep->GetProdTess(); - tess.view = IsDlgButtonChecked(hDlg, IDC_TESS_VIEW_DEP); - if (ep->settingDisp) - ep->SetDispTess(tess); - else - ep->SetProdTess(tess); - } - break; - case IDC_TESS_NORMALS: - if (ep->settingViewportTess) - { - ep->SetViewTessNormals(IsDlgButtonChecked(hDlg, IDC_TESS_NORMALS)); - ep->SetTessUI(hDlg, &ep->GetViewTess()); - } else - { - ep->SetProdTessNormals(IsDlgButtonChecked(hDlg, IDC_TESS_NORMALS)); - if (ep->settingDisp) - ep->SetTessUI(hDlg, &ep->GetDispTess()); - else - ep->SetTessUI(hDlg, &ep->GetProdTess()); - } - break; - case IDC_WELDTESS: - if (ep->settingViewportTess) - { - ep->SetViewTessWeld(IsDlgButtonChecked(hDlg, IDC_WELDTESS)); - ep->SetTessUI(hDlg, &ep->GetViewTess()); - } else - { - ep->SetProdTessWeld(IsDlgButtonChecked(hDlg, IDC_WELDTESS)); - if (ep->settingDisp) - ep->SetTessUI(hDlg, &ep->GetDispTess()); - else - ep->SetTessUI(hDlg, &ep->GetProdTess()); - } - break; - case IDC_ADVANCED_PARAMETERS: - { - TessApprox tess; - if (ep->settingViewportTess) - { - tess = ep->GetViewTess(); - } else - { - if (ep->settingDisp) - tess = ep->GetDispTess(); - else - tess = ep->GetProdTess(); - } - sParams.mStyle = tess.subdiv; - sParams.mMin = tess.minSub; - sParams.mMax = tess.maxSub; - sParams.mTris = tess.maxTris; - int retval = DialogBox(hInstance, - MAKEINTRESOURCE(IDD_SURF_APPROX_ADV), - ep->ip->GetMAXHWnd(), AdvParametersDialogProc); - if (retval == 1) - { - BOOL confirm = FALSE; - if ((sParams.mStyle == SUBDIV_DELAUNAY && sParams.mTris > 200000) || -(sParams.mStyle != SUBDIV_DELAUNAY && sParams.mMax > 5)) - { - // warning! - TSTR title = GetString(IDS_ADV_SURF_APPROX_WARNING_TITLE), - warning = GetString(IDS_ADV_SURF_APPROX_WARNING); - if (MessageBox(hDlg, warning, title, - MB_YESNO | MB_ICONWARNING | MB_DEFBUTTON2) == IDYES) - confirm = TRUE; - - } else - confirm = TRUE; - if (confirm) - { - // do it, they've been warned! - tess.subdiv = sParams.mStyle; - tess.minSub = sParams.mMin; - tess.maxSub = sParams.mMax; - tess.maxTris = sParams.mTris; - if (ep->settingViewportTess) - { - ep->SetViewTess(tess); - } else - { - if (ep->settingDisp) - ep->SetDispTess(tess); - else - ep->SetProdTess(tess); - } - } - } - break; - } - } - break; - } - - return FALSE; - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -AdvParams sParams; -static ISpinnerControl* psMinSpin = NULL; -static ISpinnerControl* psMaxSpin = NULL; -static ISpinnerControl* psMaxTrisSpin = NULL; -// this max matches the MI max. -#define MAX_SUBDIV 7 -static BOOL initing = FALSE; // this is a hack but CenterWindow causes bad commands -INT_PTR CALLBACK -AdvParametersDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - switch (uMsg) - { - case WM_INITDIALOG: - { - initing = TRUE; - CenterWindow(hDlg, GetCOREInterface()->GetMAXHWnd()); - initing = FALSE; - psMinSpin = SetupIntSpinner(hDlg, IDC_TESS_MIN_REC_SPINNER, IDC_TESS_MIN_REC, 0, sParams.mMax, sParams.mMin); - psMaxSpin = SetupIntSpinner(hDlg, IDC_TESS_MAX_REC_SPINNER, IDC_TESS_MAX_REC, sParams.mMin, MAX_SUBDIV, sParams.mMax); - psMaxTrisSpin = SetupIntSpinner(hDlg, IDC_TESS_MAX_TRIS_SPINNER, IDC_TESS_MAX_TRIS, 0, 2000000, sParams.mTris); - switch (sParams.mStyle) - { - case SUBDIV_GRID: - CheckDlgButton(hDlg, IDC_GRID, TRUE); - CheckDlgButton(hDlg, IDC_TREE, FALSE); - CheckDlgButton(hDlg, IDC_DELAUNAY, FALSE); - break; - case SUBDIV_TREE: - CheckDlgButton(hDlg, IDC_GRID, FALSE); - CheckDlgButton(hDlg, IDC_TREE, TRUE); - CheckDlgButton(hDlg, IDC_DELAUNAY, FALSE); - break; - case SUBDIV_DELAUNAY: - CheckDlgButton(hDlg, IDC_GRID, FALSE); - CheckDlgButton(hDlg, IDC_TREE, FALSE); - CheckDlgButton(hDlg, IDC_DELAUNAY, TRUE); - break; - } - break; - } - - case WM_COMMAND: - if (initing) - return FALSE; - switch (LOWORD(wParam)) - { - case IDOK: - EndDialog(hDlg, 1); - break; - case IDCANCEL: - EndDialog(hDlg, 0); - break; - case IDC_GRID: - sParams.mStyle = SUBDIV_GRID; - CheckDlgButton(hDlg, IDC_GRID, TRUE); - CheckDlgButton(hDlg, IDC_TREE, FALSE); - CheckDlgButton(hDlg, IDC_DELAUNAY, FALSE); - break; - case IDC_TREE: - sParams.mStyle = SUBDIV_TREE; - CheckDlgButton(hDlg, IDC_GRID, FALSE); - CheckDlgButton(hDlg, IDC_TREE, TRUE); - CheckDlgButton(hDlg, IDC_DELAUNAY, FALSE); - break; - case IDC_DELAUNAY: - sParams.mStyle = SUBDIV_DELAUNAY; - CheckDlgButton(hDlg, IDC_GRID, FALSE); - CheckDlgButton(hDlg, IDC_TREE, FALSE); - CheckDlgButton(hDlg, IDC_DELAUNAY, TRUE); - break; - } - break; - - case CC_SPINNER_CHANGE: - switch (LOWORD(wParam)) - { - case IDC_TESS_MIN_REC_SPINNER: - sParams.mMin = psMinSpin->GetIVal(); - psMinSpin->SetLimits(0, sParams.mMax, FALSE); - psMaxSpin->SetLimits(sParams.mMin, MAX_SUBDIV, FALSE); - break; - case IDC_TESS_MAX_REC_SPINNER: - sParams.mMax = psMaxSpin->GetIVal(); - psMinSpin->SetLimits(0, sParams.mMax, FALSE); - psMaxSpin->SetLimits(sParams.mMin, MAX_SUBDIV, FALSE); - break; - case IDC_TESS_MAX_TRIS_SPINNER: - sParams.mTris = psMaxTrisSpin->GetIVal(); - break; - } - break; - - case WM_DESTROY: - if (psMinSpin) - { - ReleaseISpinner(psMinSpin); - psMinSpin = NULL; - } - if (psMaxSpin) - { - ReleaseISpinner(psMaxSpin); - psMaxSpin = NULL; - } - if (psMaxTrisSpin) - { - ReleaseISpinner(psMaxTrisSpin); - psMaxTrisSpin = NULL; - } - break; - } - - return FALSE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetViewTess(TessApprox &tess) -{ - viewTess = tess; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetViewTess(tess); - patchData->viewTess = tess; - //rpatch->rTess = rTess; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetProdTess(TessApprox &tess) -{ - prodTess = tess; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetProdTess(tess); - patchData->prodTess = tess; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetDispTess(TessApprox &tess) -{ - dispTess = tess; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetDispTess(tess); - patchData->dispTess = tess; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetViewTessNormals(BOOL use) -{ - mViewTessNormals = use; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetViewTessNormals(use); - patchData->mViewTessNormals = use; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetProdTessNormals(BOOL use) -{ - mProdTessNormals = use; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetProdTessNormals(use); - patchData->mProdTessNormals = use; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetViewTessWeld(BOOL weld) -{ - mViewTessWeld = weld; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetViewTessWeld(weld); - patchData->mViewTessWeld = weld; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetProdTessWeld(BOOL weld) -{ - mProdTessWeld = weld; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(),rpatch); - if (!patch) - continue; - - patch->SetProdTessWeld(weld); - patchData->mProdTessWeld = weld; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPVertMapper.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPVertMapper.cpp deleted file mode 100644 index 0398263d7..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EPVertMapper.cpp +++ /dev/null @@ -1,301 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern Point3 zeroPoint; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -EPVertMapper::~EPVertMapper() -{ - if (vertMap) - { - delete[] vertMap; - vertMap = NULL; - } - if (vecMap) - { - delete[] vecMap; - vecMap = NULL; - } -} - -void EPVertMapper::Build(PatchMesh &patch) -{ - verts = patch.numVerts; - if (vertMap) - delete[] vertMap; - vertMap = new EPMapVert[verts]; - vecs = patch.numVecs; - if (vecMap) - delete[] vecMap; - vecMap = new EPMapVert[vecs]; - int i; - for (i = 0; i < verts; ++i) - vertMap[i] = EPMapVert(i, patch.verts[i].p, zeroPoint); - for (i = 0; i < vecs; ++i) - vecMap[i] = EPMapVert(i, patch.vecs[i].p, zeroPoint); -} - -void EPVertMapper::RecordTopologyTags(PatchMesh &patch) -{ - int i; - for (i = 0; i < verts; ++i) - { - // If it's still mapped, record it! - if (vertMap[i].vert >= 0) - patch.verts[vertMap[i].vert].aux1 = i; - } - for (i = 0; i < vecs; ++i) - { - // If it's still mapped, record it! - if (vecMap[i].vert >= 0) - patch.vecs[vecMap[i].vert].aux1 = i; - } -} - -void EPVertMapper::UpdateMapping(PatchMesh &patch) -{ - // Flush existing mapping - int i; - for (i = 0; i < verts; ++i) - vertMap[i].vert = -1; - for (i = 0; i < vecs; ++i) - vecMap[i].vert = -1; - // Build the new mapping - int verts = patch.numVerts; - for (int vert = 0; vert < verts; ++vert) - { - int aux = patch.verts[vert].aux1; - if (aux != 0xffffffff) - vertMap[aux].vert = vert; - } - int vecs = patch.numVecs; - for (int vec = 0; vec < vecs; ++vec) - { - int aux = patch.vecs[vec].aux1; - if (aux != 0xffffffff) - vecMap[aux].vert = vec; - } -} - -void EPVertMapper::RecomputeDeltas(PatchMesh &patch) -{ - int i; - for (i = 0; i < verts; ++i) - { - EPMapVert &map = vertMap[i]; - if (map.vert >= 0 && map.originalStored) - { - Point3 pnew = patch.verts[map.vert].p; -#ifdef VMAP_DEBUG - Point3 oldDelta = map.delta; -#endif - map.delta = pnew - map.original; -#ifdef VMAP_DEBUG - if (map.delta != oldDelta) - DebugPrint("Vert %d delta changed from %.2f %.2f %.2f to %.2 %.2f %.2f\n", i, oldDelta.x, oldDelta.y, oldDelta.z, map.delta.x, map.delta.y, map.delta.z); -#endif - } - } - for (i = 0; i < vecs; ++i) - { - EPMapVert &map = vecMap[i]; - if (map.vert >= 0 && map.originalStored) - { - Point3 pnew = patch.vecs[map.vert].p; -#ifdef VMAP_DEBUG - Point3 oldDelta = map.delta; -#endif - map.delta = pnew - map.original; -#ifdef VMAP_DEBUG - if (map.delta != oldDelta) - DebugPrint("Vec %d delta changed from %.2f %.2f %.2f to %.2 %.2f %.2f\n", i, oldDelta.x, oldDelta.y, oldDelta.z, map.delta.x, map.delta.y, map.delta.z); -#endif - } - } -} - -void EPVertMapper::UpdateAndApplyDeltas(PatchMesh &inPatch, PatchMesh &outPatch) -{ - - // watje 4-27-99 here to handle 0 patch situations - if (inPatch.numPatches == 0) - { - // outPatch.setNumVerts(0,TRUE); - return; - } - - - // Update the original point locations - int i; - for (i = 0; i < verts; ++i) - { - // If this table has more in it than we need, forget the rest - // This can happen if the input object changes to fewer verts - if (i >= inPatch.numVerts) - break; - // If it's still mapped, update it! - if (vertMap[i].vert >= 0) - { - vertMap[i].original = inPatch.verts[i].p; - vertMap[i].originalStored = TRUE; - } - } - for (i = 0; i < vecs; ++i) - { - // If this table has more in it than we need, forget the rest - // This can happen if the input object changes to fewer vecs - if (i >= inPatch.numVecs) - break; - // If it's still mapped, update it! - if (vecMap[i].vert >= 0) - { - vecMap[i].original = inPatch.vecs[i].p; - vecMap[i].originalStored = TRUE; - } - } - // Now apply to output - for (i = 0; i < verts; ++i) - { - EPMapVert &pv = vertMap[i]; - if (pv.vert >= 0 && pv.originalStored) - { - // nlassert(pv.vert >= 0 && pv.vert < outPatch.numVerts); - // watje 4-27-99 instead just throwing an nlassert it pops a message box up and troes to recover - if (!(pv.vert >= 0 && pv.vert < outPatch.numVerts)) - { - outPatch.setNumVerts(pv.vert + 1, TRUE); - TSTR title = GetString(IDS_TH_EDITPATCH_CLASS), - warning = GetString(IDS_PW_SURFACEERROR); - - MessageBox(GetCOREInterface()->GetMAXHWnd(), - warning, title, MB_OK | MB_APPLMODAL); - } - - if (i >= inPatch.numVerts) - outPatch.verts[pv.vert].p = zeroPoint; - else - outPatch.verts[pv.vert].p = pv.original + pv.delta; -#ifdef VMAP_DEBUG - if (pv.delta != zeroPoint) - DebugPrint("Vert %d applied delta of %.2f %.2f %.2f\n", i, pv.delta.x, pv.delta.y, pv.delta.z); -#endif - } - } - for (i = 0; i < vecs; ++i) - { - EPMapVert &pv = vecMap[i]; - if (pv.vert >= 0 && pv.originalStored) - { - // nlassert(pv.vert >= 0 && pv.vert < outPatch.numVecs); - // watje 4-27-99 instead just throwing an nlassert it pops a message box up and troes to recover - if (!(pv.vert >= 0 && pv.vert < outPatch.numVecs)) - { - outPatch.setNumVecs(pv.vert + 1, TRUE); - - TSTR title = GetString(IDS_TH_EDITPATCH_CLASS), - warning = GetString(IDS_PW_SURFACEERROR); - - MessageBox(GetCOREInterface()->GetMAXHWnd(), - warning, title, MB_OK | MB_APPLMODAL); - } - - if (i >= inPatch.numVecs) - outPatch.vecs[pv.vert].p = zeroPoint; - else - outPatch.vecs[pv.vert].p = pv.original + pv.delta; -#ifdef VMAP_DEBUG - if (pv.delta != zeroPoint) - DebugPrint("Vec %d applied delta of %.2f %.2f %.2f\n", i, pv.delta.x, pv.delta.y, pv.delta.z); -#endif - } - } -} - -EPVertMapper& EPVertMapper::operator=(EPVertMapper &from) -{ - if (vertMap) - delete[] vertMap; - verts = from.verts; - vertMap = new EPMapVert[verts]; - int i; - for (i = 0; i < verts; ++i) - vertMap[i] = from.vertMap[i]; - if (vecMap) - delete[] vecMap; - vecs = from.vecs; - vecMap = new EPMapVert[vecs]; - for (i = 0; i < vecs; ++i) - vecMap[i] = from.vecMap[i]; - return *this; -} - -void EPVertMapper::RescaleWorldUnits(float f) -{ - int i; - for (i = 0; i < verts; ++i) - { - vertMap[i].delta *= f; - if (vertMap[i].originalStored) - vertMap[i].original *= f; - } - for (i = 0; i < vecs; ++i) - { - vecMap[i].delta *= f; - if (vecMap[i].originalStored) - vecMap[i].original *= f; - } -} - -#define EPVM_DATA_CHUNK 0x1000 - -IOResult EPVertMapper::Save(ISave *isave) -{ - ULONG nb; - isave->BeginChunk(EPVM_DATA_CHUNK); - isave->Write(&verts, sizeof(int), &nb); - isave->Write(vertMap, sizeof(EPMapVert) * verts, &nb); - isave->Write(&vecs, sizeof(int), &nb); - isave->Write(vecMap, sizeof(EPMapVert) * vecs, &nb); - isave->EndChunk(); - return IO_OK; -} - -IOResult EPVertMapper::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - int index = 0; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case EPVM_DATA_CHUNK: - res = iload->Read(&verts, sizeof(int), &nb); - if (vertMap) - delete[] vertMap; - vertMap = new EPMapVert[verts]; - res = iload->Read(vertMap, sizeof(EPMapVert) * verts, &nb); - res = iload->Read(&vecs, sizeof(int), &nb); - if (vecMap) - delete[] vecMap; - vecMap = new EPMapVert[vecs]; - res = iload->Read(vecMap, sizeof(EPMapVert) * vecs, &nb); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchData.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchData.cpp deleted file mode 100644 index 74907ead7..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchData.cpp +++ /dev/null @@ -1,714 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" -#include "nel/misc/time_nl.h" - -using namespace NLMISC; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -class EPVertMapRestore : public RestoreObj -{ -public: - BOOL gotRedo; - EPVertMapper undo; - EPVertMapper redo; - EditPatchData *epd; - - EPVertMapRestore(EditPatchData *d) - { - undo = d->vertMap; - epd = d; - gotRedo = FALSE; - } - - void Restore(int isUndo) - { - if (!gotRedo) - { - gotRedo = TRUE; - redo = epd->vertMap; - } - epd->vertMap = undo; - } - - void Redo() - { - epd->vertMap = redo; - } - - int Size() { return 1; } - void EndHold() { } - TSTR Description() { return TSTR(_T("EPVertMapRestore")); } -}; - -// -------------------------------------------------------------------------------------- - -class FinalPatchRestore : public RestoreObj -{ -public: - BOOL gotRedo; - PatchMesh undo; - PatchMesh redo; - PatchMesh *patch; - RPatchMesh *rundo; - RPatchMesh *rredo; - RPatchMesh *rpatch; - - FinalPatchRestore(PatchMesh *s, RPatchMesh *rs) - { - rundo = NULL; - rredo = NULL; - - undo = *s; - - if (rs) - { - rundo=new RPatchMesh(); - *rundo = *rs; - } - - patch = s; - rpatch = rs; - gotRedo = FALSE; - } - - virtual ~FinalPatchRestore() - { - if (rundo) - delete rundo; - if (rredo) - delete rredo; - } - - void Restore(int isUndo) - { - if (!gotRedo) - { - gotRedo = TRUE; - redo = *patch; - - if (rpatch) - { - if (rredo==NULL) - rredo=new RPatchMesh(); - - *rredo = *rpatch; - } - } - *patch = undo; - - if (rundo) - *rpatch = *rundo; - } - - void Redo() - { - *patch = redo; - - if (rredo) - *rpatch = *rredo; - } - - int Size() { return 1; } - void EndHold() { } - TSTR Description() { return TSTR(_T("FinalPatchRestore")); } -}; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -EditPatchData::EditPatchData(EditPatchMod *mod) -{ - meshSteps = mod->meshSteps; - // 3-18-99 to suport render steps and removal of the mental tesselator - meshStepsRender = mod->meshStepsRender; - showInterior = mod->showInterior; - - // meshAdaptive = mod->meshAdaptive; // Future use (Not used now) - viewTess = mod->viewTess; - prodTess = mod->prodTess; - dispTess = mod->dispTess; - tileLevel = mod->tileLevel; - tileMode = mod->tileMode; - includeMeshes = mod->includeMeshes; - transitionType = mod->transitionType; - keepMapping = mod->keepMapping; - mViewTessNormals = mod->mViewTessNormals; - mProdTessNormals = mod->mProdTessNormals; - mViewTessWeld = mod->mViewTessWeld; - mProdTessWeld = mod->mProdTessWeld; - displayLattice = mod->displayLattice; - displaySurface = mod->displaySurface; - flags = 0; - tempData = NULL; -} - -EditPatchData::EditPatchData(EditPatchData& emc) -{ - meshSteps = emc.meshSteps; - // 3-18-99 to suport render steps and removal of the mental tesselator - meshStepsRender = emc.meshStepsRender; - showInterior = emc.showInterior; - - // meshAdaptive = emc.meshAdaptive; // Future use (Not used now) - viewTess = emc.viewTess; - prodTess = emc.prodTess; - dispTess = emc.dispTess; - tileLevel = emc.tileLevel; - transitionType = emc.transitionType; - tileMode = emc.tileMode; - includeMeshes = emc.includeMeshes; - keepMapping = emc.keepMapping; - mViewTessNormals = emc.mViewTessNormals; - mProdTessNormals = emc.mProdTessNormals; - mViewTessWeld = emc.mViewTessWeld; - mProdTessWeld = emc.mProdTessWeld; - displayLattice = emc.displayLattice; - displaySurface = emc.displaySurface; - flags = emc.flags; - tempData = NULL; - vertMap = emc.vertMap; - finalPatch = emc.finalPatch; - rfinalPatch = emc.rfinalPatch; -} - -void EditPatchData::Apply(TimeValue t, RPO *patchOb, int selLevel) -{ - TTicks ticks=CTime::getPerformanceTime (); - // Either just copy it from the existing cache or rebuild from previous level! - if (!GetFlag(EPD_UPDATING_CACHE) && tempData - && tempData->PatchCached(t)) - { - RPatchMesh *rpatch; - PatchMesh *patch=tempData->GetPatch(t, rpatch); - patchOb->patch.DeepCopy( patch, - PART_GEOM | SELECT_CHANNEL | PART_SUBSEL_TYPE| - PART_DISPLAY | PART_TOPO | TEXMAP_CHANNEL); - //rpatch->UpdateBinding (*patch, t); - *patchOb->rpatch=*rpatch; - patchOb->PointsWereChanged(); - } - else if (GetFlag(EPD_HASDATA)) - { - // For old files, which contain exhaustive data to reconstruct the editing process - // of patches, we'll have data in the 'changes' table. If it's there, go ahead and - // replay the edits, then store the alterations in our new delta format and discard - // the change table! - int count = changes.Count(); - if (count) - { - // DebugPrint("*** Applying old style (%d) ***\n", count); - // Store the topology for future reference - vertMap.Build(patchOb->patch); - finalPatch = patchOb->patch; - rfinalPatch = *patchOb->rpatch; - for (int i = 0; i < count; ++i) - { - PModRecord *rec = changes[i]; - // Record the topo flags - RecordTopologyTags(&patchOb->patch); - BOOL result = rec->Redo(&patchOb->patch, patchOb->rpatch, 0); - UpdateChanges(&patchOb->patch, patchOb->rpatch); - // If we hit one that didn't play back OK, we need to flush the remainder - if (!result) - { - for (int j = i; j < count; ++j) - delete changes[j]; - changes.Delete(i, count - i); - break; - } - } - // Nuke the changes table - count = changes.Count(); - for (int k = 0; k < count; ++k) - delete changes[k]; - changes.Delete(0, count); - changes.Shrink(); - count = 0; - } - else - { - // Apply deltas to incoming shape, placing into finalPatch - vertMap.UpdateAndApplyDeltas(patchOb->patch, finalPatch); - patchOb->patch = finalPatch; - *patchOb->rpatch = rfinalPatch; - } - patchOb->PointsWereChanged(); - // Kind of a waste when there's no animation... - patchOb->UpdateValidity(GEOM_CHAN_NUM, FOREVER); - patchOb->UpdateValidity(TOPO_CHAN_NUM, FOREVER); - patchOb->UpdateValidity(SELECT_CHAN_NUM, FOREVER); - patchOb->UpdateValidity(SUBSEL_TYPE_CHAN_NUM, FOREVER); - patchOb->UpdateValidity(DISP_ATTRIB_CHAN_NUM, FOREVER); - } - else - { // No data yet -- Store initial required data - // DebugPrint("<<>>\n"); - vertMap.Build(patchOb->patch); - finalPatch = patchOb->patch; - rfinalPatch = *patchOb->rpatch; - } - - // Hand it its mesh interpolation info - patchOb->SetMeshSteps(meshSteps); - // 3-18-99 to suport render steps and removal of the mental tesselator - patchOb->SetMeshStepsRender(meshStepsRender); - patchOb->SetShowInterior(showInterior); - - // patchOb->SetAdaptive(meshAdaptive); // Future use (Not used now) - patchOb->SetViewTess(viewTess); - patchOb->SetProdTess(prodTess); - patchOb->SetDispTess(dispTess); - patchOb->rpatch->rTess.ModeTile=tileMode; - patchOb->rpatch->rTess.TileTesselLevel=tileLevel; - patchOb->rpatch->rTess.TransitionType=transitionType; - patchOb->rpatch->rTess.KeepMapping=keepMapping; - patchOb->SetViewTessNormals(mViewTessNormals); - patchOb->SetProdTessNormals(mProdTessNormals); - patchOb->SetViewTessWeld(mViewTessWeld); - patchOb->SetProdTessWeld(mProdTessWeld); - - patchOb->showMesh = displaySurface; - patchOb->SetShowLattice(displayLattice); - patchOb->patch.dispFlags = 0; // TH 3/3/99 - switch (selLevel) - { - case EP_PATCH: - patchOb->patch.SetDispFlag(DISP_SELPATCHES); - break; - case EP_EDGE: - patchOb->patch.SetDispFlag(DISP_SELEDGES); - break; - case EP_VERTEX: - patchOb->patch.SetDispFlag(DISP_VERTTICKS | DISP_SELVERTS | DISP_VERTS); - break; - case EP_TILE: - //patchOb->patch.SetDispFlag(DISP_VERTTICKS | DISP_SELVERTS | DISP_VERTS); - break; - } - patchOb->patch.selLevel = patchLevel[selLevel]; - patchOb->rpatch->SetSelLevel (selLevel); - - /*rfinalPatch.UpdateBinding (finalPatch, t); - patchOb->rpatch->UpdateBinding (patchOb->patch, t);*/ - - if (GetFlag(EPD_UPDATING_CACHE)) - { - nlassert(tempData); - tempData->UpdateCache(patchOb); - SetFlag(EPD_UPDATING_CACHE, FALSE); - } - ticks=CTime::getPerformanceTime ()-ticks; - nldebug ("%f", CTime::ticksToSecond(ticks)); -} - -void EditPatchData::Invalidate(PartID part, BOOL patchValid) -{ - if (tempData) - { - tempData->Invalidate(part, patchValid); - } -} - -void EditPatchData::BeginEdit(TimeValue t) -{ - nlassert(tempData); - if (!GetFlag(EPD_HASDATA)) - SetFlag(EPD_HASDATA, TRUE); -} - -EPTempData *EditPatchData::TempData(EditPatchMod *mod) -{ - if (!tempData) - { - nlassert(mod->ip); - tempData = new EPTempData(mod, this); - } - return tempData; -} - -void EditPatchData::RescaleWorldUnits(float f) -{ - // Scale the deltas inside the vertex map - vertMap.RescaleWorldUnits(f); - // Now rescale stuff inside our data structures - Matrix3 stm = ScaleMatrix(Point3(f, f, f)); - finalPatch.Transform(stm); -} - -void EditPatchData::RecordTopologyTags(PatchMesh *patch) -{ - // First, stuff all -1's into aux fields - int i; - for (i = 0; i < patch->numVerts; ++i) - patch->verts[i].aux1 = 0xffffffff; - for (i = 0; i < patch->numVecs; ++i) - patch->vecs[i].aux1 = 0xffffffff; - for (i = 0; i < patch->numPatches; ++i) - patch->patches[i].aux1 = 0xffffffff; - // Now put in our tags - vertMap.RecordTopologyTags(*patch); -} - -GenericNamedSelSetList &EditPatchData::GetSelSet(EditPatchMod *mod) -{ - switch (mod->GetSubobjectLevel()) - { - case EP_VERTEX: - return vselSet; - case EP_EDGE: - return eselSet; - case EP_PATCH: - case EP_TILE: - default: - return pselSet; - } -} - -GenericNamedSelSetList &EditPatchData::GetSelSet(int level) -{ - switch (level + EP_VERTEX) - { - case EP_VERTEX: - return vselSet; - case EP_EDGE: - return eselSet; - case EP_PATCH: - case EP_TILE: - default: - return pselSet; - } -} - - -void EditPatchData::UpdateChanges(PatchMesh *patch, RPatchMesh *rpatch, BOOL checkTopology) -{ - if (theHold.Holding()) - { - theHold.Put(new EPVertMapRestore(this)); - //theHold.Put(new FinalPatchRestore(&finalPatch, &rfinalPatch)); - if (rpatch) - theHold.Put(new FinalPatchRestore(&finalPatch, &rfinalPatch)); - else - theHold.Put(new FinalPatchRestore(&finalPatch, NULL)); - } - // Update the mapper's indices - if (checkTopology) - vertMap.UpdateMapping(*patch); - // Update mapper's XYZ deltas - vertMap.RecomputeDeltas(*patch); - // Store the final shape - finalPatch = *patch; - - if (rpatch) - rfinalPatch = *rpatch; -} - -#define EPD_GENERAL_CHUNK 0x1000 // Obsolete as of 11/12/98 (r3) -#define CHANGE_CHUNK 0x1010 // Obsolete as of 11/12/98 (r3) -#define EPD_R3_GENERAL_CHUNK 0x1015 -#define MESH_ATTRIB_CHUNK 0x1020 -#define DISP_PARTS_CHUNK 0x1030 -#define VTESS_ATTRIB_CHUNK 0x1070 -#define PTESS_ATTRIB_CHUNK 0x1080 -#define DTESS_ATTRIB_CHUNK 0x1090 -#define NORMAL_TESS_ATTRIB_CHUNK 0x1110 -#define WELD_TESS_ATTRIB_CHUNK 0x1120 -#define VERTMAP_CHUNK 0x1130 -#define FINALPATCH_CHUNK 0x1140 -#define RENDERSTEPS_CHUNK 0x1150 -#define SHOWINTERIOR_CHUNK 0x1160 - -// Named sel set chunks -#define VSELSET_CHUNK 0x1040 -#define ESELSET_CHUNK 0x1050 -#define PSELSET_CHUNK 0x1060 - -#define RPO_MODE_TILE 0x4000 -#define RFINALPATCH_CHUNK 0x4001 -#define RPO_MODE_TILE_TRANSITION 0x4002 -#define RPO_INCLUDE_MESHES 0x4003 - -IOResult EditPatchData::Save(ISave *isave) -{ - ULONG nb; - isave->BeginChunk(EPD_R3_GENERAL_CHUNK); - isave->Write(&flags, sizeof(DWORD), &nb); - isave->EndChunk(); - isave->BeginChunk(MESH_ATTRIB_CHUNK); - isave->Write(&meshSteps, sizeof(int), &nb); - // Future use (Not used now) - BOOL fakeAdaptive = FALSE; - isave->Write(&fakeAdaptive, sizeof(BOOL), &nb); - // isave->Write(&meshAdaptive,sizeof(BOOL),&nb); // Future use (Not used now) - isave->EndChunk(); - - // 3-18-99 to suport render steps and removal of the mental tesselator - isave->BeginChunk(RENDERSTEPS_CHUNK); - if ((meshStepsRender < 0) ||(meshStepsRender > 100)) - { - meshStepsRender = 5; - nlassert(0); - } - isave->Write(&meshStepsRender, sizeof(int), &nb); - isave->EndChunk(); - isave->BeginChunk(SHOWINTERIOR_CHUNK); - isave->Write(&showInterior, sizeof(BOOL), &nb); - isave->EndChunk(); - - - isave->BeginChunk(VTESS_ATTRIB_CHUNK); - viewTess.Save(isave); - isave->EndChunk(); - isave->BeginChunk(PTESS_ATTRIB_CHUNK); - prodTess.Save(isave); - isave->EndChunk(); - isave->BeginChunk(DTESS_ATTRIB_CHUNK); - dispTess.Save(isave); - isave->EndChunk(); - isave->BeginChunk(DISP_PARTS_CHUNK); - isave->Write(&displaySurface, sizeof(BOOL), &nb); - isave->Write(&displayLattice, sizeof(BOOL), &nb); - isave->EndChunk(); - - isave->BeginChunk(NORMAL_TESS_ATTRIB_CHUNK); - isave->Write(&mViewTessNormals, sizeof(BOOL), &nb); - isave->Write(&mProdTessNormals, sizeof(BOOL), &nb); - isave->EndChunk(); - - isave->BeginChunk(WELD_TESS_ATTRIB_CHUNK); - isave->Write(&mViewTessWeld, sizeof(BOOL), &nb); - isave->Write(&mProdTessWeld, sizeof(BOOL), &nb); - isave->EndChunk(); - - isave->BeginChunk(RPO_MODE_TILE); - isave->Write(&tileMode, sizeof(tileMode), &nb); - isave->Write(&tileLevel, sizeof(tileLevel), &nb); - isave->Write(&keepMapping, sizeof(keepMapping), &nb); - isave->EndChunk(); - - isave->BeginChunk(RPO_INCLUDE_MESHES); - isave->Write(&includeMeshes, sizeof(includeMeshes), &nb); - isave->EndChunk(); - - isave->BeginChunk(RPO_MODE_TILE_TRANSITION); - isave->Write(&transitionType, sizeof(transitionType), &nb); - isave->EndChunk(); - - // Save named sel sets - if (vselSet.Count()) - { - isave->BeginChunk(VSELSET_CHUNK); - vselSet.Save(isave); - isave->EndChunk(); - } - if (eselSet.Count()) - { - isave->BeginChunk(ESELSET_CHUNK); - eselSet.Save(isave); - isave->EndChunk(); - } - if (pselSet.Count()) - { - isave->BeginChunk(PSELSET_CHUNK); - pselSet.Save(isave); - isave->EndChunk(); - } - - isave->BeginChunk(VERTMAP_CHUNK); - vertMap.Save(isave); - isave->EndChunk(); - isave->BeginChunk(FINALPATCH_CHUNK); - finalPatch.Save(isave); - isave->EndChunk(); - - isave->BeginChunk(RFINALPATCH_CHUNK); - rfinalPatch.Save(isave); - isave->EndChunk(); - - return IO_OK; -} - -IOResult EditPatchData::Load(ILoad *iload) -{ -IOResult res; -ULONG nb; -PModRecord *theChange; -while (IO_OK == (res = iload->OpenChunk())) -{ - switch (iload->CurChunkID()) - { - // The following code is here to load pre-release 3 files. - case EPD_GENERAL_CHUNK: - iload->SetObsolete(); - iload->Read(&flags, sizeof(DWORD), &nb); - break; - case CLEARVERTSELRECORD_CHUNK: - theChange = new ClearPVertSelRecord; - goto load_change; - case SETVERTSELRECORD_CHUNK: - theChange = new SetPVertSelRecord; - goto load_change; - case INVERTVERTSELRECORD_CHUNK: - theChange = new InvertPVertSelRecord; - goto load_change; - case CLEAREDGESELRECORD_CHUNK: - theChange = new ClearPEdgeSelRecord; - goto load_change; - case SETEDGESELRECORD_CHUNK: - theChange = new SetPEdgeSelRecord; - goto load_change; - case INVERTEDGESELRECORD_CHUNK: - theChange = new InvertPEdgeSelRecord; - goto load_change; - case CLEARPATCHSELRECORD_CHUNK: - theChange = new ClearPatchSelRecord; - goto load_change; - case SETPATCHSELRECORD_CHUNK: - theChange = new SetPatchSelRecord; - goto load_change; - case INVERTPATCHSELRECORD_CHUNK: - theChange = new InvertPatchSelRecord; - goto load_change; - case VERTSELRECORD_CHUNK: - theChange = new PVertSelRecord; - goto load_change; - case EDGESELRECORD_CHUNK: - theChange = new PEdgeSelRecord; - goto load_change; - case PATCHSELRECORD_CHUNK: - theChange = new PatchSelRecord; - goto load_change; - case PATCHDELETERECORD_CHUNK: - theChange = new PatchDeleteRecord; - goto load_change; - case VERTMOVERECORD_CHUNK: - theChange = new PVertMoveRecord; - goto load_change; - case PATCHCHANGERECORD_CHUNK: - theChange = new PatchChangeRecord; - goto load_change; - case VERTCHANGERECORD_CHUNK: - theChange = new PVertChangeRecord; - goto load_change; - case PATCHADDRECORD_CHUNK: - theChange = new PatchAddRecord; - goto load_change; - case EDGESUBDIVIDERECORD_CHUNK: - theChange = new EdgeSubdivideRecord; - goto load_change; - case PATCHSUBDIVIDERECORD_CHUNK: - theChange = new PatchSubdivideRecord; - goto load_change; - case PATTACHRECORD_CHUNK: - theChange = new PAttachRecord; - goto load_change; - case PATCHDETACHRECORD_CHUNK: - theChange = new PatchDetachRecord; - goto load_change; - case PATCHMTLRECORD_CHUNK: - theChange = new PatchMtlRecord; - goto load_change; - case VERTWELDRECORD_CHUNK: - theChange = new PVertWeldRecord; - goto load_change; - case VERTDELETERECORD_CHUNK: - theChange = new PVertDeleteRecord; - // Intentional fall-thru! -load_change: - changes.Append(1, &theChange); - changes[changes.Count() - 1]->Load(iload); - break; - // - // The following code is used for post-release 3 files - // - case EPD_R3_GENERAL_CHUNK: - res = iload->Read(&flags, sizeof(DWORD), &nb); - break; - case VERTMAP_CHUNK: - res = vertMap.Load(iload); - break; - case FINALPATCH_CHUNK: - res = finalPatch.Load(iload); - break; - case RFINALPATCH_CHUNK: - res = rfinalPatch.Load(iload); - break; - // - // The following code is common to all versions' files - // - case MESH_ATTRIB_CHUNK: - iload->Read(&meshSteps, sizeof(int), &nb); - res = iload->Read(&meshAdaptive, sizeof(BOOL), &nb); // Future use (Not used now) - break; - // 3-18-99 to suport render steps and removal of the mental tesselator - case RENDERSTEPS_CHUNK: - iload->Read(&meshStepsRender, sizeof(int), &nb); - if ((meshStepsRender < 0) ||(meshStepsRender > 100)) - { - meshStepsRender = 5; - nlassert(0); - } - - break; - case SHOWINTERIOR_CHUNK: - iload->Read(&showInterior, sizeof(BOOL), &nb); - break; - - case VTESS_ATTRIB_CHUNK: - viewTess.Load(iload); - break; - case PTESS_ATTRIB_CHUNK: - prodTess.Load(iload); - break; - case DTESS_ATTRIB_CHUNK: - dispTess.Load(iload); - break; - case NORMAL_TESS_ATTRIB_CHUNK: - iload->Read(&mViewTessNormals, sizeof(BOOL), &nb); - res = iload->Read(&mProdTessNormals, sizeof(BOOL), &nb); - break; - case WELD_TESS_ATTRIB_CHUNK: - iload->Read(&mViewTessWeld, sizeof(BOOL), &nb); - res = iload->Read(&mProdTessWeld, sizeof(BOOL), &nb); - break; - case DISP_PARTS_CHUNK: - iload->Read(&displaySurface, sizeof(BOOL), &nb); - res = iload->Read(&displayLattice, sizeof(BOOL), &nb); - break; - // Load named selection sets - case VSELSET_CHUNK: - res = vselSet.Load(iload); - break; - case PSELSET_CHUNK: - res = pselSet.Load(iload); - break; - case ESELSET_CHUNK: - res = eselSet.Load(iload); - break; - - case RPO_MODE_TILE: - res = iload->Read(&tileMode, sizeof(tileMode), &nb); - res = iload->Read(&tileLevel, sizeof(tileLevel), &nb); - res = iload->Read(&keepMapping, sizeof(keepMapping), &nb); - break; - - case RPO_INCLUDE_MESHES: - res = iload->Read(&includeMeshes, sizeof(includeMeshes), &nb); - break; - - case RPO_MODE_TILE_TRANSITION: - res = iload->Read(&transitionType, sizeof(transitionType), &nb); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchMod.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchMod.cpp deleted file mode 100644 index 55825158b..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_EditPatchMod.cpp +++ /dev/null @@ -1,1798 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -class EPSelSetNameRestore : public RestoreObj -{ -public: - TSTR undo, redo; - TSTR *target; - EditPatchMod *mod; - EPSelSetNameRestore(EditPatchMod *m, TSTR *t, TSTR &newName) - { - mod = m; - undo = *t; - target = t; - } - void Restore(int isUndo) - { - if (isUndo) - redo = *target; - *target = undo; - if (mod->ip) - mod->ip->NamedSelSetListChanged(); - } - void Redo() - { - *target = redo; - if (mod->ip) - mod->ip->NamedSelSetListChanged(); - } - - TSTR Description() {return TSTR(_T("Sel Set Name"));} -}; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern int attachReorient; -extern Point3 zeroPoint; -extern BOOL filterVerts; -extern int lockedHandles; - -extern void ChangePatchType(PatchMesh *patch, int index, int type); - -HWND EditPatchMod::hSelectPanel = NULL; -HWND EditPatchMod::hOpsPanel = NULL; -HWND EditPatchMod::hSurfPanel = NULL; -HWND EditPatchMod::hTilePanel = NULL; -HWND EditPatchMod::hEdgePanel = NULL; -BOOL EditPatchMod::rsSel = TRUE; -BOOL EditPatchMod::rsOps = TRUE; -BOOL EditPatchMod::rsSurf = TRUE; -BOOL EditPatchMod::rsTile = TRUE; -BOOL EditPatchMod::rsEdge = TRUE; -IObjParam* EditPatchMod::ip = NULL; -MoveModBoxCMode* EditPatchMod::moveMode = NULL; -RotateModBoxCMode* EditPatchMod::rotMode = NULL; -UScaleModBoxCMode* EditPatchMod::uscaleMode = NULL; -NUScaleModBoxCMode* EditPatchMod::nuscaleMode = NULL; -SquashModBoxCMode * EditPatchMod::squashMode = NULL; -SelectModBoxCMode* EditPatchMod::selectMode = NULL; -ISpinnerControl* EditPatchMod::weldSpin = NULL; -ISpinnerControl* EditPatchMod::stepsSpin = NULL; -ISpinnerControl* EditPatchMod::tileSpin = NULL; -ISpinnerControl* EditPatchMod::transitionSpin = NULL; - -// 3-18-99 to suport render steps and removal of the mental tesselator -ISpinnerControl* EditPatchMod::stepsRenderSpin = NULL; - -BOOL EditPatchMod::settingViewportTess = FALSE; -BOOL EditPatchMod::settingDisp = FALSE; -ISpinnerControl* EditPatchMod::uSpin = NULL; -ISpinnerControl* EditPatchMod::vSpin = NULL; -ISpinnerControl* EditPatchMod::edgeSpin = NULL; -ISpinnerControl* EditPatchMod::distSpin = NULL; -ISpinnerControl* EditPatchMod::angSpin = NULL; -ISpinnerControl* EditPatchMod::mergeSpin = NULL; -ISpinnerControl* EditPatchMod::matSpin = NULL; -ISpinnerControl* EditPatchMod::tessUSpin = NULL; -ISpinnerControl* EditPatchMod::tessVSpin = NULL; -ISpinnerControl* EditPatchMod::tileNum = NULL; -ISpinnerControl* EditPatchMod::tileRot = NULL; -BOOL EditPatchMod::patchUIValid = TRUE; -BOOL EditPatchMod::tileUIValid = TRUE; -BOOL EditPatchMod::edgeUIValid = TRUE; -PickPatchAttach EditPatchMod::pickCB; -int EditPatchMod::condenseMat = FALSE; -int EditPatchMod::attachMat = ATTACHMAT_IDTOMAT; -int EditPatchMod::channelModified = EDITPAT_CHANNELS; - -EPM_BindCMode* EditPatchMod::bindMode = NULL; -EPM_ExtrudeCMode* EditPatchMod::extrudeMode = NULL; -EPM_BevelCMode* EditPatchMod::bevelMode = NULL; -int EditPatchMod::CurrentTileSet = -1; -int EditPatchMod::brushSize = 0; // Default 1 tile -int EditPatchMod::ColorBushSize = 0; -int EditPatchMod::tileSize = 1; // Default 256 -bool EditPatchMod::additiveTile = false; // -int EditPatchMod::TileGroup=0; // Default all tiles -int EditPatchMod::DisplaceTile=0; // Default displace 0 -int EditPatchMod::DisplaceTileSet=-1; // -uint EditPatchMod::TileFillRotation=0; -bool EditPatchMod::TileTrick=false; -bool EditPatchMod::automaticLighting=false; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -//--- Named Selection Set Methods ------------------------------------ - -// Used by EditPatchMod destructor to free pointers -void EditPatchMod::ClearSetNames() -{ - for (int i = 0; i < 3; i++) - { - for (int j = 0; j < namedSel[i].Count(); j++) - { - delete namedSel[i][j]; - namedSel[i][j] = NULL; - } - } -} - -int EditPatchMod::FindSet(TSTR &setName, int level) -{ - nlassert(level>0 && level < 4); - for (int i = 0; i < namedSel[level - 1].Count(); i++) - { - if (setName == *namedSel[level - 1][i]) - { - return i; - } - } - return -1; -} - -void EditPatchMod::AddSet(TSTR &setName, int level) -{ - nlassert(level>0 && level < 4); - TSTR *name = new TSTR(setName); - namedSel[level - 1].Append(1, &name); -} - -void EditPatchMod::RemoveSet(TSTR &setName, int level) -{ - MaybeFixupNamedSels(); - nlassert(level>0 && level < 4); - int i = FindSet(setName, level); - if (i >= 0) - { - delete namedSel[level - 1][i]; - namedSel[level - 1].Delete(i, 1); - } -} - - - -void EditPatchMod::SetupNamedSelDropDown() -{ - // Setup named selection sets - if (selLevel == EP_OBJECT) - return; - ip->ClearSubObjectNamedSelSets(); - for (int i = 0; i < namedSel[selLevel - 1].Count(); i++) - ip->AppendSubObjectNamedSelSet(*namedSel[selLevel - 1][i]); -} - -int EditPatchMod::NumNamedSelSets() -{ - if (GetSubobjectLevel() == PO_OBJECT) - return 0; - if (GetSubobjectLevel() == PO_TILE) - return 0; - return namedSel[selLevel - 1].Count(); -} - -TSTR EditPatchMod::GetNamedSelSetName(int i) -{ - return *namedSel[selLevel - 1][i]; -} - - -void EditPatchMod::SetNamedSelSetName(int index, TSTR &newName) -{ - if (!ip) - return; - MaybeFixupNamedSels(); - - // First do the master name list - if (theHold.Holding()) - theHold.Put(new EPSelSetNameRestore(this, namedSel[selLevel - 1][index], newName)); - - // Save the old name so we can change those in the EditPatchData - TSTR oldName = *namedSel[selLevel - 1][index]; - *namedSel[selLevel - 1][index] = newName; - - ModContextList mcList; - INodeTab nodes; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (patchData) - patchData->GetSelSet(this).RenameSet(oldName, newName); - } - nodes.DisposeTemporary(); -} - -void EditPatchMod::NewSetByOperator(TSTR &newName, Tab < int> &sets, int op) -{ - MaybeFixupNamedSels(); - - // First do it in the master name list - AddSet(newName, selLevel); - // TO DO: Undo? - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - GenericNamedSelSetList &set = patchData->GetSelSet(this); - BitArray bits = *set.GetSetByIndex(sets[0]); - for (i = 1; i < sets.Count(); i++) - { - BitArray *bit2 = set.GetSetByIndex(sets[i]); - switch (op) - { - case NEWSET_MERGE: - bits |= *bit2; - break; - - case NEWSET_INTERSECTION: - bits &= *bit2; - break; - - case NEWSET_SUBTRACT: - bits &= ~(*bit2); - break; - } - } - set.AppendSet(bits, 0, newName); - } - - nodes.DisposeTemporary(); -} -// ----------------------------------------------------------------------------------------------------------------------------------------------- - -// Named selection set copy/paste methods follow... - -static INT_PTR CALLBACK PickSetNameDlgProc( - HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - static TSTR *name; - - switch (msg) - { - case WM_INITDIALOG: - { - name =(TSTR*)lParam; - ICustEdit *edit =GetICustEdit(GetDlgItem(hWnd, IDC_SET_NAME)); - edit->SetText(*name); - ReleaseICustEdit(edit); - break; - } - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - { - ICustEdit *edit =GetICustEdit(GetDlgItem(hWnd, IDC_SET_NAME)); - TCHAR buf[256]; - edit->GetText(buf, 256); - *name = TSTR(buf); - ReleaseICustEdit(edit); - EndDialog(hWnd, 1); - break; - } - - case IDCANCEL: - EndDialog(hWnd, 0); - break; - } - break; - - default: - return FALSE; - }; - return TRUE; -} - -BOOL EditPatchMod::GetUniqueSetName(TSTR &name) -{ - while (1) - { - if (FindSet(name, selLevel) < 0) - break; - - if (!DialogBoxParam( - hInstance, - MAKEINTRESOURCE(IDD_PASTE_NAMEDSET), - ip->GetMAXHWnd(), - PickSetNameDlgProc, - (LPARAM)&name)) - return FALSE; - } - return TRUE; -} - - - - - -static INT_PTR CALLBACK PickSetDlgProc( - HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) -{ - switch (msg) - { - case WM_INITDIALOG: - { - Tab &names = *((Tab < TSTR*>*)lParam); - for (int i = 0; i < names.Count(); i++) - { - int pos = SendDlgItemMessage(hWnd, IDC_NS_LIST, LB_ADDSTRING, 0, - (LPARAM)(TCHAR*)*names[i]); - SendDlgItemMessage(hWnd, IDC_NS_LIST, LB_SETITEMDATA, pos, i); - } - break; - } - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDC_NS_LIST: - if (HIWORD(wParam) != LBN_DBLCLK) - break; - // fall through - case IDOK: - { - int sel = SendDlgItemMessage(hWnd, IDC_NS_LIST, LB_GETCURSEL, 0, 0); - if (sel != LB_ERR) - { - int res =SendDlgItemMessage(hWnd, IDC_NS_LIST, LB_GETITEMDATA, sel, 0); - EndDialog(hWnd, res); - break; - } - // fall through - } - - case IDCANCEL: - EndDialog(hWnd, - 1); - break; - } - break; - - default: - return FALSE; - }; - return TRUE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------- - - -int EditPatchMod::SelectNamedSet() -{ - Tab < TSTR*> names = namedSel[selLevel - 1]; - return DialogBoxParam( - hInstance, - MAKEINTRESOURCE(IDD_SEL_NAMEDSET), - ip->GetMAXHWnd(), - PickSetDlgProc, - (LPARAM)&names); -} - -void EditPatchMod::NSCopy() -{ - MaybeFixupNamedSels(); - if (selLevel == EP_OBJECT) - return; - int index = SelectNamedSet(); - if (index < 0) - return; - if (!ip) - return; - // Get the name for that index - int nsl = namedSetLevel[selLevel]; - TSTR setName = *namedSel[nsl][index]; - PatchNamedSelClip *clip = new PatchNamedSelClip(setName); - - ModContextList mcList; - INodeTab nodes; - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - GenericNamedSelSetList &setList = patchData->GetSelSet(this); - BitArray *set = setList.GetSet(setName); - if (set) - { - BitArray *bits = new BitArray(*set); - clip->sets.Append(1, &bits); - } - } - SetPatchNamedSelClip(clip, namedClipLevel[selLevel]); - - // Enable the paste button - ICustButton *but = GetICustButton(GetDlgItem(hSelectPanel, IDC_NS_PASTE)); - but->Enable(); - ReleaseICustButton(but); -} - -void EditPatchMod::NSPaste() -{ - MaybeFixupNamedSels(); - if (selLevel == EP_OBJECT) - return; - int nsl = namedSetLevel[selLevel]; - PatchNamedSelClip *clip = GetPatchNamedSelClip(namedClipLevel[selLevel]); - if (!clip) - return; - TSTR name = clip->name; - if (!GetUniqueSetName(name)) - return; - if (!ip) - return; - - ModContextList mcList; - INodeTab nodes; - - AddSet(name, selLevel); - - ip->GetModContexts(mcList, nodes); - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - GenericNamedSelSetList & setList = patchData->GetSelSet(this); - - if (i >= clip->sets.Count()) - { - BitArray bits; - setList.AppendSet(bits, 0, name); - } - else - setList.AppendSet(*clip->sets[i], 0, name); - } - - ActivateSubSelSet(name); - ip->SetCurNamedSelSet(name); - SetupNamedSelDropDown(); -} - -// Old MAX files (pre-r3) have EditPatchData named selections without names assigned. This -// assigns them their proper names for r3 and later code. If no fixup is required, this does nothing. -void EditPatchMod::MaybeFixupNamedSels() -{ - int i; - if (!ip) - return; - - // Go thru the modifier contexts, and stuff the named selection names into the EditPatchData - ModContextList mcList; - INodeTab nodes; - - ip->GetModContexts(mcList, nodes); - -#ifdef DBG_NAMEDSELS - DebugPrint("Context/named sels:\n"); - for (i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - // Go thru each subobject level - for (int j = 0; j < 3; ++j) - { - GenericNamedSelSetList &pdSel = patchData->GetSelSet(j); - for (int k = 0; k < pdSel.Count(); ++k) - DebugPrint("Context %d, level %d, set %d: [%s]\n", i, j, k, *pdSel.names[k]); - } - } -#endif // DBG_NAMEDSELS - - if (!namedSelNeedsFixup) - { -#ifdef DBG_NAMEDSELS - DebugPrint("!!! NO FIXUP REQUIRED !!!\n"); -#endif // DBG_NAMEDSELS - return; - } - -#ifdef DBG_NAMEDSELS - DebugPrint("*** Fixing up named sels ***\n"); -#endif // DBG_NAMEDSELS - - for (i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - // Go thru each subobject level - for (int j = 0; j < 3; ++j) - { - Tab < TSTR*> &mSel = namedSel[j]; - GenericNamedSelSetList &pdSel = patchData->GetSelSet(j); - // Some old files may have improper counts in the EditPatchData. Limit the counter - int mc = mSel.Count(); - int pdc = pdSel.Count(); - int limit =(mc < pdc) ? mc : pdc; -#ifdef DBG_NAMEDSELS - if (mc != pdc) - DebugPrint("****** mSel.Count=%d, pdSel.Count=%d ******\n", mc, pdc); -#endif // DBG_NAMEDSELS - for (int k = 0; k < limit; ++k) - *pdSel.names[k] = *mSel[k]; - } - } - - nodes.DisposeTemporary(); - namedSelNeedsFixup = FALSE; -} - -void EditPatchMod::RemoveAllSets() -{ - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - - int j; - for (j = patchData->vselSet.Count() - 1; j >= 0; j--) - { - patchData->vselSet.DeleteSet(j); - } - for (j = patchData->pselSet.Count() - 1; j >= 0; j--) - { - patchData->pselSet.DeleteSet(j); - } - for (j = patchData->eselSet.Count() - 1; j >= 0; j--) - { - patchData->eselSet.DeleteSet(j); - } - } - - for (int j = 0; j < 3; j++) - { - for (int i = 0; i < namedSel[j].Count(); i++) - { - delete namedSel[j][i]; - } - namedSel[j].Resize(0); - } - - ip->ClearCurNamedSelSet(); - ip->ClearSubObjectNamedSelSets(); - nodes.DisposeTemporary(); -} - -Interval EditPatchMod::LocalValidity(TimeValue t) -{ - // Force a cache if being edited. - if (TestAFlag(A_MOD_BEING_EDITED)) - return NEVER; - return FOREVER; -} - -RefTargetHandle EditPatchMod::Clone(RemapDir& remap) -{ - EditPatchMod* newmod = new EditPatchMod(); - newmod->selLevel = selLevel; - newmod->displaySurface = displaySurface; - newmod->displayLattice = displayLattice; - newmod->meshSteps = meshSteps; - // 3-18-99 to suport render steps and removal of the mental tesselator - newmod->meshStepsRender = meshStepsRender; - newmod->showInterior = showInterior; - - // newmod->meshAdaptive = meshAdaptive; // Future use (Not used now) - newmod->transitionType = transitionType; - newmod->tileLevel = tileLevel; - newmod->tileMode = tileMode; - newmod->includeMeshes = includeMeshes; - newmod->keepMapping = keepMapping; - newmod->viewTess = viewTess; - newmod->prodTess = prodTess; - newmod->dispTess = dispTess; - newmod->mViewTessNormals = mViewTessNormals; - newmod->mProdTessNormals = mProdTessNormals; - newmod->mViewTessWeld = mViewTessWeld; - newmod->mProdTessWeld = mProdTessWeld; - newmod->propagate = propagate; - return (newmod); -} - -void EditPatchMod::ClearPatchDataFlag(ModContextList& mcList, DWORD f) -{ - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - patchData->SetFlag(f, FALSE); - } -} - -void EditPatchMod::XFormHandles(XFormProc *xproc, TimeValue t, Matrix3& partm, Matrix3& tmAxis, int object, int handleIndex) -{ -ModContextList mcList; -INodeTab nodes; -Matrix3 mat, imat, theMatrix; -Interval valid; -int numAxis; -Point3 oldpt, newpt, oldin, oldout, rel; -BOOL shiftPressed = FALSE; -static BOOL wasBroken; -Point3 theKnot; -Point3 oldVector; -Point3 newVector; -float oldLen; -float newLen; -// DebugPrint("XFormHandles\n"); -shiftPressed =(GetKeyState(VK_SHIFT) & 0x8000) ? TRUE : FALSE; - -if (!ip) - return; - -ip->GetModContexts(mcList, nodes); -numAxis = ip->GetNumAxis(); -ClearPatchDataFlag(mcList, EPD_BEENDONE); - -EditPatchData *patchData =(EditPatchData*)mcList[object]->localData; -if (!patchData) -{ - nodes.DisposeTemporary(); - return; -} - -// If the mesh isn't yet cache, this will cause it to get cached. -RPatchMesh *rpatch; -PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); -if (!patch) -{ - nodes.DisposeTemporary(); - return; -} - -// If this is the first edit, then the delta arrays will be allocated -patchData->BeginEdit(t); - -// Create a change record for this object and store a pointer to its delta info in this EditPatchData -if (!TestAFlag(A_HELD)) -{ - patchData->vdelta.SetSize(*patch, FALSE); - if (theHold.Holding()) - { - theHold.Put(new PatchRestore(patchData, this, patch, rpatch, "XFormHandles")); - } - patchData->vdelta.Zero(); // Reset all deltas - patchData->ClearHandleFlag(); - wasBroken = FALSE; -} -else -{ - if (wasBroken && !shiftPressed) - wasBroken = FALSE; - if (patchData->DoingHandles()) - patchData->ApplyHandlesAndZero(*patch); // Reapply the slave handle deltas - else - patchData->vdelta.Zero(); -} - -patchData->SetHandleFlag(handleIndex); -int primaryKnot = patch->vecs[handleIndex].vert; -Point3Tab &pDeltas = patchData->vdelta.dtab.vtab; - -tmAxis = ip->GetTransformAxis(nodes[object], primaryKnot); -mat = nodes[object]->GetObjectTM(t, &valid) * Inverse(tmAxis); -imat = Inverse(mat); -xproc->SetMat(mat); - -// XForm the cache vertices -oldpt = patch->vecs[handleIndex].p; -newpt = xproc->proc(oldpt, mat, imat); - -// Update the vector being moved -patch->vecs[handleIndex].p = newpt; - -// Move the delta's vertices. -patchData->vdelta.SetVec(handleIndex, newpt - oldpt); - -if (primaryKnot >= 0) -{ - PatchVert &vert = patch->verts[primaryKnot]; - theKnot = vert.p; - // If locked handles, turn the movement into a transformation matrix - // and transform all the handles attached to the owner vertex - if (lockedHandles) - { - if (!wasBroken && shiftPressed) - wasBroken = TRUE; - goto locked_handles; - } - else - { - if (shiftPressed) - { - wasBroken = TRUE; - vert.flags &= ~PVERT_COPLANAR; - // Need to record this for undo! - patchData->vdelta.SetVertType(primaryKnot, PVERT_COPLANAR); - } - // If a coplanar knot, do the other vectors! - // If at the same point as knot, do nothing! - if ((vert.flags & PVERT_COPLANAR) &&(vert.vectors.Count() > 2) && !(newpt == theKnot)) - { -locked_handles: - oldVector = oldpt - theKnot; - newVector = newpt - theKnot; - oldLen = Length(oldVector); - newLen = Length(newVector); - Point3 oldNorm = Normalize(oldVector); - Point3 newNorm = Normalize(newVector); - theMatrix.IdentityMatrix(); - Point3 axis; - float angle = 0.0f; - int owner = patch->vecs[handleIndex].vert; - if (owner >= 0) - { - PatchVert &vert = patch->verts[owner]; - int vectors = vert.vectors.Count(); - // Watch out for cases where the vectors are exactly opposite -- This - // results in an invalid axis for transformation! - // In this case, we look for a vector to one of the other handles that - // will give us a useful vector for the rotational axis - if (newNorm == -oldNorm) - { - for (int v = 0; v < vectors; ++v) - { - int theVec = vert.vectors[v]; - // Ignore the vector being moved! - if (theVec != handleIndex) - { - Point3 testVec = patch->vecs[theVec].p - pDeltas[theVec] - theKnot; - if (testVec != zeroPoint) - { - Point3 testNorm = Normalize(testVec); - if (!(testNorm == newNorm) && !(testNorm == oldNorm)) - { - // Cross product gives us the normal of the rotational axis - axis = Normalize(testNorm ^ newNorm); - // The angle is 180 degrees - angle = PI; - goto build_matrix; - } - } - } - } - } - else - { - // Get a matrix that will transform the old point to the new one - // Cross product gives us the normal of the rotational axis - axis = Normalize(oldNorm ^ newNorm); - // Dot product gives us the angle - float dot = DotProd(oldNorm, newNorm); - if (dot >= -1.0f && dot <= 1.0f) - angle =(float) - acos(dot); - } -build_matrix: - if (angle != 0.0f) - { - // Now let's build a matrix that'll do this for us! - Quat quat = QFromAngAxis(angle, axis); - quat.MakeMatrix(theMatrix); - if (lockedHandles) - { - // If need to break the vector, - if (shiftPressed && vert.flags & PVERT_COPLANAR) - { - vert.flags &= ~PVERT_COPLANAR; - patchData->vdelta.SetVertType(primaryKnot, PVERT_COPLANAR); - } - } - } - // Process all other handles through the matrix - for (int v = 0; v < vectors; ++v) - { - int theVec = vert.vectors[v]; - // Ignore the vector being moved! - if (theVec != handleIndex) - { - Point3 oldpt2 = patch->vecs[theVec].p - pDeltas[theVec]; - Point3 newpt2 =(oldpt2 - theKnot) * theMatrix + theKnot; - patch->vecs[theVec].p = newpt2; - // Move the delta's vertices. - patchData->vdelta.SetVec(theVec, newpt2 - oldpt2); - } - } - } - } - } - } - - // Really only need to do this if neighbor knots are non-bezier - patch->computeInteriors(); - - patchData->UpdateChanges(patch, rpatch); - rpatch->InvalidateBindingPos (); - patchData->TempData(this)->Invalidate(PART_GEOM); - patchData->SetFlag(EPD_BEENDONE, TRUE); - - // Mark all objects in selection set - SetAFlag(A_HELD); - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_GEOM, REFMSG_CHANGE); -} - -void EditPatchMod::XFormVerts( - XFormProc *xproc, - TimeValue t, - Matrix3& partm, - Matrix3& tmAxis) -{ -ModContextList mcList; -INodeTab nodes; -Matrix3 mat, imat; -Interval valid; -int numAxis; -Point3 oldpt, newpt, rel, delta; -int shiftPressed =(GetKeyState(VK_SHIFT) & 0x8000) ? 1 : 0; -static BOOL wasBroken; -static BOOL handleEdit = FALSE; -static int handleObject; -static int handleIndex; - -if (!ip) - return; - -ip->GetModContexts(mcList, nodes); -numAxis = ip->GetNumAxis(); -ClearPatchDataFlag(mcList, EPD_BEENDONE); - -if (!TestAFlag(A_HELD)) -{ - handleEdit = FALSE; - // DebugPrint("Handle edit cleared\n"); - // Check all patches to see if they are altering a bezier vector handle... - if (selLevel == EP_VERTEX) - { - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - - if (!ip->SelectionFrozen() && patch->bezVecVert >= 0) - { - // Editing a bezier handle -- Go do it! - handleEdit = TRUE; - handleObject = i; - handleIndex = patch->bezVecVert; - goto edit_handles; - } - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - } -} - -// If editing the handles, cut to the chase! -if (handleEdit) -{ -edit_handles: -XFormHandles(xproc, t, partm, tmAxis, handleObject, handleIndex); -nodes.DisposeTemporary(); -return; -} - -// Not doing handles, just plain ol' verts -ClearPatchDataFlag(mcList, EPD_BEENDONE); // Clear these out again -for (int i = 0; i < mcList.Count(); i++) -{ - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->GetFlag(EPD_BEENDONE)) - continue; - - // If the mesh isn't yet cache, this will cause it to get cached. - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - if (!patch) - continue; - - // If this is the first edit, then the delta arrays will be allocated - patchData->BeginEdit(t); - - // Create a change record for this object and store a pointer to its delta info in this EditPatchData - if (!TestAFlag(A_HELD)) - { - patchData->vdelta.SetSize(*patch, FALSE); - if (theHold.Holding()) - { - // Hulud: here, i pass a NULL pointer because rpatch are not modified by xform - theHold.Put(new PatchRestore(patchData, this, patch, NULL, "XFormVerts")); - } - patchData->vdelta.Zero(); // Reset all deltas - patchData->ClearHandleFlag(); - wasBroken = FALSE; - } - else - { - if (wasBroken) - shiftPressed = TRUE; - if (patchData->DoingHandles()) - patchData->ApplyHandlesAndZero(*patch); // Reapply the slave handle deltas - else - patchData->vdelta.Zero(); - } - - // Compute the transforms - if (numAxis == NUMAXIS_INDIVIDUAL) - { - switch (selLevel) - { - case EP_VERTEX: - { - // Selected vertices - either directly or indirectly through selected faces or edges. - BitArray sel = patch->VertexTempSel(); - int verts = patch->numVerts; - for (int vert = 0; vert < verts; vert++) - { - if (sel[vert]) - { - tmAxis = ip->GetTransformAxis(nodes[i], vert); - mat = nodes[i]->GetObjectTM(t, &valid) * Inverse(tmAxis); - imat = Inverse(mat); - xproc->SetMat(mat); - - // XForm the cache vertices - oldpt = patch->verts[vert].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->verts[vert].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVert(vert, delta); - - // Also affect its vectors - int vecs = patch->verts[vert].vectors.Count(); - for (int vec = 0; vec < vecs; ++vec) - { - int index = patch->verts[vert].vectors[vec]; - // XForm the cache vertices - oldpt = patch->vecs[index].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->vecs[index].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVec(index, delta); - } - } - } - patch->computeInteriors(); // Kind of broad-spectrum -- only need to recompute affected patches - } - break; - case EP_EDGE: - case EP_PATCH: - { - // Selected vertices - either directly or indirectly through selected faces or edges. - BitArray sel = patch->VertexTempSel(); - int verts = patch->numVerts; - for (int vert = 0; vert < verts; vert++) - { - if (sel[vert]) - { - tmAxis = ip->GetTransformAxis(nodes[i], vert); - mat = nodes[i]->GetObjectTM(t, &valid) * Inverse(tmAxis); - imat = Inverse(mat); - xproc->SetMat(mat); - - // XForm the cache vertices - oldpt = patch->verts[vert].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->verts[vert].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVert(vert, delta); - - // Also affect its vectors - int vecs = patch->verts[vert].vectors.Count(); - for (int vec = 0; vec < vecs; ++vec) - { - int index = patch->verts[vert].vectors[vec]; - // XForm the cache vertices - oldpt = patch->vecs[index].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->vecs[index].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVec(index, delta); - } - } - } - patch->computeInteriors(); - } - break; - } - } - else - { - mat = nodes[i]->GetObjectTM(t, &valid) * Inverse(tmAxis); - imat = Inverse(mat); - xproc->SetMat(mat); - - // Selected vertices - either directly or indirectly through selected faces or edges. - BitArray sel = patch->VertexTempSel(); - int verts = patch->numVerts; - for (int vert = 0; vert < verts; vert++) - { - if (sel[vert]) - { - // XForm the cache vertices - oldpt = patch->verts[vert].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->verts[vert].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVert(vert, delta); - - // Also affect its vectors - int vecs = patch->verts[vert].vectors.Count(); - for (int vec = 0; vec < vecs; ++vec) - { - int index = patch->verts[vert].vectors[vec]; - // XForm the cache vertices - oldpt = patch->vecs[index].p; - newpt = xproc->proc(oldpt, mat, imat); - patch->vecs[index].p = newpt; - delta = newpt - oldpt; - - // Move the delta's vertices. - patchData->vdelta.MoveVec(index, delta); - } - } - } - patch->computeInteriors(); - } - rpatch->InvalidateBindingPos (); - patchData->UpdateChanges(patch, NULL); // Hulud: here, i pass a NULL pointer because rpatch are not modified by xform - patchData->TempData(this)->Invalidate(PART_GEOM); - patchData->SetFlag(EPD_BEENDONE, TRUE); - } - - // Mark all objects in selection set - SetAFlag(A_HELD); - - nodes.DisposeTemporary(); - ClearPatchDataFlag(mcList, EPD_BEENDONE); - NotifyDependents(FOREVER, PART_GEOM, REFMSG_CHANGE); -} - -void EditPatchMod::Move(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin) -{ - MoveXForm proc(val); - XFormVerts(&proc, t, partm, tmAxis); -} - -void EditPatchMod::Rotate(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Quat& val, BOOL localOrigin) -{ - RotateXForm proc(val); - XFormVerts(&proc, t, partm, tmAxis); -} - -void EditPatchMod::Scale(TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin) -{ - ScaleXForm proc(val); - XFormVerts(&proc, t, partm, tmAxis); -} - -void EditPatchMod::TransformStart(TimeValue t) -{ - if (ip) - ip->LockAxisTripods(TRUE); -} - -void EditPatchMod::TransformFinish(TimeValue t) -{ - if (ip) - ip->LockAxisTripods(FALSE); - UpdateSelectDisplay(); - - if (!ip) - return; - ModContextList mcList; - INodeTab nodes; - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - patchData->UpdateChanges(patch, rpatch, FALSE); - } -} - -void EditPatchMod::TransformCancel(TimeValue t) -{ - if (ip) - ip->LockAxisTripods(FALSE); -} - -void EditPatchMod::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node) -{ - // Alert(_T("in ModifyObject")); - nlassert(os->obj->ClassID() == RYKOLPATCHOBJ_CLASS_ID); - // Alert(_T("ModifyObject class ID is OK")); - - RPO *patchOb =(RPO*)os->obj; - EditPatchData *patchData; - - if (!mc.localData) - { - mc.localData = new EditPatchData(this); - patchData =(EditPatchData*)mc.localData; - meshSteps = patchData->meshSteps = patchOb->GetMeshSteps(); - // 3-18-99 to suport render steps and removal of the mental tesselator - meshStepsRender = patchData->meshStepsRender = patchOb->GetMeshStepsRender(); - showInterior = patchData->showInterior = patchOb->GetShowInterior(); - - // meshAdaptive = patchData->meshAdaptive = patchOb->GetAdaptive(); // Future use (Not used now) - tileLevel = patchData->tileLevel = patchOb->rpatch->rTess.TileTesselLevel; - transitionType = patchData->transitionType = patchOb->rpatch->rTess.TransitionType; - tileMode = patchData->tileMode = patchOb->rpatch->rTess.ModeTile; - keepMapping = patchData->keepMapping = patchOb->rpatch->rTess.KeepMapping; - viewTess = patchData->viewTess = patchOb->GetViewTess(); - prodTess = patchData->prodTess = patchOb->GetProdTess(); - dispTess = patchData->dispTess = patchOb->GetDispTess(); - mViewTessNormals = patchData->mViewTessNormals = patchOb->GetViewTessNormals(); - mProdTessNormals = patchData->mProdTessNormals = patchOb->GetProdTessNormals(); - mViewTessWeld = patchData->mViewTessWeld = patchOb->GetViewTessWeld(); - mProdTessWeld = patchData->mProdTessWeld = patchOb->GetProdTessWeld(); - displayLattice = patchData->displayLattice = patchOb->ShowLattice(); - displaySurface = patchData->displaySurface = patchOb->showMesh; - } else - { - patchData =(EditPatchData*)mc.localData; - } - - PatchMesh &pmesh = patchOb->patch; - nlassert(pmesh.numVerts == pmesh.vertSel.GetSize()); - nlassert(pmesh.getNumEdges() == pmesh.edgeSel.GetSize()); - nlassert(pmesh.numPatches == pmesh.patchSel.GetSize()); - - patchData->Apply(t, patchOb, selLevel); -} - -void EditPatchMod::NotifyInputChanged(Interval changeInt, PartID partID, RefMessage message, ModContext *mc) -{ - if (mc->localData) - { - EditPatchData *patchData =(EditPatchData*)mc->localData; - if (patchData) - { - // The FALSE parameter indicates the the mesh cache itself is - // invalid in addition to any other caches that depend on the - // mesh cache. - patchData->Invalidate(partID, FALSE); - } - } -} - -void EditPatchMod::SetDisplaySurface(BOOL sw) -{ - sw = TRUE; - displaySurface = sw; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - patchData->displaySurface = sw; - - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetDisplayLattice(BOOL sw) -{ - displayLattice = sw; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - patchData->displayLattice = sw; - - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - if (sw) - patch->SetDispFlag(DISP_LATTICE); - else - patch->ClearDispFlag(DISP_LATTICE); - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetPropagate(BOOL sw) -{ - propagate = sw; -} - -void EditPatchMod::SetMeshSteps(int steps) -{ - meshSteps = steps; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patch->SetMeshSteps(steps); - patchData->meshSteps = steps; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetTileMode (bool bTile) -{ - tileMode=bTile; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - rpatch->rTess.ModeTile=bTile; - patchData->tileMode=bTile; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetKeepMapping (bool bKeep) -{ - keepMapping=bKeep; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - rpatch->rTess.KeepMapping=bKeep; - patchData->keepMapping=bKeep; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetTileSteps(int steps) -{ - tileLevel=steps; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - rpatch->rTess.TileTesselLevel=steps; - patchData->tileLevel=steps; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetTransitionLevel(int transition) -{ - transitionType=transition; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - rpatch->rTess.TransitionType=transition; - patchData->transitionType=transition; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -// 3-18-99 to suport render steps and removal of the mental tesselator -void EditPatchMod::SetMeshStepsRender(int steps) -{ - meshStepsRender = steps; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patch->SetMeshStepsRender(steps); - patchData->meshStepsRender = steps; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -void EditPatchMod::SetShowInterior(BOOL si) -{ - showInterior = si; - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - if (!patch) - continue; - - patch->SetShowInterior(si); - patchData->showInterior = si; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - nodes.DisposeTemporary(); - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); -} - -/* -// Future use (Not used now) -void EditPatchMod::SetMeshAdaptive(BOOL sw) -{ -meshAdaptive = sw; -ModContextList mcList; -INodeTab nodes; - -if (!ip) -return; - -ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime()); - patch->SetAdaptive(sw); - patchData->meshAdaptive = sw; - if (patchData->tempData) - { - patchData->TempData(this)->Invalidate(PART_DISPLAY); - } - } - NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ip->RedrawViews(ip->GetTime(), REDRAW_NORMAL); - } -*/ - - -int EditPatchMod::SubObjectIndex(HitRecord *hitRec) -{ - EditPatchData *patchData =(EditPatchData*)hitRec->modContext->localData; - if (!patchData) - return 0; - if (!ip) - return 0; - TimeValue t = ip->GetTime(); - PatchHitData *hit =(PatchHitData *)(hitRec->hitData); - switch (selLevel) - { - case EP_VERTEX: - { - if (hit->type != PATCH_HIT_VERTEX) - return 0; - int hitIndex = hit->index; - return hitIndex; - } - case EP_EDGE: - { - int hitIndex = hit->index; - return hitIndex; - } - case EP_PATCH: - { - int hitIndex = hit->index; - return hitIndex; - } - case EP_TILE: - { - int hitIndex = hit->index; - return hitIndex; - } - default: - return 0; - } -} - -void EditPatchMod::GetSubObjectTMs( - SubObjAxisCallback *cb, TimeValue t, INode *node, ModContext *mc) -{ - Interval valid; - if (mc->localData) - { - EditPatchData *patchData =(EditPatchData*)mc->localData; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch); - // Watch out -- The system can call us even if we didn't get a valid patch object - if (!patch) - return; - - switch (selLevel) - { - case EP_VERTEX: - { - Matrix3 otm = node->GetObjectTM(t, &valid); - Matrix3 tm = node->GetNodeTM(t, &valid); - BitArray sel = patch->VertexTempSel(); - int count = sel.GetSize(); - for (int i = 0; i < count; ++i) - { - if (sel[i]) - { - tm.SetTrans(patch->verts[i].p * otm); - cb->TM(tm, i); - } - } - break; - } - case EP_EDGE: - case EP_PATCH: - { - Matrix3 otm = node->GetObjectTM(t, &valid); - Matrix3 tm = node->GetNodeTM(t, &valid); - Box3 box; - BitArray sel = patch->VertexTempSel(); - int count = sel.GetSize(); - for (int i = 0; i < count; i++) - { - if (sel[i]) - box += patch->verts[i].p; - } - tm.SetTrans(otm * box.Center()); - cb->TM(tm, 0); - break; - } - case EP_TILE: - { - bool bHasSel; - Matrix3 pt=rpatch->GetSelTileTm(*patch, t, node, bHasSel); - if (bHasSel) - cb->TM(pt, 0); - break; - } - } - } -} - -void EditPatchMod::GetSubObjectCenters( - SubObjAxisCallback *cb, TimeValue t, INode *node, ModContext *mc) -{ - Interval valid; - Matrix3 tm = node->GetObjectTM(t, &valid); - - nlassert(ip); - if (mc->localData) - { - EditPatchData *patchData =(EditPatchData*)mc->localData; - RPatchMesh *rpatch; - PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); - - rpatch->UpdateBinding (*patch, t); - - // Watch out -- The system can call us even if we didn't get a valid patch object - if (!patch) - return; - - switch (selLevel) - { - case EP_VERTEX: - { - Box3 box; - BitArray sel = patch->VertexTempSel(); - int verts = patch->numVerts; - for (int i = 0; i < verts; i++) - { - if (sel[i]) - cb->Center(patch->verts[i].p * tm, i); - } - break; - } - case EP_EDGE: - case EP_PATCH: - { - Box3 box; - BOOL bHasSel = FALSE; - BitArray sel = patch->VertexTempSel(); - int verts = patch->numVerts; - for (int i = 0; i < verts; i++) - { - if (sel[i]) - { - box += patch->verts[i].p * tm; - bHasSel = TRUE; - } - } - if (bHasSel) - cb->Center(box.Center(), 0); - break; - } - case EP_TILE: - { - bool bHasSel; - Point3 pt=rpatch->GetSelTileCenter(*patch, t, node, bHasSel); - if (bHasSel) - cb->Center(pt, 0); - break; - } - default: - cb->Center(tm.GetTrans(), 0); - break; - } - } -} - - -BOOL EditPatchMod::DependOnTopology(ModContext &mc) -{ - EditPatchData *patchData =(EditPatchData*)mc.localData; - if (patchData) - { - if (patchData->GetFlag(EPD_HASDATA)) - { - return TRUE; - } - } - return FALSE; -} - -void EditPatchMod::DeletePatchDataTempData() -{ - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (patchData->tempData) - { - delete patchData->tempData; - } - patchData->tempData = NULL; - } - nodes.DisposeTemporary(); -} - - -void EditPatchMod::CreatePatchDataTempData() -{ - ModContextList mcList; - INodeTab nodes; - - if (!ip) - return; - ip->GetModContexts(mcList, nodes); - - for (int i = 0; i < mcList.Count(); i++) - { - EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; - if (!patchData) - continue; - if (!patchData->tempData) - { - patchData->tempData = new EPTempData(this, patchData); - } - } - nodes.DisposeTemporary(); -} - -//-------------------------------------------------------------- - -void EditPatchMod::SetRememberedVertType(int type) -{ - if (rememberedPatch) - ChangeRememberedVert(type); - else - ChangeSelVerts(type); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_GUI_Bind.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_GUI_Bind.cpp deleted file mode 100644 index 4b3d4b6b4..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_GUI_Bind.cpp +++ /dev/null @@ -1,311 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - -void EPM_BindCMode::EnterMode() - { - if (pobj->hOpsPanel) - { - ICustButton *but = GetICustButton(GetDlgItem(pobj->hOpsPanel, IDC_BIND)); - but->SetCheck(TRUE); - ReleaseICustButton(but); - } - } - -void EPM_BindCMode::ExitMode() - { - if (pobj->hOpsPanel) - { - ICustButton *but = GetICustButton(GetDlgItem(pobj->hOpsPanel, IDC_BIND)); - but->SetCheck(FALSE); - ReleaseICustButton(but); - } - } - -/*-------------------------------------------------------------------*/ - -HCURSOR EPM_BindMouseProc::GetTransformCursor() - { - static HCURSOR hCur = NULL; - - if (!hCur) - { - hCur = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_SEGREFINECUR)); - } - - return hCur; - } - -BOOL EPM_BindMouseProc::HitTest( - ViewExp *vpt, IPoint2 *p, int type, int flags, int subType) - { - vpt->ClearSubObjHitList(); - SetPatchHitOverride(subType); - - ip->SubObHitTest(ip->GetTime(), type, ip->GetCrossing(), flags, p, vpt); - ClearPatchHitOverride(); - if (vpt->NumSubObjHits()) - { - return TRUE; - } else - { - return FALSE; - } - } - -BOOL EPM_BindMouseProc::HitAKnot(ViewExp *vpt, IPoint2 *p, int *vert) -{ - int first = 1; - - if (HitTest(vpt, p, HITTYPE_POINT, 0, 1)) - { - HitLog &hits = vpt->GetSubObjHitList(); - HitRecord *rec = hits.First(); - DWORD best = 9999; - HitRecord *bestRec; - while (rec) - { - PatchHitData *hit =((PatchHitData *)rec->hitData); - // If there's an exclusion shape, this must be a part of it! - pMesh = hit->patch; - - if (1) - { - if (hit->type == PATCH_HIT_VERTEX) - { - - // If there's an exclusion shape, the vert & poly can't be the same! - if (first || rec->distance < best) - { - first = 0; - best = rec->distance; - bestRec = rec; - } - } - } - rec = rec->Next(); - } - if (!first) - { - PatchHitData *hit =((PatchHitData *)bestRec->hitData); - *vert = hit->index; - return TRUE; - } - } - return FALSE; -} - - -BOOL EPM_BindMouseProc::HitASegment(ViewExp *vpt, IPoint2 *p, int *seg) -{ - int first = 1; - - if (HitTest(vpt, p, HITTYPE_POINT, 0, 2)) - { - HitLog &hits = vpt->GetSubObjHitList(); - HitRecord *rec = hits.First(); - DWORD best = 9999; - HitRecord *bestRec; - while (rec) - { - PatchHitData *hit =((PatchHitData *)rec->hitData); - // If there's an exclusion shape, this must be a part of it! - if (pMesh == hit->patch) - { - if (hit->type == PATCH_HIT_EDGE) - { - - // If there's an exclusion shape, the vert & poly can't be the same! - if (first || rec->distance < best) - { - first = 0; - best = rec->distance; - bestRec = rec; - } - } - } - rec = rec->Next(); - } - if (!first) - { - PatchHitData *hit =((PatchHitData *)bestRec->hitData); - *seg = hit->index; - return TRUE; - } - } - return FALSE; - } - -static void PatchXORDottedLine(HWND hwnd, IPoint2 p0, IPoint2 p1) -{ - HDC hdc; - hdc = GetDC(hwnd); - SetROP2(hdc, R2_XORPEN); - SetBkMode(hdc, TRANSPARENT); - SelectObject(hdc, CreatePen(PS_DOT, 0, RGB(255, 255, 255))); - MoveToEx(hdc, p0.x, p0.y, NULL); - LineTo(hdc, p1.x, p1.y); - DeleteObject(SelectObject(hdc, GetStockObject(BLACK_PEN))); - ReleaseDC(hwnd, hdc); -} - - -int EPM_BindMouseProc::proc( - HWND hwnd, - int msg, - int point, - int flags, - IPoint2 m) -{ - ViewExp *vpt = ip->GetViewport(hwnd); - int res = TRUE; - static PatchMesh *shape1 = NULL; - static int poly1, vert1, seg1; - static IPoint2 anchor, lastPoint; - - switch (msg) - { - case MOUSE_PROPCLICK: - ip->SetStdCommandMode(CID_OBJMOVE); - break; - - case MOUSE_POINT: - switch (point) - { - case 0: - { - if (HitAKnot(vpt, &m, &vert1)) - { - //if (rpatch->UIVertex[vert1].binded) - { - res = TRUE; - anchor = lastPoint = m; - PatchXORDottedLine(hwnd, anchor, m); // Draw it! - // get valid seg list - /*knotList.SetSize(pMesh->numVerts); - knotList.ClearAll(); - for (int i = 0; i < pMesh->numEdges; i++) - { - if (pMesh->edges[i].v1 == vert1) - { - knotList.Set(pMesh->edges[i].v2); - - } - if (pMesh->edges[i].v2 == vert1) - { - knotList.Set(pMesh->edges[i].v1); - } - }*/ - - tab.build (*pMesh); - } - } - - else res = FALSE; - - break; - } - case 1: - PatchXORDottedLine(hwnd, anchor, lastPoint); // Erase it! -// if(HitAnEndpoint(vpt, &m, shape1, poly1, vert1, NULL, &poly2, &vert2)) -// ss->DoVertConnect(vpt, shape1, poly1, vert1, poly2, vert2); - if (HitASegment(vpt, &m, &seg1)) - { -// if a valid segemtn change cursor - /*int a = pMesh->edges[seg1].v1; - int b = pMesh->edges[seg1].v2; - if (knotList[a] && knotList[b]) - pobj->DoAddHook(pMesh, vert1, seg1);*/ - int v0, v1, v2, v3; - switch (CheckBind (vert1, seg1, v0, v1, v2, v3, tab, *pMesh, false, true)) - { - case 0: - pobj->DoAddHook(pMesh, v2, vert1, v3, seg1, 0); - break; - case 1: - pobj->DoAddHook(pMesh, v2, vert1, v3, seg1, 1); - break; - case -1: - break; - default: - nlassert (0); - } - } - res = FALSE; - break; - default: - nlassert(0); - } - break; - - case MOUSE_MOVE: - // Erase old dotted line - PatchXORDottedLine(hwnd, anchor, lastPoint); - // Draw new dotted line - PatchXORDottedLine(hwnd, anchor, m); - lastPoint = m; - if (HitASegment(vpt, &m, &seg1)) - { -// if a valid segemtn change cursor - /*int a = pMesh->edges[seg1].v1; - int b = pMesh->edges[seg1].v2; - if (knotList[a] && knotList[b]) - SetCursor(LoadCursor(hInstance, MAKEINTRESOURCE(IDC_TH_SELCURSOR))); - else SetCursor(LoadCursor(NULL, IDC_ARROW));*/ - int v0, v1, v2, v3; - if (CheckBind (vert1, seg1, v0, v1, v2, v3, tab, *pMesh, false, true)!=-1) - SetCursor(LoadCursor(hInstance, MAKEINTRESOURCE(IDC_TH_SELCURSOR))); - else - SetCursor(LoadCursor(NULL, IDC_ARROW)); - } - else - { - SetCursor(LoadCursor(NULL, IDC_ARROW)); - } - - break; - - case MOUSE_FREEMOVE: - if (HitAKnot(vpt, &m, &vert1)) - { - SetCursor(LoadCursor(hInstance, MAKEINTRESOURCE(IDC_TH_SELCURSOR))); - } - else - { - SetCursor(LoadCursor(NULL, IDC_ARROW)); - } -/* - if (HitTest(vpt, &m, HITTYPE_POINT, HIT_ABORTONHIT, 1)) - { - HitLog &hits = vpt->GetSubObjHitList(); - HitRecord *rec = hits.First(); - if (rec) - { - SetCursor(LoadCursor(hInstance, MAKEINTRESOURCE(IDC_TH_SELCURSOR))); - } - } - SetCursor(LoadCursor(NULL, IDC_ARROW)); -*/ - break; - - case MOUSE_ABORT: - // Erase old dotted line - PatchXORDottedLine(hwnd, anchor, lastPoint); - break; - } - - if (vpt) - ip->ReleaseViewport(vpt); - return res; -} - -/*-------------------------------------------------------------------*/ - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Main.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Main.cpp deleted file mode 100644 index a6592893b..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Main.cpp +++ /dev/null @@ -1,341 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -INT_PTR CALLBACK PatchSelectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchOpsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchObjSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchSurfDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchTileDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); -INT_PTR CALLBACK PatchEdgeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); - -extern void CancelEditPatchModes(IObjParam *ip); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// This function checks the current command mode and resets it to CID_OBJMOVE if -// it's one of our command modes -void CancelEditPatchModes(IObjParam *ip) -{ - switch (ip->GetCommandMode()->ID()) - { - case CID_STDPICK: - ip->SetStdCommandMode(CID_OBJMOVE); - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// This gets rid of two-step modes, like booleans. This is necessary because -// the first step, which activates the mode button, validates the selection set. -// If the selection set changes, the mode must be turned off because the new -// selection set may not be valid for the mode. -void Cancel2StepPatchModes(IObjParam *ip) -{ - // switch(ip->GetCommandMode()->ID()) { - // case CID_BOOLEAN: - // ip->SetStdCommandMode( CID_OBJMOVE ); - // break; - // } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// -------------------------------------------------------------------- -// IPatchSelect and IPatchOps interfaces (JBW 2/2/99) -void* EditPatchMod::GetInterface(ULONG id) -{ - switch (id) - { - case I_PATCHSELECT: - return (IPatchSelect*)this; - case I_PATCHSELECTDATA: - return (IPatchSelectData*)this; - case I_PATCHOPS: - return (IPatchOps*)this; - case I_SUBMTLAPI: - return (ISubMtlAPI*)this; - } - return Modifier::GetInterface(id); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::StartCommandMode(patchCommandMode mode) -{ - switch (mode) - { - case PcmAttach: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_ATTACH, 0); - break; - case PcmExtrude: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_EP_EXTRUDE, 0); - break; - case PcmBevel: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_EP_BEVEL, 0); - break; - case PcmBind: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_BIND, 0); - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::ButtonOp(patchButtonOp opcode) -{ - switch (opcode) - { - case PopUnbind: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_UNBIND, 0); - break; - case PopHide: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_HIDE, 0); - break; - case PopUnhideAll: - if (hOpsPanel != NULL) - PostMessage(hOpsPanel, WM_COMMAND, IDC_UNHIDE, 0); - break; - case PopWeld: - if (hOpsPanel != NULL && GetSubobjectLevel() == PO_VERTEX) - PostMessage(hOpsPanel, WM_COMMAND, IDC_WELD, 0); - break; - case PopDelete: - if (hOpsPanel != NULL && GetSubobjectLevel() >= PO_VERTEX) - PostMessage(hOpsPanel, WM_COMMAND, IDC_PATCH_DELETE, 0); - break; - case PopSubdivide: - if (hOpsPanel != NULL && GetSubobjectLevel() >= PO_EDGE && GetSubobjectLevel() != PO_TILE) - PostMessage(hOpsPanel, WM_COMMAND, IDC_SUBDIVIDE, 0); - break; - case PopAddTri: - if (hOpsPanel != NULL && GetSubobjectLevel() == PO_EDGE) - PostMessage(hOpsPanel, WM_COMMAND, IDC_ADDTRI, 0); - break; - case PopAddQuad: - if (hOpsPanel != NULL && GetSubobjectLevel() == PO_EDGE) - PostMessage(hOpsPanel, WM_COMMAND, IDC_ADDQUAD, 0); - break; - case PopDetach: - if (hOpsPanel != NULL && GetSubobjectLevel() == PO_PATCH) - PostMessage(hOpsPanel, WM_COMMAND, IDC_DETACH, 0); - break; - } -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::BeginEditParams(IObjParam *ip, ULONG flags, Animatable *prev) -{ - this->ip = ip; - - patchUIValid = FALSE; - CreatePatchDataTempData(); - - hSelectPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SELECT), - PatchSelectDlgProc, GetString(IDS_TH_SELECTION), (LPARAM)this, rsSel ? 0 : APPENDROLL_CLOSED); - hOpsPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_OPS), - PatchOpsDlgProc, GetString(IDS_TH_GEOMETRY), (LPARAM) this, rsOps ? 0 : APPENDROLL_CLOSED); - /* watje 3 - 18 - 99 - if (selLevel == EP_OBJECT) - { - hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF_OBJ), - PatchObjSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); - } - else - */ - if (selLevel == EP_PATCH) - { - hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF), - PatchSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); - } - else - hSurfPanel = NULL; - - if (selLevel == EP_TILE) - { - hTilePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_TILE), - PatchTileDlgProc, "Tile Properties", (LPARAM) this, rsTile ? 0 : APPENDROLL_CLOSED); - } - else - hTilePanel = NULL; - - if (selLevel == EP_EDGE) - { - hEdgePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_EDGE), - PatchEdgeDlgProc, "Edge Properties", (LPARAM) this, rsEdge ? 0 : APPENDROLL_CLOSED); - } - else - hEdgePanel = NULL; - - // Create sub object editing modes. - moveMode = new MoveModBoxCMode(this, ip); - rotMode = new RotateModBoxCMode(this, ip); - uscaleMode = new UScaleModBoxCMode(this, ip); - nuscaleMode = new NUScaleModBoxCMode(this, ip); - squashMode = new SquashModBoxCMode(this, ip); - selectMode = new SelectModBoxCMode(this, ip); - extrudeMode = new EPM_ExtrudeCMode(this, ip); - bevelMode = new EPM_BevelCMode(this, ip); - bindMode = new EPM_BindCMode(this, ip); - - - // Add our sub object type - TSTR type1(GetString(IDS_TH_VERTEX)); - TSTR type2(GetString(IDS_TH_EDGE)); - TSTR type3(GetString(IDS_TH_PATCH)); - TSTR type4("Tile"); - const TCHAR *ptype[] = { type1, type2, type3 , type4 }; - ip->RegisterSubObjectTypes(ptype, 4); - - // Restore the selection level. - ip->SetSubObjectLevel(selLevel); - - // Disable show end result. - ip->EnableShowEndResult(FALSE); - - // Setup named selection sets - SetupNamedSelDropDown(); - - // Update selection UI display - SelectionChanged(); - - TimeValue t = ip->GetTime(); - NotifyDependents(Interval(t, t), PART_ALL, REFMSG_BEGIN_EDIT); - NotifyDependents(Interval(t, t), PART_ALL, REFMSG_MOD_DISPLAY_ON); - SetAFlag(A_MOD_BEING_EDITED); -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::EndEditParams(IObjParam *ip, ULONG flags, Animatable *next) -{ - if (hSelectPanel) - { - rsSel = IsRollupPanelOpen(hSelectPanel); - ip->DeleteRollupPage(hSelectPanel); - hSelectPanel = NULL; - } - if (hOpsPanel) - { - rsOps = IsRollupPanelOpen(hOpsPanel); - ip->DeleteRollupPage(hOpsPanel); - hOpsPanel = NULL; - } - if (hSurfPanel) - { - rsSurf = IsRollupPanelOpen(hSurfPanel); - ip->DeleteRollupPage(hSurfPanel); - hSurfPanel = NULL; - } - if (hTilePanel) - { - rsTile = IsRollupPanelOpen(hTilePanel); - ip->DeleteRollupPage(hTilePanel); - hTilePanel = NULL; - } - if (hEdgePanel) - { - rsEdge = IsRollupPanelOpen(hEdgePanel); - ip->DeleteRollupPage(hEdgePanel); - hEdgePanel = NULL; - } - - // Enable show end result - ip->EnableShowEndResult(TRUE); - - CancelEditPatchModes(ip); - - if (ip->GetCommandMode()->ID()==CID_EP_PAINT) - ip->SetStdCommandMode(CID_OBJMOVE); - - TimeValue t = ip->GetTime(); - NotifyDependents(Interval(t, t), PART_ALL, REFMSG_END_EDIT); - NotifyDependents(Interval(t, t), PART_ALL, REFMSG_MOD_DISPLAY_OFF); - ClearAFlag(A_MOD_BEING_EDITED); - - DeletePatchDataTempData(); - this->ip = NULL; - - // if ( ip->GetCommandMode()->ID() == CID_EP_EXTRUDE ) ip->SetStdCommandMode( CID_OBJMOVE ); - // if ( ip->GetCommandMode()->ID() == CID_EP_BEVEL ) ip->SetStdCommandMode( CID_OBJMOVE ); - - ip->DeleteMode(moveMode); - ip->DeleteMode(rotMode); - ip->DeleteMode(uscaleMode); - ip->DeleteMode(nuscaleMode); - ip->DeleteMode(squashMode); - ip->DeleteMode(selectMode); - ip->DeleteMode(extrudeMode); - ip->DeleteMode(bevelMode); - ip->DeleteMode(bindMode); - - if (moveMode) - delete moveMode; - moveMode = NULL; - if (rotMode) - delete rotMode; - rotMode = NULL; - if (uscaleMode) - delete uscaleMode; - uscaleMode = NULL; - if (nuscaleMode) - delete nuscaleMode; - nuscaleMode = NULL; - if (squashMode) - delete squashMode; - squashMode = NULL; - if (selectMode) - delete selectMode; - selectMode = NULL; - - if (extrudeMode) - delete extrudeMode; - extrudeMode = NULL; - - if (bevelMode) - delete bevelMode; - bevelMode = NULL; - if (bindMode) - delete bindMode; - bindMode = NULL; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -EditPatchMod::EditPatchMod() -{ - selLevel = EP_OBJECT; - displayLattice = TRUE; - displaySurface = TRUE; - propagate = TRUE; - meshSteps = 5; - transitionType = 1; - channelModified = EDITPAT_CHANNELS; - // 3-18-99 to suport render steps and removal of the mental tesselator - meshStepsRender = 5; - showInterior = TRUE; - - namedSelNeedsFixup = FALSE; - includeMeshes=false; - // meshAdaptive = FALSE; // Future use (Not used now) -} - -EditPatchMod::~EditPatchMod() -{ - ClearSetNames(); -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchPointTab.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchPointTab.cpp deleted file mode 100644 index 87208dfc8..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchPointTab.cpp +++ /dev/null @@ -1,197 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern Point3 zeroPoint; - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -PatchPointTab::PatchPointTab() -{ -} - -PatchPointTab::~PatchPointTab() -{ -} - -void PatchPointTab::Empty() -{ - ptab.Delete(0, ptab.Count()); - vtab.Delete(0, vtab.Count()); - pttab.Delete(0, pttab.Count()); -} - -void PatchPointTab::Zero() -{ - // DebugPrint("Zeroing\n"); - int points = ptab.Count(); - int vectors = vtab.Count(); - Point3 zero(0, 0, 0); - - int i; - for (i = 0; i < points; ++i) - { - ptab[i] = zero; - pttab[i] = 0; - } - for (i = 0; i < vectors; ++i) - vtab[i] = zero; -} - -void PatchPointTab::MakeCompatible(PatchMesh& patch, int clear) -{ - int izero = 0; - if (clear) - { - ptab.Delete(0, ptab.Count()); - pttab.Delete(0, pttab.Count()); - vtab.Delete(0, vtab.Count()); - } - // First, the verts - int size = patch.numVerts; - if (ptab.Count() > size) - { - int diff = ptab.Count() - size; - ptab.Delete(ptab.Count() - diff, diff); - pttab.Delete(pttab.Count() - diff, diff); - } - if (ptab.Count() < size) - { - int diff = size - ptab.Count(); - ptab.Resize(size); - pttab.Resize(size); - for (int j = 0; j < diff; j++) - { - ptab.Append(1, &zeroPoint); - pttab.Append(1, &izero); - } - } - // Now, the vectors - size = patch.numVecs; - if (vtab.Count() > size) - { - int diff = vtab.Count() - size; - vtab.Delete(vtab.Count() - diff, diff); - } - if (vtab.Count() < size) - { - int diff = size - vtab.Count(); - vtab.Resize(size); - for (int j = 0; j < diff; j++) - vtab.Append(1, &zeroPoint); - } -} - -PatchPointTab& PatchPointTab::operator=(PatchPointTab& from) -{ - ptab = from.ptab; - vtab = from.vtab; - pttab = from.pttab; - return *this; -} - -BOOL PatchPointTab::IsCompatible(PatchMesh &patch) -{ - if (ptab.Count() != patch.numVerts) - return FALSE; - if (pttab.Count() != patch.numVerts) - return FALSE; - if (vtab.Count() != patch.numVecs) - return FALSE; - return TRUE; -} - -void PatchPointTab::RescaleWorldUnits(float f) -{ - Matrix3 stm = ScaleMatrix(Point3(f, f, f)); - int points = ptab.Count(); - int vectors = vtab.Count(); - - int i; - for (i = 0; i < points; ++i) - ptab[i] = ptab[i] * stm; - for (i = 0; i < vectors; ++i) - vtab[i] = vtab[i] * stm; -} - -#define PPT_VERT_CHUNK 0x1000 -#define PPT_VEC_CHUNK 0x1010 -#define PPT_VERTTYPE_CHUNK 0x1020 - -IOResult PatchPointTab::Save(ISave *isave) -{ - int i; - ULONG nb; - isave->BeginChunk(PPT_VERT_CHUNK); - int count = ptab.Count(); - isave->Write(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - isave->Write(&ptab[i], sizeof(Point3), &nb); - isave->EndChunk(); - isave->BeginChunk(PPT_VERTTYPE_CHUNK); - count = pttab.Count(); - isave->Write(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - isave->Write(&pttab[i], sizeof(int), &nb); - isave->EndChunk(); - isave->BeginChunk(PPT_VEC_CHUNK); - count = vtab.Count(); - isave->Write(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - isave->Write(&vtab[i], sizeof(Point3), &nb); - isave->EndChunk(); - return IO_OK; -} - -IOResult PatchPointTab::Load(ILoad *iload) -{ - int i, count; - Point3 workpt; - int workint; - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PPT_VERT_CHUNK: - ptab.Delete(0, ptab.Count()); - iload->Read(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - { - iload->Read(&workpt, sizeof(Point3), &nb); - ptab.Append(1, &workpt); - } - break; - case PPT_VERTTYPE_CHUNK: - pttab.Delete(0, pttab.Count()); - iload->Read(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - { - iload->Read(&workint, sizeof(int), &nb); - pttab.Append(1, &workint); - } - break; - case PPT_VEC_CHUNK: - vtab.Delete(0, vtab.Count()); - iload->Read(&count, sizeof(int), &nb); - for (i = 0; i < count; ++i) - { - iload->Read(&workpt, sizeof(Point3), &nb); - vtab.Append(1, &workpt); - } - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchRestore.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchRestore.cpp deleted file mode 100644 index 02ff6e93f..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchRestore.cpp +++ /dev/null @@ -1,123 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void Cancel2StepPatchModes(IObjParam *ip); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -PatchRestore::PatchRestore(EditPatchData* pd, EditPatchMod* mod, PatchMesh *patch, RPatchMesh *rpatch, TCHAR *id) -{ - gotRedo = FALSE; - epd = pd; - this->mod = mod; - oldPatch = *patch; - - roldPatch=NULL; - rnewPatch=NULL; - - // rpatch - if (rpatch) - { - roldPatch=new RPatchMesh(); - *roldPatch = *rpatch; - } - - t = mod->ip->GetTime(); - where = TSTR(id); -} - -PatchRestore::~PatchRestore() -{ - if (roldPatch) - delete roldPatch; - if (rnewPatch) - delete rnewPatch; -} - -void PatchRestore::Restore(int isUndo) -{ - if (epd->tempData && epd->TempData(mod)->PatchCached(t)) - { - RPatchMesh *rpatch; - PatchMesh *patch = epd->TempData(mod)->GetPatch(t,rpatch); - if (patch) - { - if (isUndo && !gotRedo) - { - newPatch = *patch; - - // rpatch - if (!rnewPatch) - rnewPatch = new RPatchMesh(); - - *rnewPatch = *rpatch; - - gotRedo = TRUE; - } - } - DWORD selLevel = patch->selLevel; // Grab this... - DWORD dispFlags = patch->dispFlags; // Grab this... - *patch = oldPatch; - - if (roldPatch) - *rpatch = *roldPatch; - - patch->selLevel = selLevel; // ...and put it back in - patch->dispFlags = dispFlags; // ...and put it back in - patch->InvalidateGeomCache(); - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT); - } - else - if (epd->tempData) - { - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE); - } - if (mod->ip) - Cancel2StepPatchModes(mod->ip); - mod->InvalidateSurfaceUI(); - mod->SelectionChanged(); - mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE); -} - -void PatchRestore::Redo() -{ - if (epd->tempData && epd->TempData(mod)->PatchCached(t)) - { - RPatchMesh *rpatch; - PatchMesh *patch = epd->TempData(mod)->GetPatch(t,rpatch); - if (patch) - { - DWORD selLevel = patch->selLevel; // Grab this... - DWORD dispFlags = patch->dispFlags; // Grab this... - *patch = newPatch; - - nlassert (rnewPatch); // should not be NULL - *rpatch = *rnewPatch; - - patch->selLevel = selLevel; // ...and put it back in - patch->dispFlags = dispFlags; // ...and put it back in - patch->InvalidateGeomCache(); - } - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT); - } - else - if (epd->tempData) - { - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE); - } - if (mod->ip) - Cancel2StepPatchModes(mod->ip); - mod->InvalidateSurfaceUI(); - mod->SelectionChanged(); - mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE); -} - - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchSelRestore.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchSelRestore.cpp deleted file mode 100644 index 6107114b0..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchSelRestore.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void Cancel2StepPatchModes(IObjParam *ip); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -PatchSelRestore::PatchSelRestore(EditPatchData* pd, EditPatchMod* mod, PatchMesh *patch) -{ - gotRedo = FALSE; - epd = pd; - this->mod = mod; - oldVSel = patch->vertSel; - oldESel = patch->edgeSel; - oldPSel = patch->patchSel; - t = mod->ip->GetTime(); -} - -void PatchSelRestore::Restore(int isUndo) -{ - if (epd->tempData && epd->TempData(mod)->PatchCached(t)) - { - RPatchMesh *rpatch; - PatchMesh *patch = epd->TempData(mod)->GetPatch(t, rpatch); - if (patch) - { - if (isUndo && !gotRedo) - { - newVSel = patch->vertSel; - newESel = patch->edgeSel; - newPSel = patch->patchSel; - gotRedo = TRUE; - } - } - patch->vertSel = oldVSel; - patch->edgeSel = oldESel; - patch->patchSel = oldPSel; - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT); - } - else - if (epd->tempData) - { - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE); - } - if (mod->ip) - Cancel2StepPatchModes(mod->ip); - mod->InvalidateSurfaceUI(); - // mod->PatchSelChanged(); - // mod->UpdateSelectDisplay(); - mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE); -} - -void PatchSelRestore::Redo() -{ - if (epd->tempData && epd->TempData(mod)->PatchCached(t)) - { - RPatchMesh *rpatch; - PatchMesh *patch = epd->TempData(mod)->GetPatch(t,rpatch); - if (patch) - { - patch->vertSel = newVSel; - patch->edgeSel = newESel; - patch->patchSel = newPSel; - } - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT); - } - else - if (epd->tempData) - { - epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE); - } - if (mod->ip) - Cancel2StepPatchModes(mod->ip); - mod->InvalidateSurfaceUI(); - // mod->PatchSelChanged(); - // mod->UpdateSelectDisplay(); - mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchVertexDelta.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchVertexDelta.cpp deleted file mode 100644 index c0ce52823..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchVertexDelta.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - -void PatchVertexDelta::SetSize(PatchMesh& patch, BOOL load) -{ - dtab.MakeCompatible(patch, FALSE); - - // Load it if necessary - if (load) - { - int verts = patch.numVerts; - int vecs = patch.numVecs; - int i; - for (i = 0; i < verts; ++i) - { - dtab.ptab[i] = patch.verts[i].p; - dtab.pttab[i] = patch.verts[i].flags & PVERT_COPLANAR; - } - for (i = 0; i < vecs; ++i) - dtab.vtab[i] = patch.vecs[i].p; - } -} - -void PatchVertexDelta::Apply(PatchMesh &patch) -{ - // DebugPrint(_T("PVD:Applying\n")); - // This does nothing if the number of verts hasn't changed in the mesh. - SetSize(patch, FALSE); - - // Apply the deltas - int verts = patch.numVerts; - int vecs = patch.numVecs; - int i; - for (i = 0; i < verts; ++i) - { - patch.verts[i].p += dtab.ptab[i]; - patch.verts[i].flags ^= dtab.pttab[i]; - } - for (i = 0; i < vecs; ++i) - { - patch.vecs[i].p += dtab.vtab[i]; - } - patch.computeInteriors(); -} - -void PatchVertexDelta::UnApply(PatchMesh &patch) -{ - // DebugPrint(_T("PVD:UnApplying\n")); - // This does nothing if the number of verts hasn't changed in the mesh. - SetSize(patch, FALSE); - - // Apply the deltas - int verts = patch.numVerts; - int vecs = patch.numVecs; - int i; - for (i = 0; i < verts; ++i) - { - patch.verts[i].p -= dtab.ptab[i]; - patch.verts[i].flags ^= dtab.pttab[i]; - } - for (i = 0; i < vecs; ++i) - { - patch.vecs[i].p -= dtab.vtab[i]; - } - patch.computeInteriors(); -} - -// This function applies the current changes to slave handles and their knots, and zeroes everything else -void PatchVertexDelta::ApplyHandlesAndZero(PatchMesh &patch, int handleVert) -{ - // DebugPrint(_T("PVD:ApplyAndZero\n")); - // This does nothing if the number of verts hasn't changed in the mesh. - SetSize(patch, FALSE); - - Point3 zeroPt(0.0f, 0.0f, 0.0f); - - // Apply the deltas to just the slave handles - int verts = patch.numVerts; - int vecs = patch.numVecs; - Point3Tab& delta = dtab.vtab; - IntTab& kdelta = dtab.pttab; - int i; - for (i = 0; i < vecs; ++i) - { - if (!(delta[i] == zeroPt)) - { - if (i != handleVert) - patch.vecs[i].p += delta[i]; - else - delta[i] = zeroPt; - } - } - - for (i = 0; i < verts; ++i) - { - if (kdelta[i]) - patch.verts[i].flags ^= kdelta[i]; - } -} - - -#define PVD_POINTTAB_CHUNK 0x1000 - -IOResult PatchVertexDelta::Save(ISave *isave) -{ - isave->BeginChunk(PVD_POINTTAB_CHUNK); - dtab.Save(isave); - isave-> EndChunk(); - return IO_OK; -} - -IOResult PatchVertexDelta::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PVD_POINTTAB_CHUNK: - res = dtab.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PickPatchAttach.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PickPatchAttach.cpp deleted file mode 100644 index e9250b21b..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PickPatchAttach.cpp +++ /dev/null @@ -1,138 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PickPatchAttach::Filter(INode *node) -{ - ModContextList mcList; - INodeTab nodes; - if (node) - { - // Make sure the node does not depend on us - node->BeginDependencyTest(); - ep->NotifyDependents(FOREVER, 0, REFMSG_TEST_DEPENDENCY); - if (node->EndDependencyTest()) - return FALSE; - - ObjectState os = node->GetObjectRef()->Eval(ep->ip->GetTime()); - GeomObject *object =(GeomObject *)os.obj; - // Make sure it isn't one of the nodes we're editing, for heaven's sake! - ep->ip->GetModContexts(mcList, nodes); - int numNodes = nodes.Count(); - for (int i = 0; i < numNodes; ++i) - { - if (nodes[i] == node) - { - nodes.DisposeTemporary(); - return FALSE; - } - } - if (object->CanConvertToType(RYKOLPATCHOBJ_CLASS_ID)) - { - nodes.DisposeTemporary(); - return TRUE; - } - } - nodes.DisposeTemporary(); - return FALSE; -} - -BOOL PickPatchAttach::HitTest( - IObjParam *ip, HWND hWnd, ViewExp *vpt, IPoint2 m, int flags) -{ - INode *node = ip->PickNode(hWnd, m, this); - ModContextList mcList; - INodeTab nodes; - - if (node) - { - ObjectState os = node->GetObjectRef()->Eval(ip->GetTime()); - GeomObject *object =(GeomObject *)os.obj; - // Make sure it isn't one of the nodes we're editing, for heaven's sake! - ep->ip->GetModContexts(mcList, nodes); - int numNodes = nodes.Count(); - for (int i = 0; i < numNodes; ++i) - { - if (nodes[i] == node) - { - nodes.DisposeTemporary(); - return FALSE; - } - } - if (object->CanConvertToType(RYKOLPATCHOBJ_CLASS_ID)) - { - nodes.DisposeTemporary(); - return TRUE; - } - } - - nodes.DisposeTemporary(); - return FALSE; -} - -BOOL PickPatchAttach::Pick(IObjParam *ip, ViewExp *vpt) -{ - INode *node = vpt->GetClosestHit(); - nlassert(node); - GeomObject *object =(GeomObject *)node->GetObjectRef()->Eval(ip->GetTime()).obj; - if (object->CanConvertToType(RYKOLPATCHOBJ_CLASS_ID)) - { - RPO *attPatch =(RPO *)object->ConvertToType(ip->GetTime(), RYKOLPATCHOBJ_CLASS_ID); - if (attPatch) - { - PatchMesh patch = attPatch->patch; - RPatchMesh rpatch = *attPatch->rpatch; - ModContextList mcList; - INodeTab nodes; - ip->GetModContexts(mcList, nodes); - BOOL res = TRUE; - if (nodes[0]->GetMtl() && node->GetMtl() &&(nodes[0]->GetMtl() != node->GetMtl())) - res = DoAttachMatOptionDialog(ep->ip, ep); - if (res) - { - bool canUndo = TRUE; - ep->DoAttach(node, &patch, &rpatch, canUndo); - if (!canUndo) - GetSystemSetting(SYSSET_CLEAR_UNDO); - } - nodes.DisposeTemporary(); - // Discard the copy it made, if it isn't the same as the object itself - if (attPatch !=(PatchObject *)object) - delete attPatch; - } - } - return FALSE; -} - - -void PickPatchAttach::EnterMode(IObjParam *ip) -{ - if (ep->hOpsPanel) - { - ICustButton *but = GetICustButton(GetDlgItem(ep->hOpsPanel, IDC_ATTACH)); - but->SetCheck(TRUE); - ReleaseICustButton(but); - } -} - -void PickPatchAttach::ExitMode(IObjParam *ip) -{ - if (ep->hOpsPanel) - { - ICustButton *but = GetICustButton(GetDlgItem(ep->hOpsPanel, IDC_ATTACH)); - but->SetCheck(FALSE); - ReleaseICustButton(but); - } -} - -HCURSOR PickPatchAttach::GetHitCursor(IObjParam *ip) -{ - return LoadCursor(hInstance, MAKEINTRESOURCE(IDC_ATTACHCUR)); -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Record.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Record.cpp deleted file mode 100644 index 47338c7e1..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Record.cpp +++ /dev/null @@ -1,895 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -extern void DeletePatchParts(PatchMesh *patch, RPatchMesh *rpatch, BitArray &delVerts, BitArray &delPatches); - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -static BOOL IsCompatible(BitArray &a, BitArray &b) -{ - return (a.GetSize() == b.GetSize()) ? TRUE : FALSE; -} - - -BOOL ClearPVertSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->vertSel; - patch->vertSel.ClearAll(); - return TRUE; -} - -#define CVSR_SEL_CHUNK 0x1000 - -IOResult ClearPVertSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case CVSR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - -BOOL SetPVertSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->vertSel; - patch->vertSel.SetAll(); - return TRUE; -} - -#define SVSR_SEL_CHUNK 0x1000 - -IOResult SetPVertSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case SVSR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL InvertPVertSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - patch->vertSel = ~patch->vertSel; - return TRUE; -} - -IOResult InvertPVertSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - // switch(iload->CurChunkID()) { - // default: - // break; - // } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL ClearPEdgeSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->edgeSel; - patch->edgeSel.ClearAll(); - return TRUE; -} - -#define CESR_SEL_CHUNK 0x1000 - -IOResult ClearPEdgeSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case CESR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL SetPEdgeSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->edgeSel; - patch->edgeSel.SetAll(); - return TRUE; -} - -#define SESR_SEL_CHUNK 0x1000 - -IOResult SetPEdgeSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case SESR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL InvertPEdgeSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - patch->edgeSel = ~patch->edgeSel; - return TRUE; -} - -IOResult InvertPEdgeSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - // switch(iload->CurChunkID()) { - // default: - // break; - // } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL ClearPatchSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->patchSel; - patch->patchSel.ClearAll(); - return TRUE; -} - -#define CPSR_SEL_CHUNK 0x1000 - -IOResult ClearPatchSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case CPSR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL SetPatchSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - sel = patch->patchSel; - patch->patchSel.SetAll(); - return TRUE; -} - -#define SPSR_SEL_CHUNK 0x1000 - -IOResult SetPatchSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case SPSR_SEL_CHUNK: - res = sel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL InvertPatchSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - patch->patchSel = ~patch->patchSel; - return TRUE; -} - -IOResult InvertPatchSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - // switch(iload->CurChunkID()) { - // default: - // break; - // } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PVertSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (!IsCompatible(patch->vertSel, newSel)) - return FALSE; - patch->vertSel = newSel; - return TRUE; -} - -#define VSR_OLDSEL_CHUNK 0x1000 -#define VSR_NEWSEL_CHUNK 0x1010 - -IOResult PVertSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case VSR_OLDSEL_CHUNK: - res = oldSel.Load(iload); - break; - case VSR_NEWSEL_CHUNK: - res = newSel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PEdgeSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (!IsCompatible(patch->edgeSel, newSel)) - return FALSE; - patch->edgeSel = newSel; - return TRUE; -} - -#define ESR_OLDSEL_CHUNK 0x1000 -#define ESR_NEWSEL_CHUNK 0x1010 - -IOResult PEdgeSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case ESR_OLDSEL_CHUNK: - res = oldSel.Load(iload); - break; - case ESR_NEWSEL_CHUNK: - res = newSel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PatchSelRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (!IsCompatible(patch->patchSel, newSel)) - return FALSE; - patch->patchSel = newSel; - return TRUE; -} - -#define PSR_OLDSEL_CHUNK 0x1000 -#define PSR_NEWSEL_CHUNK 0x1010 - -IOResult PatchSelRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PSR_OLDSEL_CHUNK: - res = oldSel.Load(iload); - break; - case PSR_NEWSEL_CHUNK: - res = newSel.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define PDELR_PATCH_CHUNK 0x1060 - -IOResult PatchDeleteRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - // switch(iload->CurChunkID()) { - // case PDELR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - // } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PVertMoveRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (!delta.IsCompatible(*patch)) - return FALSE; - delta.Apply(*patch); - return TRUE; -} - -#define VMR_DELTA_CHUNK 0x1000 - -IOResult PVertMoveRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case VMR_DELTA_CHUNK: - res = delta.Load(iload); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - - -extern void DeleteSelVerts(PatchMesh *patch, RPatchMesh *rpatch); - -BOOL PVertDeleteRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - DeleteSelVerts(patch, rpatch); - return TRUE; -} - -#define VDELR_PATCH_CHUNK 0x1060 - -IOResult PVertDeleteRecord::Load(ILoad *iload) -{ - IOResult res; - while (IO_OK == (res = iload->OpenChunk())) - { - // switch(iload->CurChunkID()) { - // case VDELR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - // } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PVertChangeRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - patch->ChangeVertType(index, type); - return TRUE; -} - -#define VCHG_GENERAL_CHUNK 0x1001 -#define VCHG_PATCH_CHUNK 0x1010 - -IOResult PVertChangeRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case VCHG_GENERAL_CHUNK: - res = iload->Read(&index, sizeof(int), &nb); - res = iload->Read(&type, sizeof(int), &nb); - break; - // case VCHG_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PAttachRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - oldPatchCount = patch->numPatches; - patch->Attach(&attPatch, mtlOffset); - return TRUE; -} - -#define ATTR_GENERAL_CHUNK 0x1001 -#define ATTR_ATTPATCH_CHUNK 0x1010 -#define ATTR_MTLOFFSET_CHUNK 0x1020 - -IOResult PAttachRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case ATTR_GENERAL_CHUNK: - res = iload->Read(&oldPatchCount, sizeof(int), &nb); - break; - case ATTR_ATTPATCH_CHUNK: - res = attPatch.Load(iload); - break; - case ATTR_MTLOFFSET_CHUNK: - res = iload->Read(&mtlOffset, sizeof(int), &nb); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PatchDetachRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord && !copy) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - if (!copy) - { - BitArray vdel(patch->numVerts); - vdel.ClearAll(); - BitArray pdel = patch->patchSel; - DeletePatchParts(patch, rpatch, vdel, pdel); - } - return TRUE; -} - -#define PDETR_GENERAL_CHUNK 0x1000 -#define PDETR_PATCH_CHUNK 0x1030 - -IOResult PatchDetachRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PDETR_GENERAL_CHUNK: - res = iload->Read(©, sizeof(int), &nb); - break; - // case PDETR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PatchMtlRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - for (int i = 0; i < patch->numPatches; ++i) - { - if (patch->patchSel[i]) - patch->patches[i].setMatID(index); - } - return TRUE; -} - -#define PMTLR_GENERAL_CHUNK 0x1000 -#define PMTLR_INDEX_CHUNK 0x1020 - -IOResult PatchMtlRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PMTLR_INDEX_CHUNK: - res = iload->Read(&index, sizeof(MtlID), &nb); - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void ChangePatchType(PatchMesh *patch, int index, int type) -{ - // If positive vertex number, do it to just one vertex - if (index >= 0) - { - patch->patches[index].flags = type; - patch->computeInteriors(); - return; - } - - // Otherwise, do it to all selected vertices! - int patches = patch->numPatches; - BitArray &psel = patch->patchSel; - for (int i = 0; i < patches; ++i) - { - if (psel[i]) - patch->patches[i].flags = type; - } - patch->computeInteriors(); -} - - - -BOOL PatchChangeRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (index >= 0 && index >= patch->numPatches) - return FALSE; - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - ChangePatchType(patch, index, type); - return TRUE; -} - -#define PCHG_GENERAL_CHUNK 0x1001 -#define PCHG_PATCH_CHUNK 0x1010 - -IOResult PatchChangeRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PCHG_GENERAL_CHUNK: - res = iload->Read(&index, sizeof(int), &nb); - res = iload->Read(&type, sizeof(int), &nb); - break; - // case PCHG_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define PADDR_TYPE_CHUNK 0x1000 -#define PADDR_PATCH_CHUNK 0x1010 -#define PADDR_POSTWELD_CHUNK 0x1020 - -IOResult PatchAddRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - postWeld = FALSE; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PADDR_TYPE_CHUNK: - res = iload->Read(&type, sizeof(int), &nb); - break; - // case PADDR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - // If the following chunk is present, it's a MAX 2.0 file and a post-addition - // weld is to be performed - case PADDR_POSTWELD_CHUNK: - postWeld = TRUE; - break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -// Compute midpoint division for patch vectors -- Provide patchmesh, patch number, 4 bez points -// returns 2 new vectors -/* -static Point3 InterpPoint(PatchMesh *patch, int index, float pct, int e1, int i1, int i2, int e2, Point3 *v1 = NULL, Point3 *v2 = NULL, Point3 *v3 = NULL, Point3 *v4 = NULL) -{ - PatchVec *v = patch->vecs; - Patch &p = patch->patches[index]; - Point3 pe1 = v[p.vec[e1]].p; - Point3 pe2 = v[p.vec[e2]].p; - Point3 pi1 = v[p.interior[i1]].p; - Point3 pi2 = v[p.interior[i2]].p; - Point3 e1i1 = pe1 +(pi1 - pe1) * pct; - Point3 i1i2 = pi1 +(pi2 - pi1) * pct; - Point3 i2e2 = pi2 +(pe2 - pi2) * pct; - Point3 a = e1i1 +(i1i2 - e1i1) * pct; - Point3 b = i1i2 +(i2e2 - i1i2) * pct; - if (v1) - *v1 = e1i1; - if (v2) - *v2 = a; - if (v3) - *v3 = b; - if (v4) - *v4 = i2e2; - return a +(b - a) * pct; -} - -static Point3 InterpPoint(float pct, Point3 e1, Point3 i1, Point3 i2, Point3 e2, Point3 *v1 = NULL, Point3 *v2 = NULL, Point3 *v3 = NULL, Point3 *v4 = NULL) -{ - Point3 e1i1 = e1 +(i1 - e1) * pct; - Point3 i1i2 = i1 +(i2 - i1) * pct; - Point3 i2e2 = i2 +(e2 - i2) * pct; - Point3 a = e1i1 +(i1i2 - e1i1) * pct; - Point3 b = i1i2 +(i2e2 - i1i2) * pct; - if (v1) - *v1 = e1i1; - if (v2) - *v2 = a; - if (v3) - *v3 = b; - if (v4) - *v4 = i2e2; - return a +(b - a) * pct; -} - -static Point3 InterpLinear(Point3 a, Point3 b, float interp) -{ - return a +(a - b) * interp; -} - -static Point3 InterpDegree2(Point3 a, Point3 b, Point3 c, float interp) -{ - Point3 ab = a +(b - a) * interp; - Point3 bc = b +(c - b) * interp; - return ab +(bc - ab) * interp; -} - -static Point3 InterpDegree3(Point3 a, Point3 b, Point3 c, Point3 d, float interp) -{ - Point3 ab = a +(b - a) * interp; - Point3 bc = b +(c - b) * interp; - Point3 cd = c +(d - c) * interp; - Point3 abbc = ab +(bc - ab) * interp; - Point3 bccd = bc +(cd - bc) * interp; - return abbc +(bccd - abbc) * interp; -} -*/ -extern void SubdividePatch(int type, BOOL propagate, PatchMesh *patch, RPatchMesh *rpatch); - -BOOL EdgeSubdivideRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - SubdividePatch(SUBDIV_EDGES, propagate, patch, rpatch); - return TRUE; -} - -#define ESUBR_PROPAGATE_CHUNK 0x1000 -#define ESUBR_PATCH_CHUNK 0x1010 - -IOResult EdgeSubdivideRecord::Load(ILoad *iload) -{ - IOResult res; - propagate = FALSE; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case ESUBR_PROPAGATE_CHUNK: - propagate = TRUE; - break; - // case ESUBR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -BOOL PatchSubdivideRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - SubdividePatch(SUBDIV_PATCHES, propagate, patch, rpatch); - return TRUE; -} - -#define PSUBR_PROPAGATE_CHUNK 0x1000 -#define PSUBR_PATCH_CHUNK 0x1010 - -IOResult PatchSubdivideRecord::Load(ILoad *iload) -{ - IOResult res; - propagate = FALSE; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case PSUBR_PROPAGATE_CHUNK: - propagate = TRUE; - break; - // case PSUBR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} - -BOOL PVertWeldRecord::Redo(PatchMesh *patch, RPatchMesh *rpatch, int reRecord) -{ - if (reRecord) - { - oldPatch = *patch; - roldPatch = *rpatch; - } - patch->Weld(thresh); - return TRUE; -} - -#define WELDR_THRESH_CHUNK 0x1010 -#define WELDR_PATCH_CHUNK 0x1000 - -IOResult PVertWeldRecord::Load(ILoad *iload) -{ - IOResult res; - ULONG nb; - propagate = FALSE; - while (IO_OK == (res = iload->OpenChunk())) - { - switch (iload->CurChunkID()) - { - case WELDR_THRESH_CHUNK: - res = iload->Read(&thresh, sizeof(float), &nb); - break; - // case WELDR_PATCH_CHUNK: - // res = oldPatch.Load(iload); - // break; - } - iload->CloseChunk(); - if (res != IO_OK) - return res; - } - return IO_OK; -} diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Rollup.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Rollup.cpp deleted file mode 100644 index 22b06376b..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_Rollup.cpp +++ /dev/null @@ -1,816 +0,0 @@ -#include "stdafx.h" -#include "editpat.h" - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -#define DBGWELD_DUMPx -#define DBGWELD_ACTIONx -#define DBG_NAMEDSELSx - -#define PROMPT_TIME 2000 - -extern int attachReorient; -extern float weldThreshold; -extern PatchRightMenu pMenu; -extern PatchDeleteUser pDel; -static int patchDetachCopy = 0; -static int patchDetachReorient = 0; -; -int lockedHandles = 0; -HIMAGELIST hFaceImages = NULL; -BOOL filterVerts = TRUE; -static BOOL filterVecs = TRUE; - - -static void SetVertFilter() -{ - patchHitLevel[EP_VERTEX] =(filterVerts ? SUBHIT_PATCH_VERTS : 0) |(filterVecs ? SUBHIT_PATCH_VECS : 0); -} - - -extern void CancelEditPatchModes(IObjParam *ip); -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -extern void LoadImages(); - -INT_PTR CALLBACK PatchSelectDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - static char string[64]; - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - ICustToolbar *iToolbar; - if (!ep && message != WM_INITDIALOG) - return FALSE; - - switch (message) - { - case WM_INITDIALOG: - { - // Get the module path - HMODULE hModule = GetModuleHandle("neleditpatch.dlm"); - if (hModule) - { - // Get module file name - char moduldeFileName[512]; - if (GetModuleFileName (hModule, moduldeFileName, 512)) - { - // Get version info size - DWORD doomy; - uint versionInfoSize=GetFileVersionInfoSize (moduldeFileName, &doomy); - if (versionInfoSize) - { - // Alloc the buffer - char *buffer=new char[versionInfoSize]; - - // Find the verion resource - if (GetFileVersionInfo(moduldeFileName, 0, versionInfoSize, buffer)) - { - uint *versionTab; - uint versionSize; - if (VerQueryValue (buffer, "\\", (void**)&versionTab, &versionSize)) - { - // Get the pointer on the structure - VS_FIXEDFILEINFO *info=(VS_FIXEDFILEINFO*)versionTab; - if (info) - { - // Setup version number - char version[512]; - sprintf (version, "Version %d.%d.%d.%d", - info->dwFileVersionMS>>16, - info->dwFileVersionMS&0xffff, - info->dwFileVersionLS>>16, - info->dwFileVersionLS&0xffff); - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), version); - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "VS_FIXEDFILEINFO * is NULL"); - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "VerQueryValue failed"); - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "GetFileVersionInfo failed"); - - // Free the buffer - delete [] buffer; - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "GetFileVersionInfoSize failed"); - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "GetModuleFileName failed"); - } - else - SetWindowText (GetDlgItem (hDlg, IDC_VERSION), "GetModuleHandle failed"); - - ep =(EditPatchMod *)lParam; - ep->hSelectPanel = hDlg; - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - // Set up the editing level selector - LoadImages(); - iToolbar = GetICustToolbar(GetDlgItem(hDlg, IDC_SELTYPE)); - iToolbar->SetImage(hFaceImages); - iToolbar->AddTool(ToolButtonItem(CTB_CHECKBUTTON, 0, 4, 0, 4, 24, 23, 24, 23, EP_VERTEX)); - iToolbar->AddTool(ToolButtonItem(CTB_CHECKBUTTON, 1, 5, 1, 5, 24, 23, 24, 23, EP_EDGE)); - iToolbar->AddTool(ToolButtonItem(CTB_CHECKBUTTON, 2, 6, 2, 6, 24, 23, 24, 23, EP_PATCH)); - iToolbar->AddTool(ToolButtonItem(CTB_CHECKBUTTON, 3, 7, 3, 7, 24, 23, 24, 23, EP_TILE)); - ReleaseICustToolbar(iToolbar); - ep->RefreshSelType(); - CheckDlgButton(hDlg, IDC_DISPLATTICE, ep->displayLattice); -// CheckDlgButton( hDlg, IDC_DISPSURFACE, ep->displaySurface); - CheckDlgButton(hDlg, IDC_FILTVERTS, filterVerts); - CheckDlgButton(hDlg, IDC_FILTVECS, filterVecs); - CheckDlgButton(hDlg, IDC_LOCK_HANDLES, lockedHandles); - ep->SetSelDlgEnables(); - - sprintf(string,"%s - %s",__DATE__,__TIME__); - SetDlgItemText(hDlg,ID_VERSION,string); - return TRUE; - } - - case WM_DESTROY: - // Don't leave in one of our modes! - ep->ip->ClearPickMode(); - CancelEditPatchModes(ep->ip); - return FALSE; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - { - BOOL needRedraw = FALSE; - switch (LOWORD(wParam)) - { - case EP_VERTEX: - if (ep->GetSubobjectLevel() == EP_VERTEX) - ep->ip->SetSubObjectLevel(PO_OBJECT); - else ep->ip->SetSubObjectLevel(EP_VERTEX); - needRedraw = TRUE; - break; - - case EP_EDGE: - if (ep->GetSubobjectLevel() == EP_EDGE) - ep->ip->SetSubObjectLevel(PO_OBJECT); - else ep->ip->SetSubObjectLevel(EP_EDGE); - needRedraw = TRUE; - break; - - case EP_PATCH: - if (ep->GetSubobjectLevel() == EP_PATCH) - ep->ip->SetSubObjectLevel(PO_OBJECT); - else ep->ip->SetSubObjectLevel(EP_PATCH); - needRedraw = TRUE; - break; - - case EP_TILE: - if (ep->GetSubobjectLevel() == EP_TILE) - ep->ip->SetSubObjectLevel(PO_OBJECT); - else ep->ip->SetSubObjectLevel(EP_TILE); - needRedraw = TRUE; - break; - - case IDC_DISPLATTICE: - ep->SetDisplayLattice(IsDlgButtonChecked(hDlg, IDC_DISPLATTICE)); - needRedraw = TRUE; - break; - case IDC_DISPSURFACE: - ep->SetDisplaySurface(IsDlgButtonChecked(hDlg, IDC_DISPSURFACE)); - needRedraw = TRUE; - break; - case IDC_FILTVERTS: - filterVerts = IsDlgButtonChecked(hDlg, IDC_FILTVERTS); - EnableWindow(GetDlgItem(hDlg, IDC_FILTVECS), filterVerts ? TRUE : FALSE); - SetVertFilter(); - break; - case IDC_FILTVECS: - filterVecs = IsDlgButtonChecked(hDlg, IDC_FILTVECS); - EnableWindow(GetDlgItem(hDlg, IDC_FILTVERTS), filterVecs ? TRUE : FALSE); - SetVertFilter(); - break; - case IDC_LOCK_HANDLES: - lockedHandles = IsDlgButtonChecked(hDlg, IDC_LOCK_HANDLES); - break; - case IDC_NS_COPY: - ep->NSCopy(); - break; - case IDC_NS_PASTE: - ep->NSPaste(); - break; - } - if (needRedraw) - { - ep->NotifyDependents(FOREVER, PART_DISPLAY, REFMSG_CHANGE); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_NORMAL); - } - } - break; - case WM_NOTIFY: - if (((LPNMHDR)lParam)->code == TTN_NEEDTEXT) - { - LPTOOLTIPTEXT lpttt; - lpttt =(LPTOOLTIPTEXT)lParam; - switch (lpttt->hdr.idFrom) - { - case EP_VERTEX: - lpttt->lpszText = GetString(IDS_TH_VERTEX); - break; - case EP_EDGE: - lpttt->lpszText = GetString(IDS_TH_EDGE); - break; - case EP_PATCH: - lpttt->lpszText = GetString(IDS_TH_PATCH); - break; - case EP_TILE: - lpttt->lpszText = "Tile"; - break; - } - } - break; - - } - - return FALSE; -} - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -void EditPatchMod::SetOpsDlgEnables() -{ - if (!hOpsPanel) - return; - - nlassert(ip); - - // Disconnect right-click and delete mechanisms - ip->GetRightClickMenuManager()->Unregister(&pMenu); - ip->UnRegisterDeleteUser(&pDel); - - BOOL oType =(GetSubobjectLevel() == EP_OBJECT) ? TRUE : FALSE; - BOOL vType =(GetSubobjectLevel() == EP_VERTEX) ? TRUE : FALSE; - BOOL eType =(GetSubobjectLevel() == EP_EDGE) ? TRUE : FALSE; - BOOL pType =(GetSubobjectLevel() == EP_PATCH) ? TRUE : FALSE; - BOOL tType =(GetSubobjectLevel() == EP_TILE) ? TRUE : FALSE; - BOOL epType =(eType || pType) ? TRUE : FALSE; - BOOL vepType =(vType || eType || pType) ? TRUE : FALSE; - - - ICustButton *but; - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_BIND)); - but->Enable(vType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_UNBIND)); - but->Enable(vType); - ReleaseICustButton(but); - - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_SUBDIVIDE)); - but->Enable(epType); - ReleaseICustButton(but); - EnableWindow(GetDlgItem(hOpsPanel, IDC_PROPAGATE), epType); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_ADDTRI)); - but->Enable(eType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_ADDQUAD)); - but->Enable(eType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_WELD)); - but->Enable(vType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_RESET)); - but->Enable(vType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_DETACH)); - but->Enable(pType); - ReleaseICustButton(but); - EnableWindow(GetDlgItem(hOpsPanel, IDC_DETACHREORIENT), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_DETACHCOPY), pType); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_PATCH_DELETE)); - but->Enable(vepType); - ReleaseICustButton(but); - ISpinnerControl *spin; - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_THRESHSPINNER)); - spin->Enable(vType); - ReleaseISpinner(spin); - -// 3-1-99 watje -// 10-4-00 hulud --- bug! :-) - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_HIDE)); - but->Enable(vepType); - ReleaseICustButton(but); - - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_UNHIDE)); - but->Enable(!tType); - ReleaseICustButton(but); - - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_EP_EXTRUDE)); - but->Enable(pType); - ReleaseICustButton(but); - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_EP_BEVEL)); - but->Enable(pType); - ReleaseICustButton(but); - - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_TURN)); - but->Enable(pType); - ReleaseICustButton(but); - - but = GetICustButton(GetDlgItem(hOpsPanel, IDC_TURN2)); - but->Enable(pType); - ReleaseICustButton(but); - - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_EXTRUDESPINNER)); - spin->Enable(pType); - ReleaseISpinner(spin); - - spin = GetISpinner(GetDlgItem(hOpsPanel, IDC_EP_OUTLINESPINNER)); - spin->Enable(pType); - ReleaseISpinner(spin); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EM_EXTYPE_A), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EM_EXTYPE_B), pType); - - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH4), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH5), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH6), pType); - - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH2), pType); - EnableWindow(GetDlgItem(hOpsPanel, IDC_EP_SM_SMOOTH3), pType); - - // Enable/disable right-click and delete mechanisms - if (!oType) - { - pMenu.SetMod(this); - ip->GetRightClickMenuManager()->Register(&pMenu); - pDel.SetMod(this); - ip->RegisterDeleteUser(&pDel); - } - } - -// ------------------------------------------------------------------------------------------------------------------------------------------------------ - -INT_PTR CALLBACK PatchOpsDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) -{ - EditPatchMod *ep =(EditPatchMod *)GetWindowLongPtr(hDlg, GWLP_USERDATA); - if (!ep && message != WM_INITDIALOG) - return FALSE; - - - ISpinnerControl *spin; - ICustButton *ebut; - - switch (message) - { - case WM_INITDIALOG: - { - ep =(EditPatchMod *)lParam; - ep->hOpsPanel = hDlg; - for (int i = IDC_SMOOTH_GRP1; i < IDC_SMOOTH_GRP1 + 32; i++) - SendMessage(GetDlgItem(hDlg, i), CC_COMMAND, CC_CMD_SET_TYPE, CBT_CHECK); - SetWindowLongPtr(hDlg, GWLP_USERDATA, (LONG_PTR)ep); - ICustButton *but = GetICustButton(GetDlgItem(hDlg, IDC_ATTACH)); - but->SetHighlightColor(GREEN_WASH); - but->SetType(CBT_CHECK); - ReleaseICustButton(but); - CheckDlgButton(hDlg, IDC_ATTACHREORIENT, attachReorient); - CheckDlgButton(hDlg, IDC_DETACHCOPY, patchDetachCopy); - CheckDlgButton(hDlg, IDC_DETACHREORIENT, patchDetachReorient); - CheckDlgButton(hDlg, IDC_PROPAGATE, ep->GetPropagate()); - ep->stepsSpin = GetISpinner(GetDlgItem(hDlg, IDC_STEPSSPINNER)); - ep->stepsSpin->SetLimits(0, 100, FALSE); - ep->stepsSpin->LinkToEdit(GetDlgItem(hDlg, IDC_STEPS), EDITTYPE_POS_INT); - ep->stepsSpin->SetValue(ep->GetMeshSteps(), FALSE); - - // Tile Step - ep->tileSpin = GetISpinner(GetDlgItem(hDlg, IDC_TILESTEPSSPINNER)); - ep->tileSpin->SetLimits(-5, 5, FALSE); - ep->tileSpin->LinkToEdit(GetDlgItem(hDlg, IDC_TILESTEPS), EDITTYPE_INT); - ep->tileSpin->SetValue(ep->GetTileLevel(), FALSE); - - // Tile Step - ep->transitionSpin = GetISpinner(GetDlgItem(hDlg, IDC_TRANSITIONSPINNER)); - ep->transitionSpin->SetLimits(1, 3, FALSE); - ep->transitionSpin->LinkToEdit(GetDlgItem(hDlg, IDC_TRANSITION), EDITTYPE_INT); - ep->transitionSpin->SetValue(ep->GetTransitionLevel(), FALSE); - -// 3-18-99 to suport render steps and removal of the mental tesselator - ep->stepsRenderSpin = GetISpinner(GetDlgItem(hDlg, IDC_STEPSRENDERSPINNER)); - ep->stepsRenderSpin->SetLimits(0, 100, FALSE); - ep->stepsRenderSpin->LinkToEdit(GetDlgItem(hDlg, IDC_STEPS_RENDER), EDITTYPE_POS_INT); - ep->stepsRenderSpin->SetValue(ep->GetMeshStepsRender(), FALSE); - CheckDlgButton(hDlg, IDC_TILE_MODE, ep->GetTileMode()); - CheckDlgButton(hDlg, IDC_SHOW_INTERIOR_FACES, ep->GetShowInterior()); - CheckDlgButton(hDlg, IDC_KEEP_MAPPING, ep->GetKeepMapping()); - - // Old - EnableWindow (GetDlgItem (hDlg, IDC_STEPS), !IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSSPINNER), !IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_STEPS_RENDER), !IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSRENDERSPINNER), !IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPS), IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPSSPINNER), IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_KEEP_MAPPING), IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITION), IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITIONSPINNER), IsDlgButtonChecked(hDlg, IDC_TILE_MODE)); - - ep->weldSpin = GetISpinner(GetDlgItem(hDlg, IDC_THRESHSPINNER)); - ep->weldSpin->SetLimits(0, 999999, FALSE); - ep->weldSpin->LinkToEdit(GetDlgItem(hDlg, IDC_WELDTHRESH), EDITTYPE_UNIVERSE); - ep->weldSpin->SetValue(weldThreshold, FALSE); - - CheckDlgButton(hDlg, IDC_EM_EXTYPE_B, TRUE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH, TRUE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH4, TRUE); - - ep->inExtrude = FALSE; - ep->inBevel = FALSE; - - // Set up spinners - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_EXTRUDESPINNER)); - spin->SetLimits(-9999999, 9999999, FALSE); - spin->LinkToEdit(GetDlgItem(hDlg, IDC_EP_EXTRUDEAMOUNT), EDITTYPE_FLOAT); - ReleaseISpinner(spin); - - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_OUTLINESPINNER)); - spin->SetLimits(-9999999, 9999999, FALSE); - spin->LinkToEdit(GetDlgItem(hDlg, IDC_EP_OUTLINEAMOUNT), EDITTYPE_FLOAT); - ReleaseISpinner(spin); - - - ebut = GetICustButton(GetDlgItem(hDlg, IDC_EP_EXTRUDE)); - ebut->SetType(CBT_CHECK); - ebut->SetHighlightColor(GREEN_WASH); - ReleaseICustButton(ebut); - - ebut = GetICustButton(GetDlgItem(hDlg, IDC_EP_BEVEL)); - ebut->SetType(CBT_CHECK); - ebut->SetHighlightColor(GREEN_WASH); - ReleaseICustButton(ebut); - - ebut = GetICustButton(GetDlgItem(hDlg, IDC_BIND)); - ebut->SetType(CBT_CHECK); - ebut->SetHighlightColor(GREEN_WASH); - ReleaseICustButton(ebut); - - ep->matSpin = SetupIntSpinner(hDlg, IDC_MAT_IDSPIN, IDC_MAT_ID, 1, MAX_MATID, 0); - ep->tessUSpin = SetupIntSpinner(hDlg, IDC_TESS_U_SPIN, IDC_TESS_U2, 1, RPO_DEFAULT_TESSEL, 0); - ep->tessVSpin = SetupIntSpinner(hDlg, IDC_TESS_V_SPIN, IDC_TESS_V2, 1, RPO_DEFAULT_TESSEL, 0); - ep->tileNum = SetupIntSpinner(hDlg, IDC_TILE_MAT_SPIN, IDC_TILE_MAT, 0, 65535, 0); - ep->tileRot = SetupIntSpinner(hDlg, IDC_TILE_ROT_SPIN, IDC_TILE_ROT, 0, 3, 0); - ep->SetOpsDlgEnables(); - - return TRUE; - } - - case WM_DESTROY: - if (ep->weldSpin) - { - ReleaseISpinner(ep->weldSpin); - ep->weldSpin = NULL; - } - if (ep->stepsSpin) - { - ReleaseISpinner(ep->stepsSpin); - ep->stepsSpin = NULL; - } - if (ep->tileSpin) - { - ReleaseISpinner(ep->tileSpin); - ep->tileSpin = NULL; - } - if (ep->transitionSpin) - { - ReleaseISpinner(ep->transitionSpin); - ep->transitionSpin = NULL; - } -// 3-18-99 to suport render steps and removal of the mental tesselator - if (ep->stepsRenderSpin) - { - ReleaseISpinner(ep->stepsRenderSpin); - ep->stepsRenderSpin = NULL; - } - - // Don't leave in one of our modes! - ep->ip->ClearPickMode(); - CancelEditPatchModes(ep->ip); - ep->ip->UnRegisterDeleteUser(&pDel); - ep->ip->GetRightClickMenuManager()->Unregister(&pMenu); - return FALSE; - - case CC_SPINNER_CHANGE: - switch (LOWORD(wParam)) - { - case IDC_STEPSSPINNER: - ep->SetMeshSteps(ep->stepsSpin->GetIVal()); - ep->NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_NORMAL); - break; - case IDC_TILESTEPSSPINNER: - ep->SetTileSteps(ep->tileSpin->GetIVal()); - ep->NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_NORMAL); - break; - case IDC_TRANSITIONSPINNER: - ep->SetTransitionLevel(ep->transitionSpin->GetIVal()); - ep->NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_NORMAL); - break; - case IDC_STEPSRENDERSPINNER: - ep->SetMeshStepsRender(ep->stepsRenderSpin->GetIVal()); - break; - - case IDC_THRESHSPINNER: - weldThreshold = ep->weldSpin->GetFVal(); - break; - case IDC_EP_EXTRUDESPINNER: - { - bool enterKey; - enterKey = FALSE; - if (!HIWORD(wParam) && !ep->inExtrude) - { - enterKey = TRUE; - ep->BeginExtrude(ep->ip->GetTime()); - } - BOOL ln = IsDlgButtonChecked(hDlg, IDC_EM_EXTYPE_B); - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_EXTRUDESPINNER)); - - ep->Extrude(ep->ip->GetTime(), spin->GetFVal(), ln); - if (enterKey) - { - ep->EndExtrude(ep->ip->GetTime(), TRUE); - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } - - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - } else - { - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_INTERACTIVE); - } - break; - } - case IDC_EP_OUTLINESPINNER: - { - bool enterKey; - enterKey = FALSE; - if (!HIWORD(wParam) && !ep->inBevel) - { - enterKey = TRUE; - ep->BeginBevel(ep->ip->GetTime()); - } - int sm =0; - int sm2 = 0; - if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH)) - sm = 0; - else if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH2)) - sm = 1; - else if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH3)) - sm = 2; - - if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH4)) - sm2 = 0; - else if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH5)) - sm2 = 1; - else if (IsDlgButtonChecked(hDlg, IDC_EP_SM_SMOOTH6)) - sm2 = 2; - - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_OUTLINESPINNER)); - ep->Bevel(ep->ip->GetTime(), spin->GetFVal(), sm, sm2); - if (enterKey) - { - ep->EndBevel(ep->ip->GetTime(), TRUE); - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_OUTLINESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } - - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - } else - { - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_INTERACTIVE); - } - break; - } - - } - break; - case CC_SPINNER_BUTTONDOWN: - switch (LOWORD(wParam)) - { - case IDC_EP_EXTRUDESPINNER: - ep->BeginExtrude(ep->ip->GetTime()); - break; - case IDC_EP_OUTLINESPINNER: - ep->BeginBevel(ep->ip->GetTime()); - break; - } - break; - - case CC_SPINNER_BUTTONUP: - switch (LOWORD(wParam)) - { - case IDC_EP_EXTRUDESPINNER: - ep->EndExtrude(ep->ip->GetTime(), HIWORD(wParam)); - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_EXTRUDESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } - - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - case IDC_EP_OUTLINESPINNER: - ep->EndBevel(ep->ip->GetTime(), HIWORD(wParam)); - spin = GetISpinner(GetDlgItem(hDlg, IDC_EP_OUTLINESPINNER)); - if (spin) - { - spin->SetValue(0, FALSE); - ReleaseISpinner(spin); - } - - ep->ip->RedrawViews(ep->ip->GetTime(), REDRAW_END); - break; - - - } - break; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - ep->ip->RollupMouseMessage(hDlg, message, wParam, lParam); - return FALSE; - - case WM_COMMAND: - switch (LOWORD(wParam)) - { - // Subdivision -// watje 3-18-99 - case IDC_SHOW_INTERIOR_FACES: - ep->SetShowInterior(IsDlgButtonChecked(hDlg, IDC_SHOW_INTERIOR_FACES)); -// ep->InvalidateMesh(); -// ep->NotifyDependents(FOREVER, PART_TOPO, REFMSG_CHANGE); -// ep->ip->RedrawViews (ep->ip->GetTime(),REDRAW_END); - break; - case IDC_TILE_MODE: - { - BOOL bCheck=(IsDlgButtonChecked(hDlg, IDC_TILE_MODE)==BST_CHECKED); - ep->SetTileMode (bCheck!=0); - - // Old - EnableWindow (GetDlgItem (hDlg, IDC_STEPS), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSSPINNER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPS_RENDER), !bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_STEPSRENDERSPINNER), !bCheck); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPS), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TILESTEPSSPINNER), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_KEEP_MAPPING), bCheck); - - // New - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITION), bCheck); - EnableWindow (GetDlgItem (hDlg, IDC_TRANSITIONSPINNER), bCheck); - break; - } - case IDC_KEEP_MAPPING: - { - ep->SetKeepMapping(IsDlgButtonChecked(hDlg, IDC_KEEP_MAPPING)!=0); - break; - } -// watje 12-10-98 - case IDC_HIDE: - ep->DoHide(ep->GetSubobjectLevel()); - break; - case IDC_UNHIDE: - ep->DoUnHide(); - break; - case IDC_BIND: -// ep->DoAddHook(); - if (ep->ip->GetCommandMode() == ep->bindMode) - ep->ip->SetStdCommandMode(CID_OBJMOVE); - else ep->ip->SetCommandMode(ep->bindMode); - break; - case IDC_UNBIND: - ep->DoRemoveHook(); - break; -// extrude and bevel stuff -// watje 12-10-98 - case IDC_EP_SM_SMOOTH: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH2, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH3, FALSE); - break; - case IDC_EP_SM_SMOOTH2: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH3, FALSE); - break; - case IDC_EP_SM_SMOOTH3: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH2, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH, FALSE); - break; - - case IDC_EP_SM_SMOOTH4: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH5, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH6, FALSE); - break; - case IDC_EP_SM_SMOOTH5: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH4, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH6, FALSE); - break; - case IDC_EP_SM_SMOOTH6: - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH4, FALSE); - CheckDlgButton(hDlg, IDC_EP_SM_SMOOTH5, FALSE); - break; - - - case IDC_EP_EXTRUDE: - if (ep->ip->GetCommandMode() == ep->extrudeMode) - ep->ip->SetStdCommandMode(CID_OBJMOVE); - else ep->ip->SetCommandMode(ep->extrudeMode); - break; - case IDC_EP_BEVEL: - if (ep->ip->GetCommandMode() == ep->bevelMode) - ep->ip->SetStdCommandMode(CID_OBJMOVE); - else ep->ip->SetCommandMode(ep->bevelMode); - break; - - case IDC_TURN: - nlassert (ep->GetSubobjectLevel()==PO_PATCH); - ep->DoPatchTurn(true); - break; - - case IDC_TURN2: - nlassert (ep->GetSubobjectLevel()==PO_PATCH); - ep->DoPatchTurn(false); - break; - - case IDC_SUBDIVIDE: - ep->DoSubdivide(ep->GetSubobjectLevel()); - break; - case IDC_PROPAGATE: - ep->SetPropagate(IsDlgButtonChecked(hDlg, IDC_PROPAGATE)); - break; - // Topology - case IDC_ADDTRI: - if (ep->GetSubobjectLevel() == PO_EDGE) - ep->DoPatchAdd(PATCH_TRI); - break; - case IDC_ADDQUAD: - if (ep->GetSubobjectLevel() == PO_EDGE) - ep->DoPatchAdd(PATCH_QUAD); - break; - case IDC_WELD: - ep->DoVertWeld(); - break; - case IDC_RESET: - ep->DoVertReset(); - break; - case IDC_DETACH: - ep->DoPatchDetach(patchDetachCopy, patchDetachReorient); - break; - case IDC_DETACHCOPY: - patchDetachCopy = IsDlgButtonChecked(hDlg, IDC_DETACHCOPY); - break; - case IDC_DETACHREORIENT: - patchDetachReorient = IsDlgButtonChecked(hDlg, IDC_DETACHREORIENT); - break; - case IDC_ATTACH: - { - ModContextList mcList; - INodeTab nodes; - // If the mode is on, turn it off and bail - if (ep->ip->GetCommandMode()->ID() == CID_STDPICK) - { - ep->ip->SetStdCommandMode(CID_OBJMOVE); - return FALSE; - } - // Want to turn on the mode. Make sure we're valid first - ep->ip->GetModContexts(mcList, nodes); - ep->pickCB.ep = ep; - ep->ip->SetPickMode(&ep->pickCB); - nodes.DisposeTemporary(); - break; - } - case IDC_ATTACHREORIENT: - attachReorient = IsDlgButtonChecked(hDlg, IDC_ATTACHREORIENT); - break; - case IDC_PATCH_DELETE: - ep->DoDeleteSelected(); - break; - } - break; - } - - return FALSE; -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_editpops.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_editpops.cpp deleted file mode 100644 index abbd4e34d..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_editpops.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/********************************************************************** - *< - FILE: editsops.cpp - - DESCRIPTION: Edit Shape OSM operations - - CREATED BY: Tom Hudson & Rolf Berteig - - HISTORY: created 25 April, 1995 - - *> Copyright (c) 1995, All Rights Reserved. - **********************************************************************/ -#include "stdafx.h" -#include "editpat.h" - -extern CoreExport Class_ID patchClassID; - -// in mods.cpp -extern HINSTANCE hInstance; - -/*-------------------------------------------------------------------*/ - -static void XORDottedLine( HWND hwnd, IPoint2 p0, IPoint2 p1 ) - { - HDC hdc; - hdc = GetDC( hwnd ); - SetROP2( hdc, R2_XORPEN ); - SetBkMode( hdc, TRANSPARENT ); - SelectObject( hdc, CreatePen( PS_DOT, 0, RGB(255,255,255) ) ); - MoveToEx( hdc, p0.x, p0.y, NULL ); - LineTo( hdc, p1.x, p1.y ); - DeleteObject( SelectObject( hdc, GetStockObject( BLACK_PEN ) ) ); - ReleaseDC( hwnd, hdc ); - } - -/*-------------------------------------------------------------------*/ - -EPTempData::~EPTempData() - { - if (patch) delete patch; - if (rpatch) delete rpatch; - } - -EPTempData::EPTempData(EditPatchMod *m,EditPatchData *pd) - { - patch = NULL; - rpatch = NULL; - patchValid.SetEmpty(); - patchData = pd; - mod = m; - } - -void EPTempData::Invalidate(PartID part,BOOL patchValid) - { - if ( !patchValid ) - { - delete patch; - patch = NULL; - delete rpatch; - rpatch = NULL; - } - if ( part & PART_TOPO ) - { - if (rpatch) - rpatch->InvalidateChannels (PART_TOPO|PART_GEOM|PART_SELECT|TEXMAP_CHANNEL); - } - if ( part & PART_GEOM ) - { - if (rpatch) - rpatch->InvalidateChannels (PART_GEOM); - } - if ( part & PART_SELECT ) - { - if (rpatch) - rpatch->InvalidateChannels (PART_SELECT); - } -} - -PatchMesh *EPTempData::GetPatch(TimeValue t, RPatchMesh *&rPatch) - { - if ( patchValid.InInterval(t) && patch ) - { - rPatch=rpatch; - return patch; - } - else - { - patchData->SetFlag(EPD_UPDATING_CACHE,TRUE); - mod->NotifyDependents(Interval(t,t), - PART_GEOM|SELECT_CHANNEL|PART_SUBSEL_TYPE|PART_DISPLAY|PART_TOPO, - REFMSG_MOD_EVAL); - patchData->SetFlag(EPD_UPDATING_CACHE,FALSE); - rPatch=rpatch; - return patch; - } - } - -BOOL EPTempData::PatchCached(TimeValue t) -{ - return (patchValid.InInterval(t) && patch); -} - -void EPTempData::UpdateCache(RPO *patchOb) -{ - if ( patch ) delete patch; - if ( rpatch ) delete rpatch; - patch = new PatchMesh(patchOb->patch); - rpatch = new RPatchMesh(*patchOb->rpatch); - - patchValid = FOREVER; - - // These are the channels we care about. - patchValid &= patchOb->ChannelValidity(0,GEOM_CHAN_NUM); - patchValid &= patchOb->ChannelValidity(0,TOPO_CHAN_NUM); - patchValid &= patchOb->ChannelValidity(0,SELECT_CHAN_NUM); - patchValid &= patchOb->ChannelValidity(0,SUBSEL_TYPE_CHAN_NUM); - patchValid &= patchOb->ChannelValidity(0,DISP_ATTRIB_CHAN_NUM); - patchValid &= patchOb->ChannelValidity(0,TEXMAP_CHAN_NUM); -} - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_mods.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_mods.cpp deleted file mode 100644 index 4020110e3..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_mods.cpp +++ /dev/null @@ -1,254 +0,0 @@ -/********************************************************************** - *< - FILE: mods.cpp - - DESCRIPTION: DLL implementation of modifiers - - CREATED BY: Rolf Berteig (based on prim.cpp) - - HISTORY: created 30 January 1995 - - *> Copyright (c) 1994, All Rights Reserved. - **********************************************************************/ - -#include "stdafx.h" -#include "editpat.h" -#include "nel/misc/debug.h" - -HINSTANCE hInstance; -int controlsInit = FALSE; - -using namespace NLMISC; - -/** public functions **/ -BOOL WINAPI DllMain(HINSTANCE hinstDLL,ULONG fdwReason,LPVOID lpvReserved) -{ - hInstance = hinstDLL; - - if ( !controlsInit ) - { - controlsInit = TRUE; - - // jaguar controls - InitCustomControls(hInstance); - -#ifdef OLD3DCONTROLS - // initialize 3D controls - Ctl3dRegister(hinstDLL); - Ctl3dAutoSubclass(hinstDLL); -#endif - - // initialize Chicago controls - InitCommonControls(); - } - - switch(fdwReason) { - case DLL_PROCESS_ATTACH: - break; - case DLL_THREAD_ATTACH: - break; - case DLL_THREAD_DETACH: - break; - case DLL_PROCESS_DETACH: - break; - } - return(TRUE); - } - - -//------------------------------------------------------ -// This is the interface to Jaguar: -//------------------------------------------------------ - -__declspec( dllexport ) const TCHAR * -LibDescription() -{ - return "Ryzom patch"; -} - - -#ifndef DESIGN_VER - -/// MUST CHANGE THIS NUMBER WHEN ADD NEW CLASS -__declspec( dllexport ) int LibNumberClasses() {return 1;} - -__declspec( dllexport ) ClassDesc* -LibClassDesc(int i) { - switch(i) { - case 0: return GetEditPatchModDesc(); - /* - case 0: return GetBendModDesc(); - case 1: return GetTaperModDesc(); - case 2: return GetSinWaveObjDesc(); - case 3: return GetSinWaveModDesc(); - case 4: return GetEditMeshModDesc(); - case 5: return GetEditSplineModDesc(); - case 6: return GetEditPatchModDesc(); - case 7: return GetTwistModDesc(); - case 8: return GetExtrudeModDesc(); - case 9: return GetBombObjDesc(); - case 10: return GetBombModDesc(); - case 11: return GetClustModDesc(); - case 12: return GetSkewModDesc(); - case 13: return GetNoiseModDesc(); - case 14: return GetSinWaveOModDesc(); - case 15: return GetLinWaveObjDesc(); - case 16: return GetLinWaveModDesc(); - case 17: return GetLinWaveOModDesc(); - case 18: return GetOptModDesc(); - case 19: return GetDispModDesc(); - case 20: return GetClustNodeModDesc(); - case 21: return GetGravityObjDesc(); - case 22: return GetGravityModDesc(); - case 23: return GetWindObjDesc(); - case 24: return GetWindModDesc(); - case 25: return GetDispObjDesc(); - case 26: return GetDispWSModDesc(); - case 27: return GetDeflectObjDesc(); - case 28: return GetDeflectModDesc(); - case 29: return GetUVWMapModDesc(); - case 30: return GetSelModDesc(); - case 31: return GetSmoothModDesc(); - case 32: return GetMatModDesc(); - case 33: return GetNormalModDesc(); - case 34: return GetSurfrevModDesc(); - case 35: return GetResetXFormDesc(); - case 36: return GetAFRModDesc(); - case 37: return GetTessModDesc(); - case 38: return GetDeleteModDesc(); - case 39: return GetMeshSelModDesc(); - case 40: return GetFaceExtrudeModDesc(); - case 41: return GetUVWXFormModDesc(); - case 42: return GetMirrorModDesc(); - case 43: return GetUnwrapModDesc(); - case 44: return GetBendWSMDesc(); - case 45: return GetTwistWSMDesc(); - case 46: return GetTaperWSMDesc(); - case 47: return GetSkewWSMDesc(); - case 48: return GetNoiseWSMDesc(); - case 49: return GetSDeleteModDesc(); - case 50: return GetDispApproxModDesc(); - case 51: return GetMeshMesherWSMDesc(); - case 52: return GetNormalizeSplineDesc();*/ - default: return 0; - } - - } - -#else - -// -// DESIGN VERSION EXCLUDES SOME PLUG_INS -// - -/// MUST CHANGE THIS NUMBER WHEN ADD NEW CLASS -__declspec( dllexport ) int LibNumberClasses() {return 1;} - -__declspec( dllexport ) ClassDesc* -LibClassDesc(int i) { - switch(i) { - case 0: return GetEditPatchModDesc(); - /* - case 0: return GetBendModDesc(); - case 1: return GetTaperModDesc(); - //case 2: return GetSinWaveObjDesc(); - //case 3: return GetSinWaveModDesc(); - case 2: return GetEditMeshModDesc(); - case 3: return GetEditSplineModDesc(); - case 4: return GetEditPatchModDesc(); - case 5: return GetTwistModDesc(); - case 6: return GetExtrudeModDesc(); - //case 9: return GetBombObjDesc(); - //case 10: return GetBombModDesc(); - case 7: return GetClustModDesc(); - case 8: return GetSkewModDesc(); - case 9: return GetNoiseModDesc(); - case 10: return GetSinWaveOModDesc(); - //case 15: return GetLinWaveObjDesc(); - //case 16: return GetLinWaveModDesc(); - case 11: return GetLinWaveOModDesc(); - case 12: return GetOptModDesc(); - case 13: return GetDispModDesc(); - case 14: return GetClustNodeModDesc(); - //case 21: return GetGravityObjDesc(); - //case 22: return GetGravityModDesc(); - //case 23: return GetWindObjDesc(); - //case 24: return GetWindModDesc(); - //case 25: return GetDispObjDesc(); - //case 26: return GetDispWSModDesc(); - //case 27: return GetDeflectObjDesc(); - //case 28: return GetDeflectModDesc(); - case 15: return GetUVWMapModDesc(); - case 16: return GetSelModDesc(); - case 17: return GetSmoothModDesc(); - case 18: return GetMatModDesc(); - case 19: return GetNormalModDesc(); - case 20: return GetSurfrevModDesc(); - case 21: return GetResetXFormDesc(); - case 22: return GetAFRModDesc(); - case 23: return GetTessModDesc(); - case 24: return GetDeleteModDesc(); - case 25: return GetMeshSelModDesc(); - case 26: return GetFaceExtrudeModDesc(); - case 27: return GetUVWXFormModDesc(); - case 28: return GetMirrorModDesc(); -// case 29: return GetUnwrapModDesc(); - case 29: return GetBendWSMDesc(); - case 30: return GetTwistWSMDesc(); - case 31: return GetTaperWSMDesc(); - case 32: return GetSkewWSMDesc(); - case 33: return GetNoiseWSMDesc(); - case 34: return GetSDeleteModDesc(); - case 35: return GetDispApproxModDesc(); - case 36: return GetMeshMesherWSMDesc(); - case 37: return GetNormalizeSplineDesc(); -*/ - default: return 0; - } - - } - -#endif - - - -// Return version so can detect obsolete DLLs -__declspec( dllexport ) ULONG -LibVersion() { return VERSION_3DSMAX; } - -// Let the plug-in register itself for deferred loading -__declspec( dllexport ) ULONG CanAutoDefer() -{ - return 1; -} - -BOOL CALLBACK DefaultSOTProc( - HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) - { - IObjParam *ip = (IObjParam*)GetWindowLongPtr(hWnd,GWLP_USERDATA); - - switch (msg) { - case WM_INITDIALOG: - SetWindowLongPtr(hWnd,GWLP_USERDATA,lParam); - break; - - case WM_LBUTTONDOWN: - case WM_LBUTTONUP: - case WM_MOUSEMOVE: - if (ip) ip->RollupMouseMessage(hWnd,msg,wParam,lParam); - return FALSE; - - default: - return FALSE; - } - return TRUE; - } - -TCHAR *GetString(int id) - { - static TCHAR buf[256]; - - if (hInstance) - return LoadString(hInstance, id, buf, sizeof(buf)) ? buf : NULL; - return NULL; - } diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Trim.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/Trim.cur deleted file mode 100644 index e6df630b45e9f3acdebf55ae6b762b1d0faaf909..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmY++u?@m75Czchh=MLiNQf?>qhtdzSWto(fPw)s1Pf#XMu1F!1Qk;7=N~o-vGx3Y zcZq=n4tWktvBbs!3jk|T3xzoC?}`zM;UpQxt-dYBvJ#k00L#Bwt$XcSd(b42Vzg$e zOdb_VQwP7_RrxL1XVMIA2eRFhmsd!u9JlVa;$ByJlI=uUnB00DR~ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/addvertc.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/addvertc.cur deleted file mode 100644 index b4f31318fc507d55166a95cdaeb05913ea512ab1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZQzU}9ioP*7lC;AaqEFkob05My9q&;Vkf5Q75{GXfzPKq&|ZLH_^$A0ZD?Lkb2e Xum4m32W$W-`e14yHZuU-FrWYc?#+h6 diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/attach.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/attach.cur deleted file mode 100644 index b320c0034a36435b86d2af8d27acb87e1b09deea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZ{c!3u&v7=&k~gGW!%A=v2Dv12z4daNX}2k}7!^VYE^h>XtRDJ)Q@F$L++EZ+_@ z|Gx`3Fqq8%7ZWTEFb1#?st^dH^HpzM7;ci?IMZ(Mi`@d=2xz^Zzg%JVk08uNPVPsBUa+C8lSAJhzIfmneEB*yYn_{ZmYN{s<0m-=!?7RP}$zw}1>07PSbnE(I) diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bin00001.tga b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bin00001.tga deleted file mode 100644 index b3c0128e25607d7e65b24701f9210339390867d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16428 zcmeI3&rcIU6vrP0YN1g1X;C;BjX|O`dQ~B4gjgVuP!*zvqrn)#ghUVGMUSWlATeTs z(F13_i9Zeyx#&M-KTF1}4RkxZv)gUiNy>KF`SHHree>qcn^%#Ts4^r&ax$UrqHDxJ z#6ZMA#DIAQYNSSDH8H7+)k&g0AZek; zK+bqwT++?QWZ={#c{DgDAMdWq_WYLoS==f4L;X+p)~)vRLx1tSUWAngg}bMvTPDtr z$!hMk{95>4GTvg`&=395Z}-s?7QbQQfw|q0Y?tBQYw~V-#R%qu_@IBrVLawnxeGek zm+qBkBTr;^;fJr-6(@|tc#O;VHzP4vVTnWU&!yqCqnm$zYv2cl(~{@0rG=G*AAll#Gu0F=N7&Tr~94xZ*rkK zqwNn7tHhsn>c0}6g9AJ|g*Ys+$V$NHBqKN)@_2L#F>2zmPJNqx?uTsw2Y7S}@p)p> zrtx{{&xxCZp0DJVt@8#Q{G3e?pZ6kfSlWUEJUWGQ8O|ocg29U%-~f+KIqdJB^SH3h zf44dS4(ypu!Ct-`eO?v%kNqb;tW!*{{|DJ-x9?P^9qT`MbV{}Pf1Ii7lxp$+*}t%l zaT5<^-^AIqj;@8RuG{?|x>7Csf6i>&l&XmToWATz_u)&$|JH84smM7%{EzshZtTOZ zE5uKUqn301a${4Fm$P{~@oJd2h$gch&;(Z8m2=gxVJRb^Z$n=+j|6{|7&1FaIMOy12N? z|8VQ;?4fi1%ba2_8P5ElU~`~|tACyQTvmIqm;aRwEdR@{A?Oc*+c2J+J-uCS)8FwE$vN>W{~Lea%Ky&moJrrt zBoD|14_5wve($OB|2c;(#dlM6SkH*P(0(A_kIMfK+dD7D9kLQbA&%ty`;X=Se*eLl zHSMsmZu2*a$rki8xG47fAL8@G+=m}B7P)UDy$*<5yV MqJL&2J3gF|zcSR`@Bjb+ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00001.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00001.bmp deleted file mode 100644 index 96b8260165dbfe6e20aa1ef9565c4b4cde7ebce7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmZvaxpBlW3`OZ3ma4DP78T>v-9ri3F90I>S4(av% z?J2l?Vqee?bVeV-Gd6_pM|XG35(0NvmhP~G;d;H|bzpu6GeszuQkXPkI{X%TW_!S| z8}_e{i$9yS^kpWMq?B{xAO=c=FrgA?E>)bl)|P5rQ3>3|3&aZDY!fialwwsT?QBy_0likm2px4 diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00002.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bmp00002.bmp deleted file mode 100644 index 341547a653dcb090292751f19dc945d904e98a99..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmZ{i$rS=25JcPMP8!DH!J9c4h35%vLNF9Fz*?FIJVqS0Pra&U#{2Ve3AH!I8~O{q zpr7K3G2(O9bTDiYcw*Z;VZ<`_eaFm$swZmY3LQTp?$=gUByyz1!Pgw6Vj1jgu{CA~~a(Pj4vl*Zs?FlJN?zJN=hzNpmbATO7~Z47(3a zo_d@|0(>oj8^_7*5~{Ojj>WFPv2jaolT^N$<9k6HWb(+7*fsIw`D-n;O;WivhsMg} znXzJTKpjEt=(bcgxet7%0d)kmliLux#eLv22p^fl8jF0iF+xpZ&TsV|C>Y@rb68`M zUu`V0Hh!!3z!w50ET|xj%X)5eDHxcrpn^0m>sf{^E(Ife#N|!iVbmGl*$chUtK5ZN zH%P1%dZE|2&Xk_u(JTzM4{M8SlC-1v$t;Zh7j6dF3Y{~82YrXg4eCF z;@0#?)L66nN$L5cUbppn2SmMY>-D|dd;VVTJ^xX diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/booleant.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/booleant.bmp deleted file mode 100644 index bf52eaa4c1876da1af9bdf8ee2a190cdb669c744..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 838 zcmb7?F>=Hp3`Lb}W=zL5_8ckF z&#x~R8RH%P3VVY^*n>R5i+nx~oVY52S8APr$5hsJ1^L0oD`uR*@Nfw(|9hlmZt*N_ zt~;jK$A&vY9dT(>=o!sA6YUJDl`*oH+X<;-!kyGJrk*EqOpr%eG8st786$UT+75&+ zTI|#Z4VC(6AoMLay?Npsv9kiIc=DjJlTepU{ex7SEtx9SC5LLAJXg1zq@z?ETq;T> z`(V*8l!^izbJ{wYwodM3ci2(SL+7`Bqm$4d=x;Xta>LpGIeT0_kR8KwuKvw`11Pt9 AfdBvi diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolinte.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolinte.cur deleted file mode 100644 index dba281e5867ea5e058f237bcd3f34b43f25cb3f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZ{dF$%&!6hvo(g@r{bu}exzZ;*gTvK4}OfE*!L$qhV$dV&=!L^iwQ-~5HBkXhaz z{?5P$G8mL4u*3#C1FQjT1^GfP7pz!UU7kRLqqrI=|bOnTm@^DXS~!f=>zv~ BdpQ6A diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolsubt.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/boolsubt.cur deleted file mode 100644 index 2ee808ab9027bbdbbc0d7a95b4493d07124b2b08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZvW%?ZLl6ohB99=r&GAl{OrM>|MLvH&571*C+uk`64vbP&OV5yFnMc@cl`E#I4c zZw7XO1P)mS%(21F0c!wTp%n_@bjF&*hIc1vcB5?ZO?m*9Ga%}(=ajeF%Nz_J0I$2h zYHp437q9Gp4LLcaqJGn!$mU3%AEt5s^kY8cm715~j2>i~Ju^7QmixgoYTtqRF(GtB7dabGP}$pMlL1$o`)h?yF7=qhb?a`M0kQ z<{1h&4uB&*dr)jQ9T!WrNc7}B6RsltMda~T&;56v_fvgiu?&ndLS#fsyhOM{!b+qg NJqb=3cpY1r^Z|KidpQ6A diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bulbmask.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/bulbmask.bmp deleted file mode 100644 index 7407335279dff218fa00b3ec541e5739addd9150..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 478 zcmZ?ry~oG^24z4}1BeZPm>-B48CZZM149N>9?U@@8Wb(1(`-$kN4c!a#qWHO1H-|_jGiQmIIrxy hWaYo-f4{qCbYM_i{69lAFVi+E&&kra7spoH$qVlH#Z3SJ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/chamfer.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/chamfer.cur deleted file mode 100644 index 600f0fff0f8fc28d81c190eae6193fb3579a724a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)#u?@m76hzN}5CsJl&?O}$5(6X~umXc18N?tN1($RgA#@oal_kr^1tWz}an|$q z|MztUCNRizV1X_623P~w35`$+qx06Mq-MBDCfjMZ9Fv`a)ePwCuV)_mVu=&xaG3G} zlX8aS|6j2nLnf+$=Z$n%vi7O={kI=BY~q0xJqrd{MsTEtmUXmj1KBCWcM539c+^@Z H?jq?0FOYnT diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/crossins.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/crossins.cur deleted file mode 100644 index 3c3ecdddc76ef8e533f9d32fbfc1d83718a97a88..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaKnF$w}P6htR#VYh-H+hy%6J%HdIOc3!PIg05ly@FQOvX!`IoNNNCf=+mu|1;AB z7{H*afH6ue4KM?+5PCu_j83O)Y3Xm0Dfa5tpV$pB83ED1Go$`*m5NrGIR95zldTo5 z=e#HVjy&Cy$NfETr(~Fuyoj3!f?LuZ$l|D94I4Ud$g3KUhI}gTN>)RWadN%@zdv^a diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00001.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00001.cur deleted file mode 100644 index 1cff1cd9508f28c8a4f2fc19c3719deaae3d520c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmbV`u?oX55JTla@aRmPJ!b45v_BSH^0Qr!Ox{$T4Q)uKROU&CjSd3?0&+&vJpeaN zv&iBpf{yFe{A?uKWt5Kx7SoOi@a%6%*@?=ZeEx^Nq3RP>$Zf}($RU!Cch5D|vK9Mc P#ppe! diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00002.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cur00002.cur deleted file mode 100644 index 048f06b4aefde54e0ff825ccb5a5db4d7001d513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZQzU}9ioP*7k10|Q0|1~DK@1BexX*a3(cfe;L!6oi8y|NsAw;0zE8=!O9W0CiJ? AlK=n! diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cursor1.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/cursor1.cur deleted file mode 100644 index f293e8aebed382b2965d72070ed8cb6a3aabeb3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmbV`F$%&^5JcZMLK-ohRUj!XJ%Es0On#2y5iBhPbCiFCl)(hXF>P#gmbWakyD+dJ zP}i`h;1u8h9E~kn6I>s4OJ6rhYx74Z^L^ey(L8O-SUVXyS=4%y9Fu6zyR41a6( k=XjBZvy{rHeizkk4W3PEqXv8vOfJ1DX==< Copyright (c) 1995, All Rights Reserved. - **********************************************************************/ - - -#ifndef __EDITPATCH_H__ -#define __EDITPATCH_H__ - -#include "mods.h" -#include "modsres.h" -#include "nel/misc/rgba.h" -#include "nel/3d/quad_tree.h" -#include -#include "../nel_patch_lib/rpo.h" -#include "nel/3d/tile_bank.h" -#include -#include "../nel_patch_lib/vertex_neighborhood.h" - -// For MAX_RELEASE -#include - -namespace NL3D -{ -class CCamera; -class CViewport; -class CLandscape; -} - -using namespace NL3D; -using namespace NLMISC; - -#define Alert(x) MessageBox(GetActiveWindow(),x,_T("Alert"),MB_OK); - -#define EDITPAT_CHANNELS (PART_GEOM|SELECT_CHANNEL|PART_SUBSEL_TYPE|PART_DISPLAY|PART_TOPO|TEXMAP_CHANNEL) -#define CID_EP_PAINT CID_EP_BEVEL+5 - -// These are values for selLevel. -#define EP_OBJECT 0 -#define EP_VERTEX 1 -#define EP_EDGE 2 -#define EP_PATCH 3 -#define EP_TILE 4 - -#define COLOR_BRUSH_STEP 10 -#define COLOR_BRUSH_MIN (2.f) -#define COLOR_BRUSH_MAX (32.f) - -// Named selection set levels: -#define EP_NS_VERTEX 0 -#define EP_NS_EDGE 1 -#define EP_NS_PATCH 2 -// Conversion from selLevel to named selection level: -static int namedSetLevel[] = { EP_NS_VERTEX, EP_NS_VERTEX, EP_NS_EDGE, EP_NS_PATCH }; -static int namedClipLevel[] = { CLIP_P_VERT, CLIP_P_VERT, CLIP_P_EDGE, CLIP_P_PATCH }; - -#define MAX_MATID 0xffff - -#define UNDEFINED 0xffffffff - -#define CID_EPM_BIND CID_USER + 203 -#define CID_EPM_EXTRUDE CID_USER + 204 -#define CID_EPM_BEVEL CID_USER + 205 - -class EditPatchMod; -class CNelPatchChanger; - -#define BRUSH_COUNT 3 - -// Advanced TessApprox settings... -class AdvParams -{ -public: - TessSubdivStyle mStyle; - int mMin, mMax; - int mTris; -}; - -class PatchRightMenu : public RightClickMenu -{ -private: - EditPatchMod *ep; -public: - void Init(RightClickMenuManager* manager, HWND hWnd, IPoint2 m); - void Selected(UINT id); - void SetMod(EditPatchMod *ep) { this->ep = ep; } -}; - -class EPM_BindMouseProc : public MouseCallBack -{ - friend class MouseListener; - private: - EditPatchMod *pobj; - IObjParam *ip; - IPoint2 om; - BitArray knotList; - PatchMesh *pMesh; - RPatchMesh *rpMesh; - CVertexNeighborhood tab; - - protected: - HCURSOR GetTransformCursor(); - BOOL HitAKnot(ViewExp *vpt, IPoint2 *p, int *vert); - BOOL HitASegment(ViewExp *vpt, IPoint2 *p, int *Seg); - - BOOL HitTest( ViewExp *vpt, IPoint2 *p, int type, int flags, int subType ); - BOOL AnyHits( ViewExp *vpt ) { return vpt->NumSubObjHits(); } - - public: - EPM_BindMouseProc(EditPatchMod* spl, IObjParam *i) { pobj=spl; ip=i; } - int proc( - HWND hwnd, - int msg, - int point, - int flags, - IPoint2 m ); -}; - -struct EPM_Mesh -{ - EPM_Mesh (PatchMesh *pmesh, RPatchMesh *rmesh, class EditPatchData *patchData, INode* node, ModContext *mod, int mcListIndex) - { - PMesh=pmesh; - RMesh=rmesh; - PatchData=patchData; - Node=node; - Mod=mod; - McListIndex=mcListIndex; - } - PatchMesh *PMesh; - RPatchMesh *RMesh; - INode *Node; - ModContext *Mod; - int McListIndex; - class EditPatchData *PatchData; -}; - -struct EPM_PaintVertex -{ - EPM_PaintVertex (sint32 mesh, sint32 vert) - { - Mesh=mesh; - vertex=vert; - } - sint32 Mesh; - sint32 vertex; -}; - -struct EPM_PaintTile -{ - EPM_PaintTile () - { - Mesh=-1; - } - EPM_PaintTile* get2Voisin (int i) - { - if (voisins[i]) - { - return voisins[i]->voisins[(i+rotate[i])&3]; - } - return NULL; - } - int get2VoisinRotate (int i) - { - if (voisins[i]) - { - return rotate[i]+voisins[i]->rotate[(i+rotate[i])&3]; - } - return NULL; - } - EPM_PaintTile* getRight256 (int rot, int& _rotate) - { - _rotate=rotate[(2+rot)&3]; - return voisins[(2+rot)&3]; - } - EPM_PaintTile* getBottom256 (int rot, int& _rotate) - { - _rotate=rotate[(1+rot)&3]; - return voisins[(1+rot)&3]; - } - EPM_PaintTile* getRightBottom256 (int rot, int& _rotate) - { - int rightRot; - EPM_PaintTile* right=getRight256 (rot, rightRot); - if (right) - return right->getBottom256 ((rot-rightRot)&3, _rotate); - else - return NULL; - } - EPM_PaintTile* getBottomRight256 (int rot, int& _rotate) - { - int bottomRot; - EPM_PaintTile* bottom=getBottom256 (rot, bottomRot); - if (bottom) - return bottom->getRight256 ((rot-bottomRot)&3, _rotate); - else - return NULL; - } - bool validFor256 (int rot) - { - int _rotate; - if (!getRight256 (rot, _rotate)) - return false; - if (!getBottom256 (rot, _rotate)) - return false; - if (!getRightBottom256 (rot, _rotate)) - return false; - if (getRightBottom256 (rot, _rotate)!=getBottomRight256 (rot, _rotate)) - return false; - return true; - } - void set256 (int rotate) - { - } - bool intersect (const Ray& ray, std::vector& vectMesh, TimeValue t, NLMISC::CVector& hit); - sint32 patch; - sint32 tile; - sint16 Mesh; - uint8 u; - uint8 v; - EPM_PaintTile* voisins[4]; - uint8 rotate[4]; - CVector Center; - float Radius; -}; - -struct EPM_PaintPatch -{ - enum TBorder {left=0, bottom, right, top, count}; - EPM_PaintPatch () - { - Mesh=-1; - } - EPM_PaintPatch (sint32 mesh, sint32 p) - { - Mesh=mesh; - patch=p; - } - sint32 Mesh; - sint32 patch; -}; - -/*-------------------------------------------------------------------*/ - -class tileSetIndex -{ -public: - int TileSet; - int Rotate; - bool operator< (const tileSetIndex& other) const - { - if (TileSetother.TileSet) - return false; - int delta=(other.Rotate-Rotate)&3; - if (delta==1) - return true; - if (delta==3) - return false; - if (delta==0) - return false; - nlassert (0); // no! - return false; - } - bool operator!= (const tileSetIndex& other) const - { - return ((TileSet!=other.TileSet)||(Rotate!=other.Rotate)); - } - bool operator== (const tileSetIndex& other) const - { - return ((TileSet==other.TileSet)&&(Rotate==other.Rotate)); - } -}; - -/*-------------------------------------------------------------------*/ - -class CBackupValue -{ -public: - // Ctor - CBackupValue () {} - CBackupValue (const tileDesc& desc, uint mesh, uint tile) : Desc (desc), Mesh (mesh), Tile (tile) - {} - - // Public data - tileDesc Desc; - uint Mesh; - uint Tile; -}; - -/*-------------------------------------------------------------------*/ - -class EPM_PaintMouseProc : public MouseCallBack -{ - friend class MouseListener; - friend DWORD WINAPI myThread (LPVOID vData); - friend class CTileUndo; - friend class CPaintColor; - friend class CFillPatch; - -private: - EditPatchMod *pobj; - IObjParam *ip; - IPoint2 om; - //PatchMesh *pMesh; - //sint32 Mesh; - //std::map metaMeshIndex; - std::vector > metaTile; - std::vector bitArray; - int Rotation; - int TileIndex; - CQuadTree quadTreeSelect; - -protected: - - // Paint algorithm - void SetTile (int mesh, int tile, const tileDesc& desc, std::vector& vectMesh, CLandscape* land, CNelPatchChanger& nelPatchChg, - std::vector* backupStack, bool undo=true, bool updateDisplace=false); - - // Get a tile - void GetTile (int mesh, int tile, tileDesc& desc, std::vector& vectMesh, CLandscape* land); - - bool PutATile ( EPM_PaintTile* pTile, int tileSet, int curRotation, const NL3D::CTileBank& bank, - bool selectCycle, std::set& visited, std::vector& vectMesh, - NL3D::CLandscape* land, CNelPatchChanger& nelPatchChg, bool _256); - - void PutADisplacetile ( EPM_PaintTile* pTile, const CTileBank& bank, - std::vector& vectMesh, - CLandscape* land, CNelPatchChanger& nelPatchChg); - - BOOL PutDisplace (int tile, int mesh, const CTileBank& bank, std::vector& vectMesh, CLandscape* land, - int recurs, std::set& alreadyRecursed, CNelPatchChanger& nelPatchChg); - - int selectTile (uint tileSet, bool selectCycle, bool _256, uint group, const CTileBank& bank); - bool GetBorderDesc (EPM_PaintTile* tile, tileSetIndex *pVoisinCorner, NL3D::CTileSet::TFlagBorder pBorder[4][3], - tileDesc *pVoisinIndex, const NL3D::CTileBank& bank, std::vector& vectMesh, CNelPatchChanger& nelPatchChg); - - const NL3D::CTileSetTransition* FindTransition (int nTileSet, int nRotate, const NL3D::CTileSet::TFlagBorder *border, - const NL3D::CTileBank& bank); - bool PropagateBorder (EPM_PaintTile* tile, int curRotation, int curTileSet, std::set& visited, - const NL3D::CTileBank& bank, std::vector& vectMesh, NL3D::CLandscape* land, CNelPatchChanger& nelPatchChg, - std::vector& backupStack, bool recurseNoDiff=true); - - // Calc rotate path - uint8 CalcRotPath (EPM_PaintTile* from, EPM_PaintTile* to, int depth, int rotate, int& deltaX, int& deltaY, int& cost); - - // Just put a tile - BOOL PutTile (int tile, int mesh, bool first, const NL3D::CTileBank& bank, int tileSet, std::vector& vectMesh, NL3D::CLandscape* land, - int recurs, std::set& alreadyRecursed, CNelPatchChanger& nelPatchChg, bool _256); - - void RecursTile (EPM_PaintTile* pTile, const CTileBank& bank, int tileSet, std::vector& vectMesh, CLandscape* land, int recurs, - std::set& alreadyRecursed, bool first, int rotation, CNelPatchChanger& nelPatchChg, bool _256); - - - BOOL HitATile(ViewExp *vpt, IPoint2 *p, int *tile, int *mesh, TimeValue t, std::vector& vectMesh, NLMISC::CVector& hit); - BOOL HitATile(const CViewport& viewport, const CCamera& camera, float x, float y, int *tile, int *mesh, TimeValue t, std::vector& vectMesh, NLMISC::CVector& hit); - BOOL AnyHits( ViewExp *vpt ) - { - return vpt->NumSubObjHits(); - } - -public: - EPM_PaintMouseProc(EditPatchMod* spl, IObjParam *i) - { - pobj=spl; - ip=i; - TileIndex=0; - - // Init plane matrix XY - NLMISC::CMatrix tmp; - NLMISC::CVector I(1,0,0); - NLMISC::CVector J(0,0,-1); - NLMISC::CVector K(0,1,0); - tmp.identity(); - tmp.setRot(I,J,K, true); - quadTreeSelect.changeBase (tmp); - } - int proc( - HWND hwnd, - int msg, - int point, - int flags, - IPoint2 m ); -}; - - -class EPM_BindCMode : public CommandMode -{ - private: - ChangeFGObject fgProc; - EPM_BindMouseProc eproc; - EditPatchMod* pobj; -// int type; // See above - - public: - EPM_BindCMode(EditPatchMod* spl, IObjParam *i) : - fgProc((ReferenceTarget*)spl), eproc(spl,i) {pobj=spl;} - - int Class() { return MODIFY_COMMAND; } - int ID() { return CID_EP_BIND; } - MouseCallBack *MouseProc(int *numPoints) { *numPoints=2; return &eproc; } - ChangeForegroundCallback *ChangeFGProc() { return &fgProc; } - BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; } - void EnterMode(); - void ExitMode(); -// void SetType(int type) { this->type = type; eproc.SetType(type); } -}; - -class EPM_ExtrudeMouseProc : public MouseCallBack { -private: - MoveTransformer moveTrans; - EditPatchMod *po; - Interface *ip; - IPoint2 om; - Point3 ndir; -public: - EPM_ExtrudeMouseProc(EditPatchMod* o, IObjParam *i) : moveTrans(i) {po=o;ip=i;} - int proc(HWND hwnd, int msg, int point, int flags, IPoint2 m); -}; - - -class EPM_ExtrudeSelectionProcessor : public GenModSelectionProcessor { -protected: - HCURSOR GetTransformCursor(); -public: - EPM_ExtrudeSelectionProcessor(EPM_ExtrudeMouseProc *mc, EditPatchMod *o, IObjParam *i) - : GenModSelectionProcessor(mc,(BaseObject*) o,i) {} -}; - - -class EPM_ExtrudeCMode : public CommandMode { -private: - ChangeFGObject fgProc; - EPM_ExtrudeSelectionProcessor mouseProc; - EPM_ExtrudeMouseProc eproc; - EditPatchMod* po; - -public: - EPM_ExtrudeCMode(EditPatchMod* o, IObjParam *i) : - fgProc((ReferenceTarget *)o), mouseProc(&eproc,o,i), eproc(o,i) {po=o;} - int Class() { return MODIFY_COMMAND; } - int ID() { return CID_EPM_EXTRUDE; } - MouseCallBack *MouseProc(int *numPoints) { *numPoints=2; return &mouseProc; } - ChangeForegroundCallback *ChangeFGProc() { return &fgProc; } - BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; } - void EnterMode(); - void ExitMode(); -}; - - - - -class EPM_BevelMouseProc : public MouseCallBack { -private: - MoveTransformer moveTrans; - EditPatchMod *po; - Interface *ip; - IPoint2 om; - -public: - EPM_BevelMouseProc(EditPatchMod* o, IObjParam *i) : moveTrans(i) {po=o;ip=i;} - int proc(HWND hwnd, int msg, int point, int flags, IPoint2 m); -}; - - -class EPM_BevelSelectionProcessor : public GenModSelectionProcessor { -protected: - HCURSOR GetTransformCursor(); -public: - EPM_BevelSelectionProcessor(EPM_BevelMouseProc *mc, EditPatchMod *o, IObjParam *i) - : GenModSelectionProcessor(mc,(BaseObject*) o,i) {} -}; - - -class EPM_BevelCMode : public CommandMode { -private: - ChangeFGObject fgProc; - EPM_BevelSelectionProcessor mouseProc; - EPM_BevelMouseProc eproc; - EditPatchMod* po; - -public: - EPM_BevelCMode(EditPatchMod* o, IObjParam *i) : - fgProc((ReferenceTarget *)o), mouseProc(&eproc,o,i), eproc(o,i) {po=o;} - int Class() { return MODIFY_COMMAND; } - int ID() { return CID_EPM_BEVEL; } - MouseCallBack *MouseProc(int *numPoints) { *numPoints=3; return &mouseProc; } - ChangeForegroundCallback *ChangeFGProc() { return &fgProc; } - BOOL ChangeFG( CommandMode *oldMode ) { return oldMode->ChangeFGProc() != &fgProc; } - void EnterMode(); - void ExitMode(); -}; - -class VertInsertRecord; -class PickPatchAttach; - -class EditPatchMod : public Modifier, IPatchOps, IPatchSelect, ISubMtlAPI, AttachMatDlgUser -{ - friend class EPTempData; - friend class EditPatchData; - friend class XFormProc; - friend class PatchRestore; - friend class PVertexRightMenu; - friend class PatchRightMenu; - friend class PickPatchAttach; - - public: - static HWND hSelectPanel, hOpsPanel, hSurfPanel, hTilePanel, hEdgePanel; - static BOOL rsSel, rsOps, rsSurf, rsTile, rsEdge; // rollup states (FALSE = rolled up) - static IObjParam *ip; - - static MoveModBoxCMode *moveMode; - static RotateModBoxCMode *rotMode; - static UScaleModBoxCMode *uscaleMode; - static NUScaleModBoxCMode *nuscaleMode; - static SquashModBoxCMode *squashMode; - static SelectModBoxCMode *selectMode; - static ISpinnerControl *weldSpin; - static ISpinnerControl *stepsSpin; - static ISpinnerControl *tileSpin; - static ISpinnerControl *transitionSpin; -//3-18-99 to suport render steps and removal of the mental tesselator - static ISpinnerControl *stepsRenderSpin; - static PickPatchAttach pickCB; - static BOOL patchUIValid; - static BOOL tileUIValid; - static BOOL edgeUIValid; - -//watje command mode for the extrude and beevl - static EPM_ExtrudeCMode *extrudeMode; - static EPM_BevelCMode *bevelMode; - static EPM_BindCMode *bindMode; - - // for the tessellation controls - static BOOL settingViewportTess; // are we doing viewport or renderer - static BOOL settingDisp; // if we're doign renderer is it mesh or displacmenent - static ISpinnerControl *uSpin; - static ISpinnerControl *vSpin; - static ISpinnerControl *edgeSpin; - static ISpinnerControl *angSpin; - static ISpinnerControl *distSpin; - static ISpinnerControl *mergeSpin; - static ISpinnerControl *matSpin; - static ISpinnerControl *tessUSpin; - static ISpinnerControl *tessVSpin; - static ISpinnerControl *tileNum; - static ISpinnerControl *tileRot; - static int attachMat; - static BOOL condenseMat; - static int CurrentTileSet; - static int brushSize; - static int ColorBushSize; - static int tileSize; - static int TileGroup; // Active group of tiles. 0: no gourp, 1-4: group 0 to 3 - static int DisplaceTile; // Active displace tile - static int DisplaceTileSet; // Active tileset in displace - static uint TileFillRotation; // Rotation used in fill - static bool TileTrick; // Trick - static int tileSetSet; - static int channelModified; - static bool additiveTile; - static bool automaticLighting; - - RefResult NotifyRefChanged( Interval changeInt,RefTargetHandle hTarget, - PartID& partID, RefMessage message ) { return REF_SUCCEED; } - - int selLevel; - - // RB:named sel sets - BOOL namedSelNeedsFixup; // TRUE for pre-r3 files - Tab namedSel[5]; - int FindSet(TSTR &setName,int level); - void AddSet(TSTR &setName,int level); - void RemoveSet(TSTR &setName,int level); - void RemoveAllSets(); - void ClearSetNames(); - - // Remembered info - PatchMesh *rememberedPatch; // NULL if using all selected patches - int rememberedIndex; - int rememberedData; - - BOOL displaySurface; - BOOL displayLattice; - int meshSteps; -//3-18-99 to suport render steps and removal of the mental tesselator - int meshStepsRender; - BOOL showInterior; - int tileLevel; - bool tileMode; - bool includeMeshes; - bool keepMapping; - int transitionType; - - BOOL meshAdaptive; // Future use (Not used now) - TessApprox viewTess; // for GAP tessellation - TessApprox prodTess; - TessApprox dispTess; - - BOOL mViewTessNormals; // use normals from the tesselator - BOOL mProdTessNormals; // use normals from the tesselator - BOOL mViewTessWeld; // Weld the mesh after tessellation - BOOL mProdTessWeld; // Weld the mesh after tessellation - BOOL propagate; - - BOOL inExtrude; - BOOL inBevel; - - - EditPatchMod(); - ~EditPatchMod(); - - Interval LocalValidity(TimeValue t); - ChannelMask ChannelsUsed() { return EDITPAT_CHANNELS; } - ChannelMask ChannelsChanged() { return channelModified; } - void ModifyObject(TimeValue t, ModContext &mc, ObjectState *os, INode *node); - void NotifyInputChanged(Interval changeInt, PartID partID, RefMessage message, ModContext *mc); - Class_ID InputType() { return RYKOLPATCHOBJ_CLASS_ID; } - - int CompMatrix(TimeValue t, ModContext& mc, Matrix3& tm, Interval& valid); - - // From Animatable - void DeleteThis() { delete this; } - void GetClassName(TSTR& s) { s= TSTR(_T("EditPatchRyzomMod")); } - Class_ID ClassID() { return Class_ID(0x4dd14a3c, 0x4ac23c0c); } - void* GetInterface(ULONG id); - - // From BaseObject - int HitTest(TimeValue t, INode* inode, int type, int crossing, int flags, IPoint2 *p, ViewExp *vpt, ModContext* mc); - int Display(TimeValue t, INode* inode, ViewExp *vpt, int flagst, ModContext *mc); - void GetWorldBoundBox(TimeValue t,INode* inode, ViewExp *vpt, Box3& box, ModContext *mc); - - void GetSubObjectCenters(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc); - void GetSubObjectTMs(SubObjAxisCallback *cb,TimeValue t,INode *node,ModContext *mc); - int SubObjectIndex(HitRecord *hitRec); - - BOOL DependOnTopology(ModContext &mc); - - // Generic xform procedure. - void XFormVerts( XFormProc *xproc, TimeValue t, Matrix3& partm, Matrix3& tmAxis ); - - // Specialized xform for bezier handles - void XFormHandles( XFormProc *xproc, TimeValue t, Matrix3& partm, Matrix3& tmAxis, int object, int handleIndex ); - - // Affine transform methods - void Move( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE ); - void Rotate( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Quat& val, BOOL localOrigin=FALSE ); - void Scale( TimeValue t, Matrix3& partm, Matrix3& tmAxis, Point3& val, BOOL localOrigin=FALSE ); - - // The following is called before the first Move(), Rotate() or Scale() call - void TransformStart(TimeValue t); - - // The following is called after the user has completed the Move, Rotate or Scale operation and - // the undo object has been accepted. - void TransformFinish(TimeValue t); - - // The following is called when the transform operation is cancelled by a right-click and the undo - // has been cancelled. - void TransformCancel(TimeValue t); - - BOOL SupportsNamedSubSels() {return TRUE;} - void ActivateSubSelSet(TSTR &setName); - void NewSetFromCurSel(TSTR &setName); - void RemoveSubSelSet(TSTR &setName); - void SetupNamedSelDropDown(); - int NumNamedSelSets(); - TSTR GetNamedSelSetName(int i); - void SetNamedSelSetName(int i,TSTR &newName); - void NewSetByOperator(TSTR &newName,Tab &sets,int op); - BOOL GetUniqueSetName(TSTR &name); - int SelectNamedSet(); - void NSCopy(); - void NSPaste(); - void MaybeFixupNamedSels(); - -//watje 12-10-98 - void DoHide(int type); - void DoUnHide(); - void DoPatchHide(); - void DoVertHide(); - void DoEdgeHide(); - - void DoAddHook(PatchMesh *pMesh, int vert0, int vert1, int vert2, int seg, int config); - void DoRemoveHook(); - -//watje bevel and extrusion stuff - void DoExtrude() ; - void BeginExtrude(TimeValue t); - void EndExtrude (TimeValue t, BOOL accept=TRUE); - void Extrude( TimeValue t, float amount, BOOL useLocalNorm ); - - - void DoBevel() ; - void BeginBevel(TimeValue t); - void EndBevel (TimeValue t, BOOL accept=TRUE); - void Bevel( TimeValue t, float amount, BOOL smoothStart, BOOL smoothEnd ); - - - - - void DoDeleteSelected(); - void DoVertDelete(); - void DoEdgeDelete(); - void DoPatchDelete(); - void DoPatchAdd(int type); - void DoSubdivide(int type); - void DoEdgeSubdivide(); - void DoPatchSubdivide(); - void DoVertWeld(); - void DoVertReset(); - void DoPatchDetach(int copy, int reorient); - void DoPatchTurn(bool ccw); - - void ClearPatchDataFlag(ModContextList& mcList,DWORD f); - void DeletePatchDataTempData(); - void CreatePatchDataTempData(); - - int NumRefs() { return 0; } - RefTargetHandle GetReference(int i) { return NULL; } - void SetReference(int i, RefTargetHandle rtarg) {} - - void ChangeRememberedPatch(int type); - void ChangeSelPatches(int type); - int RememberPatchThere(HWND hWnd, IPoint2 m); - void SetRememberedPatchType(int type); - void ChangeRememberedVert(int type); - void ChangeSelVerts(int type); - int RememberVertThere(HWND hWnd, IPoint2 m); - void SetRememberedVertType(int type); - - // IO - IOResult Save(ISave *isave); - IOResult Load(ILoad *iload); - IOResult SaveLocalData(ISave *isave, LocalModData *ld); - IOResult LoadLocalData(ILoad *iload, LocalModData **pld); - IOResult LoadNamedSelChunk(ILoad *iload,int level); - - CreateMouseCallBack* GetCreateMouseCallBack() { return NULL; } - void BeginEditParams( IObjParam *ip, ULONG flags, Animatable *prev ); - void EndEditParams( IObjParam *ip, ULONG flags, Animatable *next ); - RefTargetHandle Clone(RemapDir& remap = DefaultRemapDir()); - TCHAR *GetObjectName() { return GetString(IDS_TH_EDITPATCH); } - void ActivateSubobjSel(int level, XFormModes& modes ); - int NeedUseSubselButton() { return 0; } - void SelectSubComponent( HitRecord *hitRec, BOOL selected, BOOL all, BOOL invert ); - void ClearSelection(int selLevel); - void SelectAll(int selLevel); - void InvertSelection(int selLevel); - - void SetDisplaySurface(BOOL sw); - void SetDisplayLattice(BOOL sw); - void SetPropagate(BOOL sw); - BOOL GetPropagate() {return propagate;} - void SetMeshSteps(int count); - int GetMeshSteps() { return meshSteps; } -//3-18-99 to suport render steps and removal of the mental tesselator - void SetMeshStepsRender(int count); - int GetMeshStepsRender() { return meshStepsRender; } - void SetShowInterior(BOOL si); - BOOL GetShowInterior() { return showInterior; } - void SetTileSteps(int steps); - int GetTileLevel() { return tileLevel; } - void SetTileMode (bool bTile); - bool GetTileMode() { return tileMode; } - bool GetIncludeMeshes() { return includeMeshes; } - void SetKeepMapping (bool bKeep); - bool GetKeepMapping() { return keepMapping; } - int GetTransitionLevel() { return transitionType; } - void SetTransitionLevel(int transition); - -// Future use (Not used now) -// void SetMeshAdaptive(BOOL sw); - void SetViewTess(TessApprox &tess); - TessApprox GetViewTess() { return viewTess; } - void SetProdTess(TessApprox &tess); - TessApprox GetProdTess() { return prodTess; } - void SetDispTess(TessApprox &tess); - TessApprox GetDispTess() { return dispTess; } - void SetTessUI(HWND hDlg, TessApprox *tess); - BOOL GetViewTessNormals() { return mViewTessNormals; } - void SetViewTessNormals(BOOL use); - BOOL GetProdTessNormals() { return mProdTessNormals; } - void SetProdTessNormals(BOOL use); - BOOL GetViewTessWeld() { return mViewTessWeld; } - void SetViewTessWeld(BOOL weld); - BOOL GetProdTessWeld() { return mProdTessWeld; } - void SetProdTessWeld(BOOL weld); - - // Get the commonality of material index for the selection (-1 indicates no commonality) - int GetSelMatIndex(); - void SetSelMatIndex(int index); - void SelectByMat(int index,BOOL clear); - - // Tile tess - int GetSelTessU (); - int GetSelTessV (); - void SetSelTess (int nU, int nV); - void BalanceSelPatch (int patch, int size, bool balanceU, std::set& visitedU, std::set& visitedV, RPatchMesh* rpatch, PatchMesh *); - void BalanceSelPatch (); - - // *** Smooth flags - - /** - * Return 0 if no edge are selected or no selected edges have the flag set. - * Return 1 if all the selected edge have the flag set. - * Return 2 if some of the selected edge of the flag set but not all of them. - */ - int getSmoothFlags (); - - /// Set the smmoth flag for the selected edges. - void setSmoothFlags (bool smooth); - - /*void SetTileNum (ULONG nU); - ULONG GetTileNum (); - void SetTileRot (int nU); - int GetTileRot ();*/ - - // Smoothing - DWORD GetSelSmoothBits(DWORD &invalid); - DWORD GetUsedSmoothBits(); - void SelectBySmoothGroup(DWORD bits,BOOL clear); - void SetSelSmoothBits(DWORD bits,DWORD which); - - void PatchSelChanged(); - - // from AttachMatDlgUser - int GetAttachMat() { return attachMat; } - void SetAttachMat(int value) { attachMat = value; } - BOOL GetCondenseMat() { return condenseMat; } - void SetCondenseMat(BOOL sw) { condenseMat = sw; } - - int DoAttach(INode *node, PatchMesh *attPatch, RPatchMesh *rattPatch, bool & canUndo); - - // Store current topology in the PatchObject - void RecordTopologyTags(); - - // Re-match named selection sets, etc. with changed topology (Call RecordTopologyTags - // before making the changes to the shape, then call this) - void ResolveTopoChanges(); - - void RescaleWorldUnits(float f); - - int GetSubobjectLevel(); - void SetSubobjectLevel(int level); - void RefreshSelType(); - void UpdateSelectDisplay(); - void SetSelDlgEnables(); - void SetOpsDlgEnables(); - void SetSurfDlgEnables(); - void SetTileDlgEnables(); - void SetEdgeDlgEnables(); - void SelectionChanged(); - void InvalidateSurfaceUI(); - void InvalidateTileUI(); - void InvalidateEdgeUI(); - BitArray *GetLevelSelectionSet(PatchMesh *patch, RPatchMesh *rpatch); - - // patch select and operations interfaces, JBW 2/2/99 - void StartCommandMode(patchCommandMode mode); - void ButtonOp(patchButtonOp opcode); - - DWORD GetSelLevel(); - void SetSelLevel(DWORD level); - void LocalDataChanged(); - - // ISubMtlAPI methods: - MtlID GetNextAvailMtlID(ModContext* mc); - BOOL HasFaceSelection(ModContext* mc); - void SetSelFaceMtlID(ModContext* mc, MtlID id, BOOL bResetUnsel = FALSE); - int GetSelFaceUniqueMtlID(ModContext* mc); - int GetSelFaceAnyMtlID(ModContext* mc); - int GetMaxMtlID(ModContext* mc); -}; - -class PickPatchAttach : - public PickModeCallback, - public PickNodeCallback { - public: - EditPatchMod *ep; - - PickPatchAttach() {ep=NULL;} - - BOOL HitTest(IObjParam *ip,HWND hWnd,ViewExp *vpt,IPoint2 m,int flags); - BOOL Pick(IObjParam *ip,ViewExp *vpt); - - void EnterMode(IObjParam *ip); - void ExitMode(IObjParam *ip); - - HCURSOR GetHitCursor(IObjParam *ip); - - BOOL Filter(INode *node); - - PickNodeCallback *GetFilter() {return this;} - - BOOL RightClick(IObjParam *ip,ViewExp *vpt) {return TRUE;} - }; - -// Table to convert selLevel values to patch selLevel flags. -const int patchLevel[] = {PATCH_OBJECT,PATCH_VERTEX,PATCH_EDGE,PATCH_PATCH,PATCH_OBJECT}; - -// Get display flags based on selLevel. -const DWORD patchLevelDispFlags[] = {0,DISP_VERTTICKS|DISP_SELVERTS,DISP_SELEDGES,DISP_SELPATCHES,0}; - -// For hit testing... -static int patchHitLevel[] = {0,SUBHIT_PATCH_VERTS | SUBHIT_PATCH_VECS,SUBHIT_PATCH_EDGES,SUBHIT_PATCH_PATCHES, 0}; - -class EditPatchClassDesc:public ClassDesc { - public: - int IsPublic() { return 1; } - void * Create(BOOL loading = FALSE ) - { - return new EditPatchMod; - } - const TCHAR * ClassName() { return "NeL Edit Advanced"; } - SClass_ID SuperClassID() { return OSM_CLASS_ID; } - Class_ID ClassID() { return Class_ID(0x4dd14a3c, 0x4ac23c0c); } - const TCHAR* Category() { return "NeL Tools";} - void ResetClassParams(BOOL fileReset); - }; - -typedef Tab Point3Tab; - -class XFormProc { - public: - virtual Point3 proc(Point3& p, Matrix3 &mat, Matrix3 &imat)=0; - virtual void SetMat( Matrix3& mat ) {} - }; - -class MoveXForm : public XFormProc { - private: - Point3 delta, tdelta; - public: - Point3 proc(Point3& p, Matrix3 &mat, Matrix3 &imat) - { return p + tdelta; } - void SetMat( Matrix3& mat ) - { tdelta = VectorTransform(Inverse(mat),delta); } - MoveXForm(Point3 d) { delta = d; } - }; - -class RotateXForm : public XFormProc { - private: - Matrix3 rot, trot; - public: - Point3 proc(Point3& p, Matrix3 &mat, Matrix3 &imat) - { return (trot*p)*imat; } - void SetMat( Matrix3& mat ) - { trot = mat * rot; } - RotateXForm(Quat q) { q.MakeMatrix(rot); } - }; - -class ScaleXForm : public XFormProc { - private: - Matrix3 scale, tscale; - public: - Point3 proc(Point3& p, Matrix3 &mat, Matrix3 &imat) - { return (p*tscale)*imat; } - void SetMat( Matrix3& mat ) - { tscale = mat*scale; } - ScaleXForm(Point3 s) { scale = ScaleMatrix(s); } - }; - -typedef Tab IntTab; - -// General-purpose patch point table -- Maintains point table for each of n polygons -class PatchPointTab { - public: - Point3Tab ptab; // Patch mesh points - Point3Tab vtab; // Patch mesh vectors - IntTab pttab; // Patch point types - PatchPointTab(); - ~PatchPointTab(); - void Empty(); - void Zero(); - void MakeCompatible(PatchMesh& patch, BOOL clear=TRUE); - PatchPointTab& operator=(PatchPointTab& from); - BOOL IsCompatible(PatchMesh &patch); - void RescaleWorldUnits(float f); - IOResult Save(ISave *isave); - IOResult Load(ILoad *iload); - }; - -class PatchVertexDelta { - public: - PatchPointTab dtab; - - void SetSize(PatchMesh &patch, BOOL load=TRUE); - void Empty() { dtab.Empty(); } - void Zero() { dtab.Zero(); } - void SetVert(int i, const Point3& p) { dtab.ptab[i] = p; } - void SetVertType(int i, int k) { dtab.pttab[i] = k; } - void SetVec(int i, const Point3& p) { dtab.vtab[i] = p; } - void MoveVert(int i, const Point3& p) { dtab.ptab[i] += p; } - void MoveVec(int i, const Point3& p) { dtab.vtab[i] += p; } - void Apply(PatchMesh& patch); - void UnApply(PatchMesh& patch); - PatchVertexDelta& operator=(PatchVertexDelta& from) { dtab = from.dtab; return *this; } - void ApplyHandlesAndZero(PatchMesh &patch, int handleVert); - BOOL IsCompatible(PatchMesh &patch) { return dtab.IsCompatible(patch); } - void RescaleWorldUnits(float f) { dtab.RescaleWorldUnits(f); } - IOResult Save(ISave *isave); - IOResult Load(ILoad *iload); - }; - -class AdjEdgeList; -class EPTempData; - -/*-------------------------------------------------------------------*/ - -// Class for recording changes -- This is used to reconstruct an object from the original whenever -// the modifier is re-entered or whenever the system needs to reconstruct an object's cache. This may be -// slow if a lot of changes have been recorded, but it's about the only way to properly reconstruct an object -// because the output of one operation becomes the input of the next. - -// These are used as follows: -// When a user makes a modification to an object, a StartChangeGroup call needs to be made to the EditPatchData -// object. Then a change record needs to be added for each sub-operation that makes up the modification. These -// records are owned by the EditPatchData object, but they should also be referenced by the undo object for that -// operation. If an undo is done, ownership of the modification record transfers to the undo/redo object and the -// record is REMOVED (NOT DELETED) from the EditPatchData object. This keeps the record around for a redo operation -// but removes it from the list of records for the modifier. If the undo is redone, ownership transfers back to -// the modifier, when it is re-added to the modification record list. - -// Note that this class contains load and save methods, necessary because the modifier needs to be able to save -// and load them. When you subclass off of this, be sure your load and save methods call the base class's first! - -class PatchRestore; - -class PModRecord { - public: - virtual BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord)=0; - virtual IOResult Load(ILoad *iload)=0; - }; - -typedef PModRecord* PPModRecord; -typedef Tab ModRecordTab; - -/*-------------------------------------------------------------------*/ - -// Here are the types of modification records we use! - -#define CLEARVERTSELRECORD_CHUNK 0x2000 -#define SETVERTSELRECORD_CHUNK 0x2001 -#define INVERTVERTSELRECORD_CHUNK 0x2002 -#define CLEAREDGESELRECORD_CHUNK 0x2005 -#define SETEDGESELRECORD_CHUNK 0x2006 -#define INVERTEDGESELRECORD_CHUNK 0x2007 -#define CLEARPATCHSELRECORD_CHUNK 0x2010 -#define SETPATCHSELRECORD_CHUNK 0x2011 -#define INVERTPATCHSELRECORD_CHUNK 0x2012 -#define VERTSELRECORD_CHUNK 0x2020 -#define EDGESELRECORD_CHUNK 0x2025 -#define PATCHSELRECORD_CHUNK 0x2030 -#define VERTMOVERECORD_CHUNK 0x2040 -#define PATCHDELETERECORD_CHUNK 0x2050 -#define VERTDELETERECORD_CHUNK 0x2060 -#define PATCHCHANGERECORD_CHUNK 0x2070 -#define VERTCHANGERECORD_CHUNK 0x2080 -#define PATCHADDRECORD_CHUNK 0x2090 -#define EDGESUBDIVIDERECORD_CHUNK 0x20A0 -#define PATCHSUBDIVIDERECORD_CHUNK 0x20B0 -#define VERTWELDRECORD_CHUNK 0x20C0 -#define PATTACHRECORD_CHUNK 0x20D0 -#define PATCHDETACHRECORD_CHUNK 0x20E0 -#define PATCHMTLRECORD_CHUNK 0x20F0 - -class ClearPVertSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class SetPVertSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class InvertPVertSelRecord : public PModRecord { - public: - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class ClearPEdgeSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class SetPEdgeSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class InvertPEdgeSelRecord : public PModRecord { - public: - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class ClearPatchSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class SetPatchSelRecord : public PModRecord { - public: - BitArray sel; // Old state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class InvertPatchSelRecord : public PModRecord { - public: - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PVertSelRecord : public PModRecord { - public: - BitArray oldSel; // Old state - BitArray newSel; // New state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PEdgeSelRecord : public PModRecord { - public: - BitArray oldSel; // Old state - BitArray newSel; // New state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchSelRecord : public PModRecord { - public: - BitArray oldSel; // Old state - BitArray newSel; // New state - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PVertMoveRecord : public PModRecord { - public: - PatchVertexDelta delta; // Position changes for each vertex (Wasteful! Change later?) - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchDeleteRecord : public PModRecord { - public: - PatchMesh oldPatch; // How the spline looked before the delete - RPatchMesh roldPatch; // How the spline looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PVertDeleteRecord : public PModRecord { - public: - PatchMesh oldPatch; // How the patch looked before the delete - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchChangeRecord : public PModRecord { - public: - PatchMesh oldPatch; // How the patch mesh looked before the change - RPatchMesh roldPatch; // How the patch looked before the delete - int index; - int type; - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PVertChangeRecord : public PModRecord { - public: - PatchMesh oldPatch; // How the patch mesh looked before the change - RPatchMesh roldPatch; // How the patch looked before the delete - int index; - int type; - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchAddRecord : public PModRecord { - public: - BOOL postWeld; // Present in MAX 2.0 and up - int type; // 3 or 4 sides! - PatchMesh oldPatch; // How the patch looked before the addition - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class EdgeSubdivideRecord : public PModRecord { - public: - BOOL propagate; // Carry around entire patch mesh? - PatchMesh oldPatch; // How the patch looked before the addition - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchSubdivideRecord : public PModRecord { - public: - BOOL propagate; // Carry around entire patch mesh? - PatchMesh oldPatch; // How the patch looked before the addition - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PVertWeldRecord : public PModRecord { - public: - float thresh; // Weld threshold - BOOL propagate; // Carry around entire patch mesh? - PatchMesh oldPatch; // How the patch looked before the addition - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PAttachRecord : public PModRecord { - public: - PatchMesh attPatch; // The patch we're attaching - int oldPatchCount; // The number of splines present before attaching - int mtlOffset; - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -class PatchDetachRecord : public PModRecord { - public: - int copy; - PatchMesh oldPatch; - RPatchMesh roldPatch; // How the patch looked before the delete - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -typedef Tab MtlIDTab; - -class PatchMtlRecord : public PModRecord { - public: - MtlIDTab materials; // Materials from selected patches - MtlID index; // New material index assigned - BOOL Redo(PatchMesh *patch,RPatchMesh *rpatch,int reRecord); - IOResult Load(ILoad *iload); - }; - -/*-------------------------------------------------------------------*/ - -// Vertex Mapping class -- Gives mapping from vert in original patch to -// vert in modified patch - -class EPMapVert { - public: - BOOL originalStored; - int vert; - Point3 original; // Original point location - Point3 delta; // The delta we've applied - EPMapVert() { originalStored = FALSE; vert = 0; original = Point3(0,0,0); delta = Point3(0,0,0); } - EPMapVert(int v, Point3 &o, Point3 &d) { vert = v; original = o; delta = d; originalStored = TRUE; } - }; - -class EPVertMapper { - public: - int verts; - EPMapVert *vertMap; - int vecs; - EPMapVert *vecMap; - EPVertMapper() { verts = vecs = 0; vertMap = vecMap = NULL; } - ~EPVertMapper(); - // Set up remap data structures. - void Build(PatchMesh &patch); - // Update the deltas we have stored, if necessary and apply to output patch mesh. - // This is in response to the original shape changing - void UpdateAndApplyDeltas(PatchMesh &inPatch, PatchMesh &outPatch); - // Recompute the deltas we have stored - // This is done after the modifier's user interaction changes the shape - void RecomputeDeltas(PatchMesh &patch); - // Record the topology tags in the specified shape - void RecordTopologyTags(PatchMesh &patch); - // Update the topology tag mapping - void UpdateMapping(PatchMesh &patch); - EPVertMapper& operator=(EPVertMapper &from); - void RescaleWorldUnits(float f); - IOResult Save(ISave *isave); - IOResult Load(ILoad *iload); - }; - -/*-------------------------------------------------------------------*/ - -// EditPatchData flags -#define EPD_BEENDONE (1<<0) -#define EPD_UPDATING_CACHE (1<<1) -#define EPD_HASDATA (1<<2) -#define EMD_HELD (1<<3) // equivalent to A_HELD - -// This is the data that each mod app will have. -class EditPatchData : public LocalModData { - public: - BOOL handleFlag; - int handleVert; - - // Stuff we need to have for the patch's mesh conversion -- These are - // Here because they're kind of a global change -- not undoable. - int meshSteps; -//3-18-99 to suport render steps and removal of the mental tesselator - int meshStepsRender; - BOOL showInterior; - int tileLevel; - bool tileMode; - bool includeMeshes; - bool keepMapping; - int transitionType; - - BOOL meshAdaptive; // Future use (Not used now) - TessApprox viewTess; - TessApprox prodTess; - TessApprox dispTess; - BOOL mViewTessNormals; // use normals from the tesselator - BOOL mProdTessNormals; // use normals from the tesselator - BOOL mViewTessWeld; // Weld the mesh after tessellation - BOOL mProdTessWeld; // Weld the mesh after tessellation - BOOL displaySurface; - BOOL displayLattice; - - DWORD flags; - - // This records the changes to the incoming object. - ModRecordTab changes; - - // A pointer to the change record's vertex delta object - PatchVertexDelta vdelta; - - // RB: Named selection set lists - GenericNamedSelSetList vselSet; // Vertex - GenericNamedSelSetList eselSet; // Edge - GenericNamedSelSetList pselSet; // Patch - - // While an object is being edited, this exists. - EPTempData *tempData; - - // The knot mapping for the edited patch - EPVertMapper vertMap; - - // The final edited patch - PatchMesh finalPatch; - RPatchMesh rfinalPatch; - - EditPatchData(EditPatchMod *mod); - EditPatchData(EditPatchData& emc); - - // Applies modifications to a patchObject - void Apply(TimeValue t,RPO *patchOb,int selLevel); - - // Invalidates any caches affected by the change. - void Invalidate(PartID part,BOOL meshValid=TRUE); - - // If this is the first edit, then the delta arrays will be allocated - void BeginEdit(TimeValue t); - - LocalModData *Clone() { return new EditPatchData(*this); } - - void SetFlag(DWORD f,BOOL on) - { - if ( on ) { - flags|=f; - } else { - flags&=~f; - } - } - DWORD GetFlag(DWORD f) { return flags&f; } - - EPTempData *TempData(EditPatchMod *mod); - - // Change recording functions: - void ClearHandleFlag() { handleFlag = FALSE; } - void SetHandleFlag(int vert) { handleVert = vert; handleFlag = TRUE; } - BOOL DoingHandles() { return handleFlag; } - void ApplyHandlesAndZero(PatchMesh &patch) { vdelta.ApplyHandlesAndZero(patch, handleVert); } - void RescaleWorldUnits(float f); - - // MAXr3: New recording system - void RecordTopologyTags(PatchMesh *patch); - void UpdateChanges(PatchMesh *patch, RPatchMesh *rpatch, BOOL checkTopology=TRUE); - - // Named selection set access - GenericNamedSelSetList &GetSelSet(EditPatchMod *mod); // Get the one for the current subobject selection level - GenericNamedSelSetList &GetSelSet(int level); // Get the one for the specified subobject selection level - - // IO - IOResult Save(ISave *isave); - IOResult Load(ILoad *iload); - }; - -// My generic restore class - -class PatchRestore : public RestoreObj -{ - public: - bool RPatchModified; - PatchMesh oldPatch, newPatch; - RPatchMesh *roldPatch, *rnewPatch; // How the patch looked before the delete - BOOL gotRedo; - TimeValue t; - EditPatchData *epd; - EditPatchMod *mod; - TSTR where; - - PatchRestore (EditPatchData* pd, EditPatchMod* mod, PatchMesh *patch, RPatchMesh *rpatch, TCHAR *id=_T("")); - virtual ~PatchRestore (); - - void Restore(int isUndo); - void Redo(); - int Size() { return 1; } - void EndHold() {mod->ClearAFlag(A_HELD);} - TSTR Description() - { - TSTR string; - string.printf(_T("Generic patch restore [%s]"),where); - return string; - } -}; - -// Patch selection restore class - -class PatchSelRestore : public RestoreObj { - public: - BitArray oldVSel, newVSel; - BitArray oldESel, newESel; - BitArray oldPSel, newPSel; - BOOL gotRedo; - TimeValue t; - EditPatchData *epd; - EditPatchMod *mod; - - PatchSelRestore(EditPatchData* pd, EditPatchMod* mod, PatchMesh *patch); - - void Restore(int isUndo); - void Redo(); - int Size() { return 1; } - void EndHold() {mod->ClearAFlag(A_HELD);} - TSTR Description() { return TSTR(_T("Patch Select restore")); } - }; - -/*-------------------------------------------------------------------*/ - -class EPTempData { - private: - PatchMesh *patch; - RPatchMesh *rpatch; - Interval patchValid; - - EditPatchMod *mod; - EditPatchData *patchData; - - public: - - ~EPTempData(); - EPTempData(EditPatchMod *m,EditPatchData *md); - void Invalidate(PartID part,BOOL meshValid=TRUE); - - PatchMesh *GetPatch(TimeValue t, RPatchMesh *&rPatch); - - BOOL PatchCached(TimeValue t); - void UpdateCache(RPO *patchOb); - EditPatchMod *GetMod() { return mod; } - }; - - -class PatchDeleteUser : public EventUser -{ -private: - EditPatchMod *ep; -public: - void Notify() { ep->DoDeleteSelected(); } - void SetMod(EditPatchMod *ep) { this->ep = ep; } -}; - - -// Patch hit override functions - -extern void SetPatchHitOverride(int value); -extern void ClearPatchHitOverride(); - -#endif // __EDITPATCH_H__ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/extrudec.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/extrudec.cur deleted file mode 100644 index 055108330f6766fc14d36232ee9e410aac65856c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmY+9v2DXJ5JexQ1PI(Hg=M6Z%aq$^#HW$sRQ7;9;$OuN#5N!_RPbG4(?$67-yOm5HswTBCJ Z@}rrCDcF%;f?cA5CW0Jzp*`z&zHxfICu0B zIUy@D>4285H6Ov7N)k^g6@$jrzVBEkay;d158)a@Z9mSJr1DJD4I)ut>v)4Ma9Hyb zys~==VZ;qz<{oy(^-BtxAadO6!OiahAGi~BUbE(jjuGdd6{lnPz)E|mXU2fH1qxN) Lm!jA^;Q!SN>{Hn; diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/fillet.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/fillet.cur deleted file mode 100644 index b7f9385f26b824244fdbeb103c13891ea41eaa5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmb7-F$%&!6h!B%h=qlf+9jo>V3RJnfmiS#LKF{@qnJ*+93gf&K&rs9CE=P#b=|Jo*0yAGV&r_=ncFuHUw=N)cX#g5 z(A0;S;}1S@fE))ob87Eh`K+ixypg2~#xprUup5%r0(K}C1OfN5tz4`h1 z^5S2;fAoKLa{3F`GY;bgQg-219u(ZQW$}jY9Y;=0_T8KNc=7FTy?E97F%IJ~ZhX_0 zdiZq{56so7P-RVLgMLv4iIUkS}36@qQn-2}YIrr*^71;ESiG1`x zA3Hcuu=lohpB44#dNGOiLl5+c1S1tz&joA^zTJXd;R=0-8;Cco;s9U6d~@3770j7O z^g=%?d?L@drr7q~PWie_tl7@d4?WRWrX5s>R^*^J`Wsy*5lgWC zR>sT4Bl;VOiLib0FXSLHap#gRK!0$E`ax`;9F*JQ+{}BSb-p+@|7&NwwM{f0B3DT~ ztu=lww1WdYB7TrOEV;;Bz^A1nIEqtvMDUY~CLgOcw(NE*d@$hs-`Mw`{W!PHf1@@4 z4$=9Kzr1z$#tWk|-EA|L_5Bq=UYi8c3W9K_QlzN-l;V0kp=-^ZztM-540DIb~`~TqQ zvs(X=7;#%(T&e#s8tbg0)Bew#VlC;;`X761pvbGwjlTTu)LcjIYW-JY#IE|UbPK`O z@CQ!S#2^>>=pobBr(@Lmj!&fC#@71JR2_=b^`Ggy@NDFHtJMEm6)Q6?aUHP@@{F!) z(sh^loj8%26RYaKiRV}9zf(5nl)Y>5g4J{c`C(+s&mX h&tt%2z+=E;Kpq4Ay#t-c5`BrD?v|mhM6$Eh_YYZh!!`f_ diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.cpp deleted file mode 100644 index 48c3e2947..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/** - * Generated by bin2c.exe - * binfile: .\light.tga - */ - -extern const unsigned char light[]; -extern const unsigned int lightSize; - -static const unsigned char light[] = -{ - 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, - 0x20, 0x08, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0xa2, 0xad, 0x00, 0x9c, 0xa6, - 0xb5, 0x00, 0x9c, 0xa6, 0xb5, 0x00, 0x94, 0xa2, - 0xad, 0x00, 0x94, 0x9e, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9e, - 0xad, 0x00, 0x9c, 0xae, 0xbd, 0x0f, 0x9c, 0xb6, - 0xc6, 0x2c, 0x9c, 0xb2, 0xbd, 0x18, 0x9c, 0xaa, - 0xbd, 0x08, 0x9c, 0xa6, 0xb5, 0x00, 0x9c, 0xaa, - 0xb5, 0x02, 0x10, 0x10, 0x10, 0x00, 0x6b, 0x69, - 0x73, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x9c, 0xaa, - 0xb5, 0x02, 0x9c, 0xc7, 0xd6, 0x5b, 0x9c, 0xcb, - 0xde, 0x6e, 0x9c, 0xc7, 0xd6, 0x5f, 0x9c, 0xc3, - 0xce, 0x4f, 0xa5, 0xba, 0xc6, 0x35, 0x6b, 0x7d, - 0x84, 0x00, 0x8c, 0x96, 0xa5, 0x00, 0x94, 0x9e, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x8c, 0x96, 0x9c, 0x00, 0x31, 0x2c, - 0x31, 0xa5, 0x73, 0x7d, 0x84, 0x48, 0x9c, 0xc7, - 0xd6, 0x5f, 0xa5, 0xe3, 0xef, 0xb5, 0x94, 0xdf, - 0xe7, 0xa1, 0x9c, 0xe7, 0xef, 0xbe, 0xa5, 0xdb, - 0xe7, 0x9b, 0x5a, 0x75, 0x84, 0x00, 0x8c, 0xaa, - 0xb5, 0x00, 0x9c, 0xae, 0xbd, 0x12, 0x94, 0x9e, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x84, 0x86, 0x8c, 0x00, 0x42, 0x28, - 0x21, 0xd8, 0x52, 0x71, 0x7b, 0xff, 0x5a, 0xe7, - 0xf7, 0xbe, 0x84, 0xe7, 0xef, 0xbb, 0x9c, 0xeb, - 0xef, 0xc5, 0x9c, 0xe7, 0xef, 0xbe, 0x52, 0x82, - 0x8c, 0x00, 0x94, 0xcb, 0xd6, 0x68, 0xa5, 0xcb, - 0xd6, 0x6b, 0x9c, 0xae, 0xbd, 0x12, 0x94, 0xa2, - 0xb5, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x7b, 0x7d, 0x84, 0x00, 0x31, 0x20, - 0x21, 0xd5, 0x84, 0xcf, 0xe7, 0xff, 0x7b, 0xfb, - 0xff, 0xfe, 0x7b, 0xf3, 0xff, 0xe1, 0x7b, 0xe3, - 0xef, 0xae, 0x52, 0x8a, 0x94, 0x00, 0x94, 0xe3, - 0xe7, 0xae, 0xa5, 0xe7, 0xef, 0xbb, 0x9c, 0xc7, - 0xd6, 0x5f, 0x9c, 0xb6, 0xc6, 0x2c, 0x9c, 0xa6, - 0xb5, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x73, 0x75, 0x7b, 0x00, 0x4a, 0x34, - 0x31, 0xff, 0x63, 0xd7, 0xe7, 0xff, 0x94, 0xff, - 0xff, 0xff, 0x7b, 0xdb, 0xde, 0xcb, 0x42, 0x8e, - 0x94, 0x00, 0x84, 0xeb, 0xef, 0xc5, 0xa5, 0xeb, - 0xef, 0xc8, 0x94, 0xdf, 0xe7, 0xa1, 0x9c, 0xcf, - 0xde, 0x78, 0x9c, 0xba, 0xc6, 0x35, 0x9c, 0xaa, - 0xb5, 0x02, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9e, - 0xad, 0x00, 0x21, 0x20, 0x21, 0xf1, 0x94, 0x7d, - 0x7b, 0xff, 0x73, 0x71, 0x6b, 0xff, 0x52, 0xc3, - 0xce, 0xff, 0x52, 0xa2, 0xad, 0x28, 0x8c, 0xf3, - 0xff, 0xe4, 0x7b, 0xf7, 0xff, 0xeb, 0x84, 0xef, - 0xf7, 0xd1, 0xa5, 0xdf, 0xe7, 0xa5, 0x9c, 0xc3, - 0xce, 0x4f, 0x9c, 0xae, 0xbd, 0x12, 0x94, 0xa2, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x63, 0x65, - 0x6b, 0x55, 0x00, 0x04, 0x00, 0xff, 0xb5, 0xaa, - 0xad, 0xfb, 0xd6, 0xb6, 0xb5, 0xff, 0x84, 0x6d, - 0x6b, 0xff, 0x63, 0xd3, 0xde, 0xf8, 0x8c, 0xff, - 0xff, 0xff, 0x84, 0xfb, 0xff, 0xf4, 0x5a, 0xc3, - 0xd6, 0xb8, 0x94, 0xb2, 0xbd, 0x48, 0x9c, 0xa2, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x73, 0x79, 0x84, 0x88, 0x00, 0x04, - 0x00, 0xff, 0x42, 0x38, 0x39, 0xff, 0x5a, 0x59, - 0x5a, 0xff, 0xf7, 0xef, 0xef, 0xff, 0xff, 0xef, - 0xef, 0xfe, 0xad, 0x9a, 0x9c, 0xff, 0x63, 0x96, - 0xa5, 0xff, 0x73, 0x82, 0x8c, 0xff, 0x5a, 0x4d, - 0x52, 0xff, 0x5a, 0x5d, 0x63, 0xff, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x8c, 0x8e, - 0x9c, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x52, 0x4d, - 0x4a, 0xff, 0xad, 0xa2, 0xa5, 0xff, 0x9c, 0x92, - 0x94, 0xfb, 0x6b, 0x65, 0x63, 0xff, 0xb5, 0xa2, - 0xa5, 0xff, 0xa5, 0x8e, 0x8c, 0xfe, 0x84, 0x65, - 0x63, 0xf8, 0x4a, 0x3c, 0x39, 0xee, 0x4a, 0x45, - 0x42, 0xbe, 0x5a, 0x61, 0x63, 0xd1, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xa5, 0x00, 0x08, 0x08, - 0x08, 0xeb, 0x5a, 0x4d, 0x4a, 0xff, 0xbd, 0xae, - 0xad, 0xff, 0xf7, 0xe7, 0xe7, 0xff, 0xd6, 0xc3, - 0xc6, 0xfb, 0x42, 0x38, 0x39, 0xe8, 0x4a, 0x55, - 0x5a, 0x15, 0x8c, 0x96, 0x9c, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x31, 0x34, 0x39, 0xc8, 0x52, 0x49, - 0x4a, 0xff, 0xd6, 0xc7, 0xc6, 0xff, 0xff, 0xfb, - 0xff, 0xff, 0xde, 0xc7, 0xc6, 0xff, 0x52, 0x49, - 0x4a, 0x7e, 0x84, 0x8a, 0x94, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x84, 0x8a, 0x94, 0xff, 0x8c, 0x7d, - 0x7b, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xde, 0xcb, - 0xce, 0xff, 0x52, 0x51, 0x52, 0x2f, 0x94, 0x96, - 0xa5, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0xfb, 0x8c, 0x92, - 0x9c, 0xff, 0x6b, 0x65, 0x63, 0xff, 0x7b, 0x79, - 0x7b, 0xab, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x94, 0x9a, 0xad, 0x00, 0x94, 0x9a, - 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x54, 0x52, 0x55, 0x45, 0x56, 0x49, - 0x53, 0x49, 0x4f, 0x4e, 0x2d, 0x58, 0x46, 0x49, - 0x4c, 0x45, 0x2e, 0x00, -}; - -static const unsigned int lightSize = 1068; - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.tga b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/light.tga deleted file mode 100644 index ddf71bc50ed57c83b5fbac3812c286baa08793fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 zcmcJPL1+^}6o!Z5Avc2{cua0RR3%WsfTuvDS**p?h^~mp5>OU}vJ@;!Jd{C1h8)U} zLmdPI;~}y+6t;-6xdhWfprwdwp^zdGRtUIAg%lR@oLTK*V-S0AVVD_s-^~C2^H_u? z(BYRvNt8;^6&wB6QL_MYfAWC>fVJE01obBTa9tAci0hf$VPm~84Dbyfkp#(^!<&?xEPh&8W}Auj0$%7yGVC7)|*clGT! z&ru?g=xc&?8#WAlAG}sO6gs{tMeU^Qhj@KlduBSjp%xVI*4qFfKv&FS{}{{n8u2)8 zFY17Zyd$xBxf6J%p90oj|f@aTDSYx_w@dY$LqMXa2lj zGteRsBXsGJ1sDQTb46jn>y^*(el)wJ=JEB`aXYZF&Fu)OyY&*v2&aOOL_)A=nY(l0 wnQclK@i+d%k32lP+r88JV0E9->oKhnb>31JuB`&hk)7$`;Jhh zM`R${SII!!KalAdAf|QuGLy%#4?Q0eD$m5!?W@##F;w^44z_*)zmY$H3ZWBkIw~oB gpfX`SWK?+spqYWb$-*na$Ts~sa>K?Sr1NTf1H>YRH2?qr diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mask_fac.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mask_fac.bmp deleted file mode 100644 index 94e1b7f1a0f0b64a6a28e5a17ef34ad5cd75c037..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmZY1u?>JQ3EM8x9|ETN7)3RKIPs=;&zsdf+E-S|Ex-9x%uGfI>dR$&!UW6Dn|1aCdlP>+C zLf*Dj7i&cTmJ29HyYPHmvfH5%+aAKZxLuZ2|IV?;bKqmJdGpzFM^3D+amPEZuc%U2 zRnv4tSsF}eLZsRd8gaCtVyBvR+AWJ3f~0uMMMYL?=Zf~tciS>Mm&-cvtL@$R+4;8; zb*P+dEjkErHs11&XU#vYd&3X z)iK0VMDt$LtTn?(!NprDr=t&EXH46hjxcWGNhU$_R*?{NH|HYODZiXltUNSPk)v-H zuo_tT9b2gyRYnpIq9<`qsbFNVa#eUG%mK21sfl#l#u1;r88-}DO-YuIyit-b%ZV)Z z8MTJYjz@P>_64lP7okUVYZ^11`1_7<^G zH9gB9`}dC`3Bz*dd!P5<*$Er}n0NRo4`g&b;%y3Xs9MOkG%oHv|~tH+(Xj$BQoc|ZH$_)PencZ2OoOK>LZ^egraEn3BhokK=Z} z>72hMZ&Rhf94%^9|J7%Wo-gW|cN1y6<(*d1Hv$yzXAU^e%9DmPO6qyjl4;(S@^!nZ z!`)YqM!K2v(|8gqi{bD+*EWp`{#0B+{)RU_BV`&`ywP|av)6O;cK-jzd;ET;TdEH7 zZW?Xrawn|AtV+XCox;wssVz*`^UJ=zqdKiQ|3ltsWF=IxmK8M>3_OX)v_6fLs-*x% zLEb&Rk0wIRC;qK3WFKCw*5m39=-{B2MbUX@oMFCo-p1KFq{QJH#Oi}M5I^Zv!N8M< zrI*inoaOFKr00P`L9!fq`)3M!{R+hzzu`_{YTL@sq5?Ux;JqAf*PQ>>9u0ZqnXg2D zEq27o4m+O2gvot+zw@5S+qTA|du?)mU|x<rZi8It?%Ymn?IG*qQem9=&lRSpw P3p0l4= zJ!~w>TqZ;gVDI5E;rh~z#Rs~sbiVe6f$#6ogEUL3RTd&s2}uv+O1V0(W~P11#f>ld zVjS)H+C5dLF4|(kRv-YQf#OdqZh&!QCp>Z_i5B#vd4d>TB_qE4BUMp%Z*cYY? zn?xf=cFCX1@dAm_*SibXEZR#={#@JT`M3xov+V@AKrrb^fE62g2{hPoFfSZII6SpO)>D z^9JmWX8tFHx+vlxYWIIF|G(Mw5&6H0^F6fu9+5v8UG*QgJkZl#{WT}`AM}pM`m{&* z0o1&$9mV_oS@-qito3-yZD;*YfVFVg0czh9t^ayr^_-(Oc6g?x@cm>!0&2;boa$LH<^I!ZQHsRU-2gd9&QHm);E7%73fNr?H+#E3!*G77V{l*wz3@`>51B?O20AqkLz!+c*Fa{U{i~+^~ Ye+Fu*YKxXxtF22ajdhEy Copyright (c) 1994, All Rights Reserved. - **********************************************************************/ - -#ifndef __MODS__H -#define __MODS__H - -#pragma warning (disable : 4786) -#include "Max.h" -//#include "reslib.h" - - -TCHAR *GetString(int id); - -/*#define EDITMESH_CLASS_ID 0x00050 -#define EDITSPLINE_CLASS_ID 0x00060 -#define EDITPATCH_CLASS_ID 0x00070 -#define EDITLOFT_CLASS_ID 0x00080 - -#define CLUSTOSM_CLASS_ID 0x25215824 - -#define RESET_XFORM_CLASS_ID 0x8d562b81 -#define CLUSTNODEOSM_CLASS_ID 0xc4d33*/ - - -/*extern ClassDesc* GetBombObjDesc(); -extern ClassDesc* GetBombModDesc(); - -extern ClassDesc* GetBendModDesc(); -extern ClassDesc* GetTaperModDesc(); -extern ClassDesc* GetSinWaveObjDesc(); -extern ClassDesc* GetSinWaveModDesc(); -extern ClassDesc* GetLinWaveObjDesc(); -extern ClassDesc* GetLinWaveModDesc(); -extern ClassDesc* GetEditMeshModDesc(); -extern ClassDesc* GetEditSplineModDesc();*/ -extern ClassDesc* GetEditPatchModDesc(); -/*extern ClassDesc* GetTwistModDesc(); -extern ClassDesc* GetTwistModDesc2(); -extern ClassDesc* GetExtrudeModDesc(); -extern ClassDesc* GetClustModDesc(); -extern ClassDesc* GetSkewModDesc(); -extern ClassDesc* GetNoiseModDesc(); -extern ClassDesc* GetSinWaveOModDesc(); -extern ClassDesc* GetLinWaveOModDesc(); -extern ClassDesc* GetOptModDesc(); -extern ClassDesc* GetDispModDesc(); -extern ClassDesc* GetClustNodeModDesc(); -extern ClassDesc* GetGravityObjDesc(); -extern ClassDesc* GetGravityModDesc(); -extern ClassDesc* GetWindObjDesc(); -extern ClassDesc* GetWindModDesc(); -extern ClassDesc* GetDispObjDesc(); -extern ClassDesc* GetDispWSModDesc(); -extern ClassDesc* GetDeflectObjDesc(); -extern ClassDesc* GetDeflectModDesc(); -extern ClassDesc* GetUVWMapModDesc(); -extern ClassDesc* GetSelModDesc(); -extern ClassDesc* GetSmoothModDesc(); -extern ClassDesc* GetMatModDesc(); -extern ClassDesc* GetNormalModDesc(); -extern ClassDesc* GetSurfrevModDesc(); -extern ClassDesc* GetResetXFormDesc(); -extern ClassDesc* GetAFRModDesc(); -extern ClassDesc* GetTessModDesc(); -extern ClassDesc* GetDeleteModDesc(); -extern ClassDesc* GetMeshSelModDesc(); -extern ClassDesc* GetFaceExtrudeModDesc(); -extern ClassDesc* GetUVWXFormModDesc(); -extern ClassDesc* GetMirrorModDesc(); -extern ClassDesc* GetUnwrapModDesc(); -extern ClassDesc* GetBendWSMDesc(); -extern ClassDesc* GetTwistWSMDesc(); -extern ClassDesc* GetTaperWSMDesc(); -extern ClassDesc* GetSkewWSMDesc(); -extern ClassDesc* GetNoiseWSMDesc(); -extern ClassDesc* GetDispApproxModDesc(); -extern ClassDesc* GetMeshMesherWSMDesc(); -extern ClassDesc* GetNormalizeSplineDesc();*/ - - -// This is just temporary to make some extra mods so I can -// implement the 'more' system in the modify panel. -extern ClassDesc* GetBendModDesc2(); -extern ClassDesc* GetBendModDesc3(); -extern ClassDesc* GetBendModDesc4(); -extern ClassDesc* GetBendModDesc5(); -extern ClassDesc* GetSDeleteModDesc(); -// in mods.cpp -extern HINSTANCE hInstance; - -// For 'Supports Object of Type' rollups -extern BOOL CALLBACK DefaultSOTProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam); - -#define BIGFLOAT float(999999) - -#define NEWSWMCAT _T("Modifiers") - -// Image list used for mesh sub-object toolbar in Edit Mesh, Mesh Select: -class MeshSelImageHandler { -public: - HIMAGELIST images; - MeshSelImageHandler () { images = NULL; } - ~MeshSelImageHandler () { if (images) ImageList_Destroy (images); } - HIMAGELIST LoadImages (); -}; -#define IDC_SELVERTEX 0x3260 -#define IDC_SELEDGE 0x3261 -#define IDC_SELFACE 0x3262 -#define IDC_SELPOLY 0x3263 -#define IDC_SELELEMENT 0x3264 -extern int *meshSubTypeToolbarIDs; - -#endif - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.rc b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.rc deleted file mode 100644 index b07d45abe..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/mods.rc +++ /dev/null @@ -1,1427 +0,0 @@ -//Microsoft Developer Studio generated resource script. -// -#include "modsres.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#define APSTUDIO_HIDDEN_SYMBOLS -#include "windows.h" -#undef APSTUDIO_HIDDEN_SYMBOLS - - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// English (U.S.) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) -#ifdef _WIN32 -LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Dialog -// - -IDD_DETACH DIALOG DISCARDABLE 0, 0, 165, 65 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Detach" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,101,30,50,14 - PUSHBUTTON "Cancel",IDCANCEL,101,46,50,14 - EDITTEXT IDC_DETACH_NAME,51,8,101,12,ES_AUTOHSCROLL - LTEXT "Detach as:",IDC_STATIC,11,10,37,8 -END - -IDD_EM_SELECTBYSMOOTH DIALOG DISCARDABLE 0, 0, 171, 77 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Select By Smooth Groups" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,112,9,50,14 - PUSHBUTTON "Cancel",IDCANCEL,112,25,50,14 - CONTROL "Clear Selection",IDC_CLEARSELECTION,"Button", - BS_AUTOCHECKBOX,8,58,66,10 - CONTROL "1",IDC_SMOOTH_GRP1,"CustButton",WS_TABSTOP,8,8,10,10 - CONTROL "2",IDC_SMOOTH_GRP2,"CustButton",WS_TABSTOP,20,8,10,10 - CONTROL "3",IDC_SMOOTH_GRP3,"CustButton",WS_TABSTOP,32,8,10,10 - CONTROL "4",IDC_SMOOTH_GRP4,"CustButton",WS_TABSTOP,44,8,10,10 - CONTROL "5",IDC_SMOOTH_GRP5,"CustButton",WS_TABSTOP,56,8,10,10 - CONTROL "6",IDC_SMOOTH_GRP6,"CustButton",WS_TABSTOP,68,8,10,10 - CONTROL "7",IDC_SMOOTH_GRP7,"CustButton",WS_TABSTOP,80,8,10,10 - CONTROL "8",IDC_SMOOTH_GRP8,"CustButton",WS_TABSTOP,92,8,10,10 - CONTROL "9",IDC_SMOOTH_GRP9,"CustButton",WS_TABSTOP,8,20,10,10 - CONTROL "10",IDC_SMOOTH_GRP10,"CustButton",WS_TABSTOP,20,20,10, - 10 - CONTROL "11",IDC_SMOOTH_GRP11,"CustButton",WS_TABSTOP,32,20,10, - 10 - CONTROL "12",IDC_SMOOTH_GRP12,"CustButton",WS_TABSTOP,44,20,10, - 10 - CONTROL "13",IDC_SMOOTH_GRP13,"CustButton",WS_TABSTOP,56,20,10, - 10 - CONTROL "14",IDC_SMOOTH_GRP14,"CustButton",WS_TABSTOP,68,20,10, - 10 - CONTROL "15",IDC_SMOOTH_GRP15,"CustButton",WS_TABSTOP,80,20,10, - 10 - CONTROL "16",IDC_SMOOTH_GRP16,"CustButton",WS_TABSTOP,92,20,10, - 10 - CONTROL "17",IDC_SMOOTH_GRP17,"CustButton",WS_TABSTOP,8,32,10,10 - CONTROL "18",IDC_SMOOTH_GRP18,"CustButton",WS_TABSTOP,20,32,10, - 10 - CONTROL "19",IDC_SMOOTH_GRP19,"CustButton",WS_TABSTOP,32,32,10, - 10 - CONTROL "20",IDC_SMOOTH_GRP20,"CustButton",WS_TABSTOP,44,32,10, - 10 - CONTROL "21",IDC_SMOOTH_GRP21,"CustButton",WS_TABSTOP,56,32,10, - 10 - CONTROL "22",IDC_SMOOTH_GRP22,"CustButton",WS_TABSTOP,68,32,10, - 10 - CONTROL "23",IDC_SMOOTH_GRP23,"CustButton",WS_TABSTOP,80,32,10, - 10 - CONTROL "24",IDC_SMOOTH_GRP24,"CustButton",WS_TABSTOP,92,32,10, - 10 - CONTROL "25",IDC_SMOOTH_GRP25,"CustButton",WS_TABSTOP,8,44,10,10 - CONTROL "26",IDC_SMOOTH_GRP26,"CustButton",WS_TABSTOP,20,44,10, - 10 - CONTROL "27",IDC_SMOOTH_GRP27,"CustButton",WS_TABSTOP,32,44,10, - 10 - CONTROL "28",IDC_SMOOTH_GRP28,"CustButton",WS_TABSTOP,44,44,10, - 10 - CONTROL "29",IDC_SMOOTH_GRP29,"CustButton",WS_TABSTOP,56,44,10, - 10 - CONTROL "30",IDC_SMOOTH_GRP30,"CustButton",WS_TABSTOP,68,44,10, - 10 - CONTROL "31",IDC_SMOOTH_GRP31,"CustButton",WS_TABSTOP,80,44,10, - 10 - CONTROL "32",IDC_SMOOTH_GRP32,"CustButton",WS_TABSTOP,92,44,10, - 10 -END - -IDD_PASTE_NAMEDSET DIALOG DISCARDABLE 0, 0, 186, 57 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Paste Named Selection" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,129,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 - CONTROL "",IDC_SET_NAME,"CustEdit",WS_TABSTOP,7,40,106,10 - LTEXT "A named selection set already exists with the same name. Please select a new name", - IDC_STATIC,7,7,112,30 -END - -IDD_SEL_NAMEDSET DIALOG DISCARDABLE 0, 0, 186, 127 -STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | - WS_SYSMENU -CAPTION "Copy Named Selection" -FONT 8, "MS Sans Serif" -BEGIN - DEFPUSHBUTTON "OK",IDOK,129,7,50,14 - PUSHBUTTON "Cancel",IDCANCEL,129,24,50,14 - LISTBOX IDC_NS_LIST,7,7,108,113,LBS_SORT | LBS_NOINTEGRALHEIGHT | - WS_VSCROLL | WS_TABSTOP -END - -IDD_EDPATCH_SELECT DIALOG DISCARDABLE 0, 0, 108, 111 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "",IDC_SELTYPE,"CustToolbar",WS_TABSTOP,22,5,64,14 - RTEXT "123456 Vertices Selected",IDC_NUMSEL_LABEL,12,84,92,8 - CONTROL "Lattice",IDC_DISPLATTICE,"Button",BS_AUTOCHECKBOX | NOT - WS_VISIBLE | WS_DISABLED | WS_TABSTOP,12,8,34,10 - CONTROL "Surface",IDC_DISPSURFACE,"Button",BS_AUTOCHECKBOX | NOT - WS_VISIBLE | WS_DISABLED | WS_TABSTOP,59,8,37,10 - GROUPBOX "Filter",IDC_STATIC,3,45,102,24 - CONTROL "Vertices",IDC_FILTVERTS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,12,56,38,10 - CONTROL "Vectors",IDC_FILTVECS,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,59,56,36,10 - CONTROL "Lock Handles",IDC_LOCK_HANDLES,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,3,72,56,10 - GROUPBOX "Named Selections:",IDC_STATIC,3,21,102,24 - CONTROL "Copy",IDC_NS_COPY,"CustButton",WS_TABSTOP,15,30,37,11 - CONTROL "Paste",IDC_NS_PASTE,"CustButton",WS_TABSTOP,59,30,37,11 - CTEXT "Can't load version",IDC_VERSION,5,100,100,8, - SS_CENTERIMAGE -END - -IDD_EDPATCH_OPS DIALOG DISCARDABLE 0, 0, 108, 396 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - GROUPBOX "Subdivision",IDC_STATIC,4,232,102,43 - CONTROL "Subdivide",IDC_SUBDIVIDE,"CustButton",WS_TABSTOP,11,242, - 43,11 - CONTROL "Propagate",IDC_PROPAGATE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,56,242,45,10 - CONTROL "Bind",IDC_BIND,"CustButton",WS_TABSTOP,11,257,43,11 - CONTROL "Unbind",IDC_UNBIND,"CustButton",WS_TABSTOP,56,257,43,11 - GROUPBOX "Topology",IDC_STATIC,3,107,102,122 - CONTROL "Add Tri",IDC_ADDTRI,"CustButton",WS_TABSTOP,10,119,43, - 11 - CONTROL "Add Quad",IDC_ADDQUAD,"CustButton",WS_TABSTOP,55,119,43, - 11 - CONTROL "Weld",IDC_WELD,"CustButton",WS_TABSTOP,10,134,43,11 - CONTROL "",IDC_WELDTHRESH,"CustEdit",WS_TABSTOP,55,134,35,10 - CONTROL "",IDC_THRESHSPINNER,"SpinnerControl",0x0,90,134,7,10 - CONTROL "Detach",IDC_DETACH,"CustButton",WS_GROUP | WS_TABSTOP, - 10,149,43,11 - CONTROL "Reorient",IDC_DETACHREORIENT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,55,144,39,10 - CONTROL "Copy",IDC_DETACHCOPY,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,55,154,28,10 - CONTROL "Attach",IDC_ATTACH,"CustButton",WS_TABSTOP,10,164,43,11 - CONTROL "Reorient",IDC_ATTACHREORIENT,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,55,164,39,10 - CONTROL "Delete",IDC_PATCH_DELETE,"CustButton",WS_TABSTOP,10,184, - 43,11 - CONTROL "Hide",IDC_HIDE,"CustButton",WS_TABSTOP,10,199,43,11 - CONTROL "Unhide All",IDC_UNHIDE,"CustButton",WS_TABSTOP,55,199, - 43,11 - GROUPBOX "Extrude && Bevel",IDC_STATIC,4,277,101,115 - CONTROL "Extrude",IDC_EP_EXTRUDE,"CustButton",WS_TABSTOP,11,287, - 43,11 - CONTROL "Bevel",IDC_EP_BEVEL,"CustButton",WS_TABSTOP,56,287,45, - 11 - RTEXT "Extrusion:",IDC_STATIC,21,302,32,8 - CONTROL "",IDC_EP_EXTRUDEAMOUNT,"CustEdit",WS_TABSTOP,56,302,35, - 10 - CONTROL "",IDC_EP_EXTRUDESPINNER,"SpinnerControl",0x0,91,302,7, - 10 - RTEXT "Outlining:",IDC_STATIC,21,312,32,8 - CONTROL "",IDC_EP_OUTLINEAMOUNT,"CustEdit",WS_TABSTOP,56,312,35, - 10 - CONTROL "",IDC_EP_OUTLINESPINNER,"SpinnerControl",0x0,91,312,7, - 10 - LTEXT "Normal:",IDC_STATIC,11,327,25,8 - CONTROL "Group",IDC_EM_EXTYPE_A,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,35,327,35,10 - CONTROL "Local",IDC_EM_EXTYPE_B,"Button",BS_AUTORADIOBUTTON,71, - 327,33,10 - LTEXT "Bevel Smoothing",IDC_STATIC,11,337,85,8 - LTEXT "Start ",IDC_STATIC,11,347,45,8 - LTEXT "End ",IDC_STATIC,56,347,45,8 - CONTROL "Smooth",IDC_EP_SM_SMOOTH,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,11,357,40,10 - CONTROL "Smooth",IDC_EP_SM_SMOOTH4,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,56,357,40,10 - CONTROL "Linear",IDC_EP_SM_SMOOTH2,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,11,367,35,10 - CONTROL "Linear",IDC_EP_SM_SMOOTH5,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,56,367,35,10 - CONTROL "None",IDC_EP_SM_SMOOTH3,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,11,377,33,10 - CONTROL "None",IDC_EP_SM_SMOOTH6,"Button",BS_AUTORADIOBUTTON | - WS_GROUP,56,377,33,10 - GROUPBOX "Surface",IDC_STATIC,3,2,101,48 - RTEXT "View Steps:",IDC_STATIC,10,10,44,8 - CONTROL "",IDC_STEPS,"CustEdit",WS_TABSTOP,55,10,35,10 - CONTROL "",IDC_STEPSSPINNER,"SpinnerControl",0x0,90,10,7,10 - RTEXT "Render Steps:",IDC_STATIC,10,20,46,8 - CONTROL "",IDC_STEPS_RENDER,"CustEdit",WS_TABSTOP,55,20,35,10 - CONTROL "",IDC_STEPSRENDERSPINNER,"SpinnerControl",0x0,90,20,7, - 10 - CONTROL "Show Interior Edges",IDC_SHOW_INTERIOR_FACES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,10,35,77,10 - CONTROL "Tiled mode",IDC_TILE_MODE,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,12,80,50,10 - GROUPBOX "Tiles",IDC_STATIC,3,50,102,54 - RTEXT "Tile Steps:",IDC_STATIC,12,60,44,8 - CONTROL "",IDC_TILESTEPS,"CustEdit",WS_TABSTOP,57,60,35,10 - CONTROL "",IDC_TILESTEPSSPINNER,"SpinnerControl",0x0,92,60,7,10 - CONTROL "Keep mapping",IDC_KEEP_MAPPING,"Button",BS_AUTOCHECKBOX | - WS_TABSTOP,12,90,61,10 - CONTROL "Reset",IDC_RESET,"CustButton",WS_TABSTOP,55,184,43,11 - RTEXT "Transitions:",IDC_STATIC,7,70,49,8 - CONTROL "",IDC_TRANSITION,"CustEdit",WS_TABSTOP,57,70,35,10 - CONTROL "",IDC_TRANSITIONSPINNER,"SpinnerControl",0x0,92,70,7,10 - CONTROL "Turn CCW",IDC_TURN,"CustButton",WS_TABSTOP,10,214,43,11 - CONTROL "Turn CW",IDC_TURN2,"CustButton",WS_TABSTOP,55,214,43,11 -END - -IDD_SELECTBYMAT DIALOG DISCARDABLE 0, 0, 151, 47 -STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "Select By Material ID" -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "",IDC_MAT_ID,"CustEdit",WS_TABSTOP,25,7,36,10 - DEFPUSHBUTTON "OK",IDOK,90,8,50,14 - PUSHBUTTON "Cancel",IDCANCEL,90,25,50,14 - CONTROL "Clear Selection",IDC_CLEARSELECTION,"Button", - BS_AUTOCHECKBOX,15,22,66,10 - CONTROL "",IDC_MAT_IDSPIN,"SpinnerControl",0x0,62,7,7,10 - RTEXT "ID:",IDC_STATIC,8,7,17,8 -END - -IDD_SURF_APPROX_ADV DIALOG DISCARDABLE 0, 0, 180, 116 -STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Advanced Surface Approx." -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Grid",IDC_GRID,"Button",BS_AUTORADIOBUTTON | WS_GROUP | - WS_TABSTOP,10,19,29,10 - CONTROL "Tree",IDC_TREE,"Button",BS_AUTORADIOBUTTON | WS_TABSTOP, - 10,30,31,10 - DEFPUSHBUTTON "OK",IDOK,7,95,50,14 - PUSHBUTTON "Cancel",IDCANCEL,123,95,50,14 - LTEXT "Subdivision Style:",IDC_STATIC,10,9,56,8 - CONTROL "",IDC_TESS_MIN_REC,"CustEdit",WS_TABSTOP,116,41,36,10 - CONTROL "",IDC_TESS_MIN_REC_SPINNER,"SpinnerControl",0x0,152,41, - 7,10 - LTEXT "Minimum Subdivison Levels",IDC_STATIC,19,43,88,8 - CONTROL "",IDC_TESS_MAX_REC,"CustEdit",WS_TABSTOP,116,54,36,10 - CONTROL "",IDC_TESS_MAX_REC_SPINNER,"SpinnerControl",0x0,152,54, - 7,10 - LTEXT "Maximum Subdivisions Levels",IDC_STATIC,19,56,94,8 - CONTROL "Delaunay",IDC_DELAUNAY,"Button",BS_AUTORADIOBUTTON,10, - 68,46,10 - CONTROL "",IDC_TESS_MAX_TRIS,"CustEdit",WS_TABSTOP,116,80,36,10 - CONTROL "",IDC_TESS_MAX_TRIS_SPINNER,"SpinnerControl",0x0,152,80, - 7,10 - LTEXT "Maximum Number of Triangles",IDC_STATIC,19,82,96,8 -END - -IDD_EDPATCH_SURF DIALOG DISCARDABLE 0, 0, 108, 187 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "",IDC_MAT_ID,"CustEdit",WS_TABSTOP,41,12,36,10 - CONTROL "Select By ID",IDC_SELECT_BYID,"CustButton",WS_TABSTOP, - 21,26,64,11 - GROUPBOX "Material:",-1,2,3,102,41 - CONTROL "",IDC_MAT_IDSPIN,"SpinnerControl",0x0,78,12,7,10 - RTEXT "ID:",-1,23,14,17,8 - CONTROL "1",IDC_SMOOTH_GRP1,"CustButton",WS_TABSTOP,5,60,11,11 - CONTROL "2",IDC_SMOOTH_GRP2,"CustButton",WS_TABSTOP,17,60,11,11 - CONTROL "3",IDC_SMOOTH_GRP3,"CustButton",WS_TABSTOP,29,60,11,11 - CONTROL "4",IDC_SMOOTH_GRP4,"CustButton",WS_TABSTOP,41,60,11,11 - CONTROL "5",IDC_SMOOTH_GRP5,"CustButton",WS_TABSTOP,53,60,11,11 - CONTROL "6",IDC_SMOOTH_GRP6,"CustButton",WS_TABSTOP,65,60,11,11 - CONTROL "7",IDC_SMOOTH_GRP7,"CustButton",WS_TABSTOP,77,60,11,11 - CONTROL "8",IDC_SMOOTH_GRP8,"CustButton",WS_TABSTOP,89,60,11,11 - CONTROL "9",IDC_SMOOTH_GRP9,"CustButton",WS_TABSTOP,5,73,11,11 - CONTROL "10",IDC_SMOOTH_GRP10,"CustButton",WS_TABSTOP,17,73,11, - 11 - CONTROL "11",IDC_SMOOTH_GRP11,"CustButton",WS_TABSTOP,29,73,11, - 11 - CONTROL "12",IDC_SMOOTH_GRP12,"CustButton",WS_TABSTOP,41,73,11, - 11 - CONTROL "13",IDC_SMOOTH_GRP13,"CustButton",WS_TABSTOP,53,73,11, - 11 - CONTROL "14",IDC_SMOOTH_GRP14,"CustButton",WS_TABSTOP,65,73,11, - 11 - CONTROL "15",IDC_SMOOTH_GRP15,"CustButton",WS_TABSTOP,77,73,11, - 11 - CONTROL "16",IDC_SMOOTH_GRP16,"CustButton",WS_TABSTOP,89,73,11, - 11 - CONTROL "17",IDC_SMOOTH_GRP17,"CustButton",WS_TABSTOP,5,84,11,11 - CONTROL "18",IDC_SMOOTH_GRP18,"CustButton",WS_TABSTOP,17,84,11, - 11 - CONTROL "19",IDC_SMOOTH_GRP19,"CustButton",WS_TABSTOP,29,84,11, - 11 - CONTROL "20",IDC_SMOOTH_GRP20,"CustButton",WS_TABSTOP,41,84,11, - 11 - CONTROL "21",IDC_SMOOTH_GRP21,"CustButton",WS_TABSTOP,53,84,11, - 11 - CONTROL "22",IDC_SMOOTH_GRP22,"CustButton",WS_TABSTOP,65,84,11, - 11 - CONTROL "23",IDC_SMOOTH_GRP23,"CustButton",WS_TABSTOP,77,84,11, - 11 - CONTROL "24",IDC_SMOOTH_GRP24,"CustButton",WS_TABSTOP,89,84,11, - 11 - CONTROL "25",IDC_SMOOTH_GRP25,"CustButton",WS_TABSTOP,5,97,11,11 - CONTROL "26",IDC_SMOOTH_GRP26,"CustButton",WS_TABSTOP,17,97,11, - 11 - CONTROL "27",IDC_SMOOTH_GRP27,"CustButton",WS_TABSTOP,29,97,11, - 11 - CONTROL "28",IDC_SMOOTH_GRP28,"CustButton",WS_TABSTOP,41,97,11, - 11 - CONTROL "29",IDC_SMOOTH_GRP29,"CustButton",WS_TABSTOP,53,97,11, - 11 - CONTROL "30",IDC_SMOOTH_GRP30,"CustButton",WS_TABSTOP,65,97,11, - 11 - CONTROL "31",IDC_SMOOTH_GRP31,"CustButton",WS_TABSTOP,77,97,11, - 11 - CONTROL "32",IDC_SMOOTH_GRP32,"CustButton",WS_TABSTOP,89,97,11, - 11 - CONTROL "Select By SG",IDC_SELECTBYSMOOTH,"CustButton", - WS_TABSTOP,5,111,46,11 - GROUPBOX "Smoothing Groups:",-1,2,48,102,79 - CONTROL "Clear All",IDC_SMOOTH_CLEAR,"CustButton",WS_TABSTOP,54, - 111,46,11 - GROUPBOX "Tiles",-1,2,130,102,54 - CONTROL "",IDC_TESS_U2,"CustEdit",WS_TABSTOP,41,140,36,10 - CONTROL "",IDC_TESS_U_SPIN,"SpinnerControl",0x0,78,140,7,10 - RTEXT "U tess:",-1,10,140,30,8 - CONTROL "",IDC_TESS_V2,"CustEdit",WS_TABSTOP,41,154,36,10 - CONTROL "",IDC_TESS_V_SPIN,"SpinnerControl",0x0,78,154,7,10 - RTEXT "V tess:",-1,9,154,30,8 - CONTROL "Balance Selected",IDC_BALANCE_SELECTED,"CustButton", - WS_TABSTOP,21,168,64,11 -END - -IDD_EDPATCH_SURF_OBJ DIALOG DISCARDABLE 0, 0, 108, 250 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - CONTROL "Viewports",IDC_TESS_VIEW,"Button",BS_AUTORADIOBUTTON | - WS_GROUP | WS_TABSTOP,7,14,47,10 - CONTROL "Renderer",IDC_TESS_RENDERER,"Button",BS_AUTORADIOBUTTON, - 55,14,43,10 - CONTROL "Fixed (original)",IDC_TESS_SET,"Button", - BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP,9,41,61,10 - CONTROL "Parametric",IDC_TESS_PARAM,"Button",BS_AUTORADIOBUTTON, - 9,74,49,10 - CONTROL "Spatial",IDC_TESS_SPATIAL,"Button",BS_AUTORADIOBUTTON,9, - 110,37,10 - CONTROL "Curvature",IDC_TESS_CURV,"Button",BS_AUTORADIOBUTTON,9, - 121,47,10 - CONTROL "",IDC_TESS_U,"CustEdit",WS_TABSTOP,55,84,36,10 - CONTROL "",IDC_TESS_V,"CustEdit",WS_TABSTOP,55,97,36,10 - CONTROL "",IDC_TESS_EDGE,"CustEdit",WS_TABSTOP,55,143,36,10 - CONTROL "",IDC_TESS_DIST,"CustEdit",WS_TABSTOP,55,156,36,10 - CONTROL "",IDC_TESS_ANG,"CustEdit",WS_TABSTOP,55,169,36,10 - CONTROL "View Dependant",IDC_TESS_VIEW_DEP,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,18,182,69,10 - GROUPBOX "Tessellation",-1,3,3,102,36 - CONTROL "",IDC_TESS_U_SPINNER,"SpinnerControl",0x0,91,84,7,10 - CONTROL "",IDC_TESS_V_SPINNER,"SpinnerControl",0x0,91,97,7,10 - CONTROL "",IDC_TESS_DIST_SPINNER,"SpinnerControl",0x0,91,156,7, - 10 - CONTROL "",IDC_TESS_ANG_SPINNER,"SpinnerControl",0x0,91,169,7,10 - LTEXT "U Steps:",-1,19,86,28,8 - LTEXT "V Steps:",-1,19,97,28,8 - LTEXT "Distance:",-1,19,155,31,8 - LTEXT "Angle:",-1,19,168,21,8 - CONTROL "",IDC_TESS_EDGE_SPINNER,"SpinnerControl",0x0,91,143,7, - 10 - LTEXT "Edge:",-1,19,144,20,8 - CONTROL "Spatial and Curvature",IDC_TESS_LDA,"Button", - BS_AUTORADIOBUTTON | WS_TABSTOP,9,132,84,10 - CONTROL "",IDC_MERGE,"CustEdit",WS_TABSTOP,44,195,36,10 - CONTROL "",IDC_MERGE_SPINNER,"SpinnerControl",0x0,80,195,7,10 - LTEXT "Merge:",-1,10,195,23,8 - PUSHBUTTON "Advanced Parameters...",IDC_ADVANCED_PARAMETERS,13,232, - 81,11 - CONTROL "Regular",IDC_TESS_REGULAR,"Button",BS_AUTORADIOBUTTON,9, - 63,41,10 - CONTROL "Mesh",IDC_MESH,"Button",BS_AUTORADIOBUTTON | - BS_PUSHLIKE | WS_GROUP | WS_TABSTOP,8,26,33,10 - CONTROL "Displacement",IDC_DISP,"Button",BS_AUTORADIOBUTTON | - BS_PUSHLIKE | WS_TABSTOP,41,26,59,10 - GROUPBOX "",-1,3,34,102,213 - CONTROL "Use Tesselator Normals",IDC_TESS_NORMALS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,10,219,91,10 - CONTROL "Post Tesselation Weld",IDC_WELDTESS,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,10,207,87,10 - CONTROL "Show Interior Edges",IDC_SHOW_INTERIOR_FACES,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,24,52,77,10 -END - -IDD_EDPATCH_TILE DIALOG DISCARDABLE 0, 0, 108, 48 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - GROUPBOX "Tiles",-1,2,3,102,41 - CONTROL "",IDC_TILE_MAT,"CustEdit",WS_TABSTOP,41,14,36,10 - CONTROL "",IDC_TILE_MAT_SPIN,"SpinnerControl",0x0,78,14,7,10 - LTEXT "Tile#:",-1,10,14,27,8 - CONTROL "",IDC_TILE_ROT,"CustEdit",WS_TABSTOP,41,27,36,10 - CONTROL "",IDC_TILE_ROT_SPIN,"SpinnerControl",0x0,78,27,7,10 - LTEXT "Rotation:",-1,9,27,30,8 -END - -IDD_EDPATCH_EDGE DIALOG DISCARDABLE 0, 0, 108, 34 -STYLE WS_CHILD -FONT 8, "MS Sans Serif" -BEGIN - GROUPBOX "Edge",-1,2,3,102,27 - CONTROL "No smooth",IDC_NO_SMOOTH,"Button",BS_AUTO3STATE | - WS_TABSTOP,10,15,50,10 -END - - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE DISCARDABLE -BEGIN - "modsres.h\0" -END - -2 TEXTINCLUDE DISCARDABLE -BEGIN - "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" - "#include ""windows.h""\r\n" - "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" - "\r\n" - "\0" -END - -3 TEXTINCLUDE DISCARDABLE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - - -///////////////////////////////////////////////////////////////////////////// -// -// Cursor -// - -IDC_EXTRUDECUR CURSOR DISCARDABLE "extrudec.cur" -IDC_OUTLINECUR CURSOR DISCARDABLE "outline.cur" -IDC_SEGBREAKCUR CURSOR DISCARDABLE "segbreak.cur" -IDC_SEGREFINECUR CURSOR DISCARDABLE "segrefin.cur" -IDC_VERTCONNECTCUR CURSOR DISCARDABLE "vertconn.cur" -IDC_VERTINSERTCUR CURSOR DISCARDABLE "vinsert.cur" -IDC_BOOLUNION CURSOR DISCARDABLE "boolunio.cur" -IDC_BOOLSUBTRACTION CURSOR DISCARDABLE "boolsubt.cur" -IDC_BOOLINTERSECTION CURSOR DISCARDABLE "boolinte.cur" -IDC_ATTACHCUR CURSOR DISCARDABLE "attach.cur" -IDC_ADDVERTCUR CURSOR DISCARDABLE "addvertc.cur" -IDC_TH_SELCURSOR CURSOR DISCARDABLE "thselcur.cur" -IDC_BEVEL CURSOR DISCARDABLE "Bevel.cur" -IDC_CROSSINSERTCUR CURSOR DISCARDABLE "crossins.cur" -IDC_ECHAMFERCUR CURSOR DISCARDABLE "echamfer.cur" -IDC_VCHAMFERCUR CURSOR DISCARDABLE "vchamfer.cur" -IDC_CHAMFERCUR CURSOR DISCARDABLE "chamfer.cur" -IDC_FILLETCUR CURSOR DISCARDABLE "fillet.cur" -IDC_CUR_TRIM CURSOR DISCARDABLE "Trim.cur" -IDC_MOVEX CURSOR DISCARDABLE "move_x.cur" -IDC_MOVEY CURSOR DISCARDABLE "move_y.cur" -IDC_PANHAND CURSOR DISCARDABLE "panhand.cur" -IDC_SCALEX CURSOR DISCARDABLE "scale_x.cur" -IDC_SCALEY CURSOR DISCARDABLE "scale_y.cur" -IDC_WELDCUR CURSOR DISCARDABLE "weld.cur" -IDC_ZOOM CURSOR DISCARDABLE "magnify.cur" -IDC_ZOOMREG CURSOR DISCARDABLE "region.cur" -IDC_ES_CROSS_HAIR CURSOR DISCARDABLE "CROSSHR.CUR" -IDC_CURSOR1 CURSOR DISCARDABLE "cur00002.cur" - -///////////////////////////////////////////////////////////////////////////// -// -// Bitmap -// - -IDB_FACESELTYPES BITMAP DISCARDABLE "faceselt.bmp" -IDB_MASK_FACESELTYPES BITMAP DISCARDABLE "mask_fac.bmp" -IDB_BOOLEANTYPES BITMAP DISCARDABLE "booleant.bmp" -IDB_MASK_BOOLEANTYPES BITMAP DISCARDABLE "mask_boo.bmp" -IDB_MASK_BULBS BITMAP DISCARDABLE "bulbmask.bmp" -IDB_BULBS BITMAP DISCARDABLE "bulbs.bmp" -IDB_MASK_MIRRORTYPES BITMAP DISCARDABLE "bmp00002.bmp" -IDB_MIRRORTYPES BITMAP DISCARDABLE "bmp00001.bmp" -IDB_UNWRAPTOOL BITMAP DISCARDABLE "unwrapto.bmp" -IDB_MASK_UNWRAPTOOL BITMAP DISCARDABLE "mask_unw.bmp" -IDB_EM_SELTYPES BITMAP DISCARDABLE "bmp00003.bmp" -IDB_UNWRAP_VIEW_MASK BITMAP DISCARDABLE "unwrap_view_mask.bmp" -IDB_UNWRAP_OPTION_MASK BITMAP DISCARDABLE "unwrap_option_mask.bmp" -IDB_UNWRAP_TRANSFORM BITMAP DISCARDABLE "unwrap_transform.bmp" -IDB_UNWRAP_TRANSFORM_MASK BITMAP DISCARDABLE "unwrap_transform_mask.bmp" -IDB_UNWRAP_VERT BITMAP DISCARDABLE "unwrap_verts.bmp" -IDB_UNWRAP_VERT_MASK BITMAP DISCARDABLE "unwrap_verts_mask.bmp" -IDB_UNWRAP_VIEW BITMAP DISCARDABLE "unwrap_view.bmp" -IDB_UNWRAP_OPTION BITMAP DISCARDABLE "unwrap_option.bmp" -IDB_EM_SELMASK BITMAP DISCARDABLE "selmask.bmp" -IDB_SPLINESELTYPES BITMAP DISCARDABLE "splinese.bmp" -IDB_PATCHSELTYPES BITMAP DISCARDABLE "patselt.bmp" -IDB_SPLINESELMASK BITMAP DISCARDABLE "splselm.bmp" -IDB_PATCHSELMASK BITMAP DISCARDABLE "patselm.bmp" - -///////////////////////////////////////////////////////////////////////////// -// -// DESIGNINFO -// - -#ifdef APSTUDIO_INVOKED -GUIDELINES DESIGNINFO DISCARDABLE -BEGIN - IDD_PASTE_NAMEDSET, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 179 - TOPMARGIN, 7 - BOTTOMMARGIN, 50 - END - - IDD_SEL_NAMEDSET, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 179 - TOPMARGIN, 7 - BOTTOMMARGIN, 120 - END - - IDD_EDPATCH_OPS, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 101 - TOPMARGIN, 7 - BOTTOMMARGIN, 392 - END - - IDD_SURF_APPROX_ADV, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 173 - TOPMARGIN, 7 - BOTTOMMARGIN, 109 - END - - IDD_EDPATCH_SURF, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 101 - TOPMARGIN, 7 - BOTTOMMARGIN, 184 - END - - IDD_EDPATCH_SURF_OBJ, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 101 - TOPMARGIN, 7 - BOTTOMMARGIN, 247 - END - - IDD_EDPATCH_TILE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 101 - TOPMARGIN, 7 - BOTTOMMARGIN, 45 - END - - IDD_EDPATCH_EDGE, DIALOG - BEGIN - LEFTMARGIN, 7 - RIGHTMARGIN, 101 - TOPMARGIN, 7 - BOTTOMMARGIN, 31 - END -END -#endif // APSTUDIO_INVOKED - - -#ifndef _MAC -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,49 - PRODUCTVERSION 3,0,0,0 - FILEFLAGSMASK 0x3fL -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x40004L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040904b0" - BEGIN - VALUE "Comments", "TECH: steve.anderson\0" - VALUE "CompanyName", "Kinetix, a division of Autodesk, Inc.\0" - VALUE "FileDescription", "Standard modifiers (plugin)\0" - VALUE "FileVersion", "1, 0, 0, 49\0" - VALUE "InternalName", "mods\0" - VALUE "LegalCopyright", "Copyright © 1998 Autodesk Inc.\0" - VALUE "LegalTrademarks", "The following are registered trademarks of Autodesk, Inc.: 3D Studio MAX. The following are trademarks of Autodesk, Inc.: Kinetix, Kinetix(logo), BIPED, Physique, Character Studio, MAX DWG, DWG Unplugged, Heidi, FLI, FLC, DXF.\0" - VALUE "OriginalFilename", "mods.dlm\0" - VALUE "ProductName", "3D Studio MAX\0" - VALUE "ProductVersion", "3.0.0.0\0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x409, 1200 - END -END - -#endif // !_MAC - - -///////////////////////////////////////////////////////////////////////////// -// -// Icon -// - -// Icon with lowest ID value placed first to ensure application icon -// remains consistent on all systems. -IDI_ICON1 ICON DISCARDABLE "icon1.ico" -IDI_ICON2 ICON DISCARDABLE "icon2.ico" -IDI_ICON3 ICON DISCARDABLE "icon3.ico" - -///////////////////////////////////////////////////////////////////////////// -// -// String Table -// - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NORMALMOD "NormalMod" - IDS_RB_SKEWMOD "SkewMod" - IDS_RB_SKEW "Skew" - IDS_RB_SMOOTH2 "Smooth" - IDS_RB_WAVE "Wave" - IDS_RB_WAVEMOD "WaveMod" - IDS_RB_WAVEBINDING "Wave Binding" - IDS_RB_AMPLITUDE1 "Amplitude 1" - IDS_RB_AMPLITUDE2 "Amplitude 2" - IDS_RB_VOLSELECT "Vol. Select" - IDS_RB_THRESHOLD "Threshold" - IDS_RB_GIZMO "Gizmo" - IDS_RB_NORMAL "Normal" - IDS_RB_BEND_CLASS "Bend" - IDS_RB_DISPLACE_CLASS "Displace" - IDS_RB_VOLSELECT_CLASS "Vol. Select" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_EDITMESH_CLASS "Edit Mesh" - IDS_RB_PARAMETERS "Parameters" - IDS_RB_ANGLE "Angle" - IDS_RB_DIRECTION "Direction" - IDS_RB_AMOUNT "Amount" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_BEND2 "Bend" - IDS_RB_FROM "Lower Limit" - IDS_RB_TO "Upper Limit" - IDS_RB_BOMBOBJECT "MeshBombObject" - IDS_RB_BOMB "MeshBomb" - IDS_RB_BOMBMOD "MeshBombMod" - IDS_RB_BOMBBINDING "MeshBomb Binding" - IDS_RB_CLUSTNODEMOD "ClustNodeMod" - IDS_RB_XFORM "XForm" - IDS_RB_DEFLECTOR "Deflector" - IDS_RB_DEFLECTMOD "DeflectMod" - IDS_RB_DEFLECTORBINDING "Deflector Binding" - IDS_RB_BOUNCE "Bounce" - IDS_RB_DISPMOD "DispMod" - IDS_RB_DISPLACE "Displace" - IDS_RB_DISPLACEMOD "DisplaceMod" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NODEXFORM "Linked XForm" - IDS_RB_NODEXFORM_CLASS "Linked XForm" - IDS_RB_XFORM_CLASS "XForm" - IDS_RB_EDITSURFACE "Surface Properties" - IDS_RB_SETSMOOTHGROUP "Assign Smooth Group" - IDS_RB_ASSIGNMATID "Assign Material ID" - IDS_RB_FLIPNORMALS "Flip Normals" - IDS_RB_UNIFYNORMALS "Unify Normals" - IDS_RB_AUTOSMOOTH "Auto Smooth" - IDS_RB_SELECTBYMATID "Select By Material ID" - IDS_RB_SELECTBYSMOOTH "Select By Smooth Groups" - IDS_RB_SOT "Supports Objects of Type" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_BIASL2 "Bias L2" - IDS_RB_EDITMESHMOD "EditMeshMod" - IDS_RB_TWISTMOD "TwistMod" - IDS_RB_TWIST2 "Twist2" - IDS_RB_TWISTPLUGIN "Twist Plug-in" - IDS_RB_BIAS "Bias" - IDS_RB_INCORRECTSTRING "Incorrect authorization string" - IDS_RB_AUTHORIZATION "Authorization" - IDS_RB_TAPERMOD "TaperMod" - IDS_RB_SYMMETRY "Symmetry" - IDS_RB_MATMOD "matMod" - IDS_RB_MATERIAL3 "Material" - IDS_RB_MATERIALID "Material ID" - IDS_RB_MATERIAL4 "Material" - IDS_RB_MATERIALID2 "Material ID" - IDS_RB_SMOOTHMOD "SmoothMod" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_EXTRUDE "Extrude" - IDS_RB_TAPER "Taper" - IDS_RB_OBJECT "Object" - IDS_RB_EDITMESH "Edit Mesh" - IDS_RB_VERTEX "Vertex" - IDS_RB_FACE "Face" - IDS_RB_EDGE "Edge" - IDS_RB_CENTER "Center" - IDS_RB_APPARATUS "Gizmo" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_FREQUENCY "Frequency" - IDS_RB_MAPMOD "MapMod" - IDS_RB_UVWMAPPING "UVW Mapping" - IDS_RB_UVWMAP "UVW Map" - IDS_RB_NOISEMOD "NoiseMod" - IDS_RB_SEED "Seed" - IDS_RB_FRACTAL "Fractal" - IDS_RB_ROUGH "Rough" - IDS_RB_ITERATIONS "Iterations" - IDS_RB_OPTMOD "OptMod" - IDS_RB_OPTIMIZE "Optimize" - IDS_RB_FACETHRESHL1 "Face Threshold L1" - IDS_RB_FACETHRESHL2 "Face Threshold L2" - IDS_RB_EDGETHRESHL1 "Edge Threshold L1" - IDS_RB_EDGETHRESHL2 "Edge Threshold L2" - IDS_RB_BIASL1 "Bias L1" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_AMOUNT2 "Amount" - IDS_RB_CURVITURE "Curvature" - IDS_RB_AMPLITUDE "Amplitude" - IDS_RB_WAVELEN "Wave Length" - IDS_RB_PHASE "Phase" - IDS_RB_DECAY "Decay" - IDS_RB_FLEXIBILITY "Flexibility" - IDS_RB_WIDTH "Width" - IDS_RB_HEIGHT "Height" - IDS_DB_EXTRUDE "Extrude" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_RIPPLE "Ripple" - IDS_RB_RIPPLE_BINDING "Ripple Binding" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_DELETEVERT "Delete Vertex" - IDS_RB_DELETEFACE "Delete Face" - IDS_RB_ADDVERTS "Create Vertex" - IDS_RB_ATTACHOBJECT "Attach Object" - IDS_RB_FACECOLLAPSE "Collapse Face" - IDS_RB_MAKEPLANAR "Make Planar" - IDS_RB_BUILDFACE "Create Face" - IDS_RB_HIDEFACE "Hide Face" - IDS_RB_UNHIDEALLFACES "Unhide All" - IDS_RB_EDGEVISIBLE "Edge Visible" - IDS_RB_EDGEINVISIBLE "Edge Invisible" - IDS_RB_AUTOEDGE "Auto Edge" - IDS_RB_EDGEDIVIDE "Edge Divide" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_EDGETURN "Edge Turn" - IDS_RB_DELETEEDGE "Delete Edge" - IDS_RB_COLLAPSEEDGE "Collapse Edges" - IDS_RB_CLONE "Clone" - IDS_RB_TESSELLATE "Tessellate" - IDS_RB_DELETEISOLATED "Delete Isolated Vertices?" - IDS_PW_PLANAR "Planar Map" - IDS_PW_LATTICE "Lattice Map" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_DEFDEFORMATIONS "MAX STANDARD" - IDS_RB_DEFEDIT "MAX EDIT" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_DEFLECTOR_CLASS "Deflector" - IDS_RB_HIDEVERT "Hide Vertices" - IDS_RB_DEFSURFACE "MAX SURFACE" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NOISE "Noise" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_ROTATION2 "Rotation" - IDS_RB_TWIST "Twist" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_BENDMOD "BendMod" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_DISPLACEBINDING "Displace Binding" - IDS_RB_SELECTDISPIMAGE "Select Displacement Image" - IDS_RB_SELECTIMAGE "Select Image" - IDS_RB_UTILE "U Tile" - IDS_RB_VTILE "V Tile" - IDS_RB_WTILE "W Tile" - IDS_RB_BLUR "Blur" - IDS_RB_DOCREATENEWOBJECT "Do you want to create a new object?" - IDS_RB_EDITMESH2 "Edit Mesh" - IDS_RB_GRAVITY "Gravity" - IDS_RB_WIND "Wind" - IDS_RB_GRAVITYMOD "GravityMod" - IDS_RB_GRAVITYBINDING "Gravity Binding" - IDS_RB_WINDMOD "WindMod" - IDS_RB_WINDBINDING "Wind Binding" - IDS_RB_TURBULENCE "Turbulence" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_SKEW_CLASS "Skew" - IDS_RB_MATERIAL3_CLASS "Material" - IDS_RB_SMOOTH2_CLASS "Smooth" - IDS_RB_NORMAL_CLASS "Normal" - IDS_TH_LATHE_CLASS "Lathe" - IDS_RB_EXPLODE "Explode" - IDS_RB_COLLAPSE "Collapse" - IDS_RB_WELDVERTS "Weld" - IDS_RB_TAPER_CLASS "Taper" - IDS_RB_TWIST2_CLASS "Twist" - IDS_RB_TWIST_CLASS "Twist" - IDS_RB_BOMBOBJECT_CLASS "MeshBombObject" - IDS_RB_BOMB_CLASS "Bomb" - IDS_RB_RIPPLE_CLASS "Ripple" - IDS_RB_WAVE_CLASS "Wave" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_STRENGTH2 "Strength" - IDS_DS_MOVE "Move" - IDS_RB_FACESEL "Face" - IDS_RB_POLYGONSEL "Polygon" - IDS_RB_ELEMENTSEL "Element" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NOVERTSTOWELD "No vertices within weld threshold." - IDS_RB_CHAOS "Chaos" - IDS_RB_DETONATION "Detonation" - IDS_RB_BOMBPARAMS "Bomb Parameters" - IDS_RB_EDITMESHTITLE "Edit Mesh Modifier" - IDS_RB_DUPFACEWARNING "This face already exists." -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NONE "None" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_SCALE "Scale" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_DS_MOVE2 "Move" - IDS_DS_SELECT "Select" - IDS_DS_CREATE "Create" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_VERTDELETE "Delete Vertex" - IDS_TH_BEZIERCORNER "Bezier Corner" - IDS_TH_AMOUNT "Amount" - IDS_TH_EDITPATCH "Edit Ryzom Patch" - IDS_TH_PATCH "Patch" - IDS_TH_SEGMENTS "Segments" - IDS_TH_PATCHDELETE "Delete Patch" - IDS_TH_NOPATCHESSEL "No patches selected" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_EDGESUBDIVIDE "Edge Subdivide" - IDS_TH_PATCHSUBDIVIDE "Patch Subdivide" - IDS_TH_CREATELINE "Create Line" - IDS_TH_MIRROR_H "Mirror Horizontally" - IDS_TH_MIRROR_V "Mirror Vertically" - IDS_TH_MIRROR_BOTH "Mirror Both" - IDS_TH_MIRROR "Mirror" - IDS_TH_PATCHCHANGE "Patch Change" - IDS_TH_COPLANAR "Coplanar" - IDS_TH_POLYCONNECT "Poly Connect" - IDS_TH_CONNECT_COINCIDENT "Weld coincident endpoints?" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_BOOLWELDFAILED "ERROR: Final boolean weld stage failed" - IDS_TH_COINCIDENTVERTEX "Cannot perform boolean because splines have coincident vertices" - IDS_TH_SPLINESMUSTOVERLAP - "Cannot perform boolean because splines must overlap" - IDS_TH_SELECTCLOSEDSPLINE "Please select a closed spline" - IDS_TH_SPLINESELFINTERSECTS "Spline is invalid: Self-intersects" - IDS_TH_ATTACH "Attach" - IDS_TH_CANHAVEONLYONESHAPE - "Can only have one shape in modifier for this operation" - IDS_TH_NOVERTSSEL "No vertices selected" - IDS_TH_VERTCHANGE "Vertex Change" - IDS_TH_SMOOTH "Smooth" - IDS_TH_CORNER "Corner" - IDS_RB_RESETXFORM_CLASS "Reset XForm" - IDS_TH_BEZIER "Bezier" - IDS_TH_SEGCHANGE "Segment Change" - IDS_TH_CURVE "Curve" - IDS_TH_LINE "Line" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_MAKEFIRST "Make First" - IDS_TH_EDITEDGE "Edit Edge" - IDS_TH_EDGE "Edge" - IDS_TH_AUTOINTERIOR "Auto Interior" - IDS_TH_MANUALINTERIOR "Manual Interior" - IDS_TH_NOVALIDEDGESSEL "No valid edges selected" - IDS_TH_PATCHADD "Patch Add" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_EDITSPLINE "Edit Spline" - IDS_TH_EDITSEGMENT "Edit Segment" - IDS_TH_EDITVERTEX "Edit Vertex" - IDS_TH_SPLINE "Spline" - IDS_TH_SEGMENT "Segment" - IDS_TH_VERTEX "Vertex" - IDS_TH_EDITOBJECT "Edit Object" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_DETACHSPLINE "Detach Spline" - IDS_TH_OUTLINE "Outline Spline" - IDS_TH_SEGDETACH "Detach Segment" - IDS_TH_SHAPE "Shape" - IDS_TH_REFINE "Refine" - IDS_TH_SEGBREAK "Break Segment" - IDS_TH_VERTCONNECT "Connect Vertex" - IDS_TH_VERTINSERT "Insert Vertex" - IDS_TH_VERTWELD "Weld Vertex" - IDS_TH_NOWELDPERFORMED "No vertices within weld threshold." - IDS_TH_SELECTONESPLINE "Please select one spline" - IDS_TH_MORETHANONESPLINESEL "More than one spline selected" - IDS_TH_BOOLEAN "Boolean" - IDS_TH_UNION "Union" - IDS_TH_SUBTRACTION "Subtraction" - IDS_TH_INTERSECTION "Intersection" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_CANHAVEONLYONEPATCH - "Can only have one patch object in modifier for this operation" - IDS_TH_DETACHPATCH "Detach Patch" - IDS_TH_COPY_SPLINE "Copy Spline" - IDS_TH_COPY_SEGMENT "Copy Segment" - IDS_TH_SPLINECHANGE "Spline Change" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_EDITPATCH_CLASS "Edit Ryzom Patch" - IDS_TH_EDITSPLINE_CLASS "Edit Spline" - IDS_RB_EXTRUDE_CLASS "Extrude" - IDS_RB_GRAVITY_CLASS "Gravity" - IDS_RB_WIND_CLASS "Wind" - IDS_RB_UVWMAP_CLASS "UVW Map" - IDS_RB_NOISE_CLASS "Noise" - IDS_TH_CLOSESPLINE "Close Spline" - IDS_RB_OPTIMIZE_CLASS "Optimize" - IDS_TH_DELETESPLINE "Delete Spline" - IDS_TH_NOVALIDSPLINESSEL "No valid splines selected" - IDS_TH_NOSPLINESSEL "No splines selected" - IDS_TH_VERTBREAK "Break Vertex" - IDS_TH_NOVALIDVERTSSEL "No valid vertices selected" - IDS_TH_SEGDELETE "Delete Segment" - IDS_TH_NOSEGSSEL "No segments selected" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_DEGREES "Degrees" - IDS_TH_AXIS "Axis" - IDS_TH_LATHE "Lathe" - IDS_TH_VERTWELDRESULT "%d Vertices out of %d welded." - IDS_RB_RESETXFORM "Reset Transform" - IDS_RB_AFRMOD "Affect Region" - IDS_RB_STARTPOINT "Start Point" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_MIRRORSPLINE "Mirror Spline" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_ENDPOINT "End Point" - IDS_RB_AFRPOINTS "Points" - IDS_AFR_FALLOFF "Falloff" - IDS_AFR_PINCH "Pinch" - IDS_AFR_BUBBLE "Bubble" - IDS_RB_TESSMOD "Tessellate" - IDS_TESS_TENSION "Tension" - IDS_RB_DELETEMOD "DeleteMesh" - IDS_RB_MESHSELMOD "Mesh Select" - IDS_RB_FACEEXTRUDEMOD "Face Extrude" - IDS_RB_EXTRUDECENT "Extrude Center" - IDS_EXT_AMOUNT "Amount" - IDS_EXT_SCALE "Scale" - IDS_RB_UVWXFORMMOD "UVW Xform" - IDS_RB_UOFFSET "U Offset" - IDS_RB_VOFFSET "V Offset" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_WOFFSET "W Offset" - IDS_RB_MAXEDGE1 "Max Edge Length 1" - IDS_RB_MAXEDGE2 "Max Edge Length 2" - IDS_RB_CENTERPOINT "Center" - IDS_RB_MIRRORMOD "Mirror" - IDS_RB_MIRRORCENTER "Mirror Center" - IDS_RB_OFFSET "Mirror Offset" - IDS_RB_SELVERTEX "Select Vertex" - IDS_RB_SELFACE "Select Face" - IDS_RB_SELEDGE "Select Edge" - IDS_RB_SELOBJECT "Select Object" - IDS_RB_UNWRAPMOD "Unwrap UVW" - IDS_AP_SDELETEMOD "DeleteSpline" - IDS_RB_RESETUVWS "Reset UVWs" - IDS_RB_SETCHANNEL "Set UVW Channel" - IDS_RB_SHOULDRESET "Do you also want to reset the Unwrap UVW modifier\nto inherit the mapping from the new channel?\n\nChanges made within the UVW modifier will be lost." -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_NUMVERTSELP "%d Vertices Selected" - IDS_RB_NUMFACESELP "%d Faces Selected" - IDS_RB_NUMEDGESELP "%d Edges Selected" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_RESETUNWRAPUVWS "Are you sure you want to reset?\n\nAll changes made within the Unwrap UVW modifier will be lost." - IDS_RB_LENGTH "Length" - IDS_SA_TRIANGLE "Faces" - IDS_SA_POLYGON "Polygons" - IDS_SA_TRI_POLY_RESTORE "Faces/Polygons Toggle" - IDS_RB_SPIN "Spin" - IDS_RB_FALLOFF "Falloff" - IDS_TH_PATCHMTLCHANGE "Patch material ID change" - IDS_RB_MOVE "Move" - IDS_RB_ROTATE "Rotate" - IDS_RB_PAN "Pan" - IDS_RB_ZOOM "Zoom" - IDS_RB_PICKMAP "Pick Map" - IDS_RB_UPDATE "Update Map" - IDS_RB_ZOOMEXT "Zoom Extents" - IDS_RB_ZOOMREG "Zoom Region" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_RB_UVW "Coordinates" - IDS_RB_PROP "Unwrap Options" - IDS_RB_SHOWMAP "Show Map" - IDS_RB_DEFMODS "Standard modifiers (Kinetix)" - SPACEWARPS_FOR_BOTH "Particles & Dynamics" - SPACEWARPS_FOR_PARTICLES "Particles Only" - SW_TEST "testing" - IDS_EM_SELECTION "Selection" - IDS_EM_POLY "Polygon" - IDS_EM_ELEMENT "Element" - IDS_EM_OBJECT_SEL "Whole Object Selected" - IDS_EM_WHICHVERTSEL "Vertex %d Selected" - IDS_EM_WHICHEDGESEL "Edge %d Selected" - IDS_EM_WHICHFACESEL "Face %d Selected" - IDS_EM_EDIT_GEOM "Edit Geometry" - IDS_EM_SHAPE "Shape" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_ADV_SURF_APPROX_WARNING_TITLE "Surface Approximation Verification" - IDS_ADV_SURF_APPROX_WARNING - "You have selected a potentially dangerous setting for the SubDivision limits. Are you sure you want to do this?" - IDS_PW_PICK "Pick Texture" - IDS_PW_SNAP "Pixel Snap" - IDS_PW_WELD "Target Weld" - IDS_PW_FACEMAP "Face Map" - IDS_PW_SELECTFACE "Select Face" - IDS_PW_UVWFILES "UVW files(*.uvw)" - IDS_PW_SAVEOBJECT "Save UVW" - IDS_PW_FILEEXISTS "%s already exists.\nDo you want to replace it?" - IDS_PW_LOADOBJECT "Load UVW" - IDS_PW_MIRRORH "Mirror Horizontal" - IDS_PW_EXPANDSELECTION "Expand Selection" - IDS_PW_FALLOFF "Falloff type" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_EM_SELBYCOLOR "Select By Color" - IDS_EM_VERTEXCOLOR "Vertex Color" - IDS_EM_SETVERTCOLOR "Set Vertex Color" - IDS_EM_CREATE_MESH "Create Mesh" - IDS_EM_NEWOBJECTNAME "Mesh" - IDS_MS_PARAMS "Mesh Select Parameters" - IDS_EM_FACE_DIVIDE "Face Divide" - IDS_EM_SELECT_OPEN "Select Open Edges" - IDS_EM_CREATECURVE "Create Curve" - IDS_EM_DELETE_ISOVERTS "Delete Isolated Vertices" - IDS_MS_AFFECTREGION "Soft Selection" - IDS_EM_ALIGN "Align" - IDS_EM_VERT_BREAK "Vertex Break" - IDS_EM_SLICE "Slice" - IDS_EM_CUT "Cut" - IDS_EM_DETACHFACES "Detach Faces" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_EM_DETACHVERTS "Detach Verts" - IDS_EM_INHERIT_MATERIAL "Inherit Material" - IDS_EM_COMBINE_MATERIALS "Combine Materials" - IDS_EM_NOEDGESSELECTED "No Edges Selected" - IDS_UVWX_CHANNEL "Map or Vertex Color" - IDS_UVWX_MAPCHANNEL "Map Channel" - IDS_UVWX_UFLIP "U Flip" - IDS_UVWX_VFLIP "V Flip" - IDS_UVWX_WFLIP "W Flip" - IDS_EM_FLIP_NORMAL "Flip Normal" - IDS_TH_SPLSEGSEL "Spline %d/Seg %d Selected" - IDS_TH_NUMSEGSELP "%d Segments Selected" - IDS_TH_NUMSPLINESEL "Spline %d Selected (%s)" - IDS_TH_NUMSPLINESELP "%d Splines Selected" - IDS_TH_SPLVERTSEL "Spline %d/Vert %d Selected" - IDS_TH_SPLINE_VERT_COUNT "Vertex Count: %d" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_SELECTION "Selection" - IDS_TH_OBJECT_SEL "Whole Object Selected" - IDS_TH_NUMVERTSEL "Vertex %d Selected" - IDS_TH_NUMVERTSELP "%d Vertices Selected" - IDS_TH_GEOMETRY "Geometry" - IDS_TH_MULTIATTACH "Attach Multiple" - IDS_TH_NUMEDGESEL "Edge %d Selected" - IDS_TH_NUMEDGESELP "%d Edges Selected" - IDS_TH_NUMPATCHSEL "Patch %d Selected" - IDS_TH_NUMPATCHSELP "%d Patches Selected" - IDS_MS_USE_AR "Use Soft Selection" - IDS_TH_EXPLODE "Explode" - IDS_TH_DIVIDE_SEGMENT "Divide Segment" - IDS_TH_REVERSE_SPLINE "Reverse Spline" - IDS_TH_MULTIPLE_NODES "Can't Proceed: Modifier applied to multiple splines." - IDS_TH_CROSS_INSERT "Cross Insert" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_EM_BEVEL "Bevel" - IDS_EM_OUTLINE "Outline" - IDS_ADV_DISP_APPROX_WARNING_TITLE - "Displacement Approximation Verification" - IDS_ADV_DISP_APPROX_WARNING - "You have selected a potential dangerous setting for the SubDivision limits. Are you sure you want to do this?" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PW_FALLOFFSPACE "World Falloff Space" - IDS_PW_BREAK "Break Selected Vertices" - IDS_PW_LOCKSELECTED "Lock selected vertices" - IDS_PW_HIDE "Hide" - IDS_PW_FREEZE "Freeze" - IDS_PW_FACEFILTER "Filter SelectedFaces" - IDS_PW_LEVEL "Level" - IDS_PW_USE_AR "Use affect region" - IDS_PW_PINCH "Pinch" - IDS_PW_BUBBLE "Bubble" - IDS_PW_METHOD "Method" - IDS_PW_TYPE "Type" - IDS_PW_VOLUME "Volume" - IDS_PW_INVERT "Invert" - IDS_PW_NODE "Node" - IDS_PW_TEXMAP "TextureMap" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PW_CHANNEL "Map Channel" - IDS_PW_MAP "Map Channel Type" - IDS_PW_MIRRORV "Mirror Vertical" - IDS_PW_CONTRACTSELECTION "Contract selection" - IDS_PW_FALLOFFSPACEUVW "Texture Falloff Space" - IDS_PW_UNHIDE "Unhide" - IDS_PW_UNFREEZE "Unfreeze" - IDS_PW_FALLOFF2 "Falloff" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_CROSS_NOT_IN_THRESHOLD - "Crossing lines not within specified threshold" - IDS_TH_EDGEDELETE "Delete Edge" - IDS_TH_NOEDGESSEL "No edges selected" - IDS_TH_SEGMTLCHANGE "Segment material ID change" - IDS_CT_DISPAPPROX_CLASS "Disp Approx" - IDS_CT_DISP_APPROX "Displacement Approx." - IDS_CT_DISP_APPROX_CHANGE "Displacement Approximation" - IDS_CT_MESH_MESHER_CLASS "Displace Mesh" - IDS_CT_MESH_MESHER "Displace Mesh" - IDS_PW_NSPLINE "Normalize Spline" - IDS_EM_CHAMFER "Chamfer" - IDS_EM_BREAK "Break" - IDS_EM_DIVIDE "Divide" - IDS_TH_OPEN "Open" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_TH_CLOSED "Closed" - IDS_EM_ATTACH_LIST "Attach List" - IDS_EM_DETACH "Detach" - IDS_VS_MATID "Material ID" - IDS_VS_SMGROUP "Smoothing Group" - IDS_TH_TRIM "Trim" - IDS_TH_EXTEND "Extend" - IDS_TH_FILLET "Fillet" - IDS_TH_CHAMFER "Chamfer" - IDS_CHANGEWEIGHT "Change Weight" - IDS_TH_PASTE_NAMED_SEL "Paste Named Selection" - IDS_TH_SURFACEPROPERTIES "Surface Properties" - IDS_PW_MOVEH "Move Horizontal" - IDS_PW_MOVEV "Move Vertical" - IDS_PW_SCALEH "Scale Horizontal" - IDS_PW_SCALEV "Scale Vertical" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PW_WELDSELECTED "Weld Selected" - IDS_PW_APPLYPLANAR "Apply Planar" - IDS_PW_FACEMODE "Face Mode" - IDS_PW_UVW_VERT_EDIT "UVW Vert Edit" - IDS_PW_UVW_EDIT "UVW Edit" - IDS_PW_SELECT_UVW "Select UVWs" - IDS_PW_RESET_UNWRAP "Reset Unwrap" - IDS_PW_SELECTRESTORE "Select Restore" - IDS_PW_PLANARMAP "PlanarMap" - IDS_PW_POINT "Point" - IDS_PW_MOVE_UVW "Move UVWs" - IDS_PW_ID_ALLID "All IDs" - IDS_PW_UNWRAPVIEW "UnwrapView" - IDS_PW_DELETE_SELECTED "Delete Selected" - IDS_PW_HIDE_SELECTED "Hide Selected" - IDS_PW_UNHIDEALL "Unhide All" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PW_FREEZE_SELECTED "Freeze Selected" - IDS_PW_UNFREEZEALL "Unfreeze All" - IDS_PW_ASSIGN_CONTROLLER "Assign Controlle" - IDS_PW_ROTATE_UVW "Rotate UVWs" - IDS_PW_SCALE_UVW "Scale UVWs" - IDS_PW_WELD_UVW "Weld UVWs" - IDS_PW_LINECOLOR "Line Color" - IDS_RB_UNSUPPORTED_MAP_TYPE - "The Displace modifier does not support the mapping type that has been selected to acquire." - IDS_MM_ACQ_MAPPING "Aquire Mapping" - IDS_PARAM_CHANGE "Parameter Change" - IDS_PW_UNDO_RESET "Reset" - IDS_PW_UNDO_FIT "Fit" - IDS_PW_MOUSE_CENTER "CTRL and ALT centers operation on cursor" - IDS_PW_MOUSE_ADD "CTRL adds to selection" - IDS_PW_MOUSE_SUBTRACT "ALT subtracts from selection" - IDS_PW_MOUSE_CONSTRAIN "SHIFT constrains the mouse to X/Y" -END - -STRINGTABLE DISCARDABLE -BEGIN - IDS_PW_MOUSE_SELECTTV "Select texture vertices" - IDS_PW_MOUSE_SELECTTRI "SHIFT selects triangle faces" - IDS_PW_MOUSE_SELECTFACE "Select faces" - IDS_PW_CYCLE "Cycle" - IDS_PW_FUSE "Fuse Vertices" - IDS_PW_AUTOFIT "Auto fit" - IDS_PW_BIND "Bind" - IDS_PW_UNBIND "Unbind" - IDS_PW_SURFACEERROR "An old version of Surface Tools might have created a bad patch trying to recover" - IDS_PW_VOLDATA "Vol. Select Data" - IDS_PW_ERROR "Error" - IDS_PW_INSTANCEERROR "Error UVW Unwrap cannot be instanced please make it unique" -END - -#endif // English (U.S.) resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// French (France) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA) -#ifdef _WIN32 -LANGUAGE LANG_FRENCH, SUBLANG_FRENCH -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Cursor -// - -IDC_PICK_COLOR CURSOR DISCARDABLE "pick_color.cur" -IDC_FILL CURSOR DISCARDABLE "cursor1.cur" -IDC_TRICK CURSOR DISCARDABLE "cur00001.cur" -#endif // French (France) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/modsres.h b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/modsres.h deleted file mode 100644 index 349a125d2..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/modsres.h +++ /dev/null @@ -1,1427 +0,0 @@ -//{{NO_DEPENDENCIES}} -// Microsoft Developer Studio generated include file. -// Used by mods.rc -// -#define IDD_BENDPARAM 101 -#define IDC_TH_SELCURSOR 101 -#define IDD_TAPERPARAM 102 -#define IDC_EXTRUDECUR 102 -#define IDD_SINWAVEPARAM1 103 -#define IDB_FACESELTYPES 103 -#define IDC_OUTLINECUR 103 -#define IDB_MASK_FACESELTYPES 104 -#define IDC_SEGBREAKCUR 104 -#define IDD_SINWAVEMODPARAM 105 -#define IDC_SEGREFINECUR 105 -#define IDC_VERTCONNECTCUR 106 -#define IDC_VERTINSERTCUR 107 -#define IDD_DETACH 109 -#define IDB_BOOLEANTYPES 110 -#define IDD_EM_ATTACH_MATS 110 -#define IDB_MASK_BOOLEANTYPES 111 -#define IDD_AUTHMSG 116 -#define IDD_AUTHORIZE 117 -#define IDB_MASK_BULBS 117 -#define IDD_TWISTPARAM 118 -#define IDB_BULBS 118 -#define IDC_ADDVERTCUR 119 -#define IDB_MASK_MIRRORTYPES 119 -#define IDD_EXTRUDEPARAM 120 -#define IDB_MIRRORTYPES 120 -#define IDB_EM_SELTYPES 123 -#define IDD_BOMBPARAMS 124 -#define IDB_EM_SELMASK 124 -#define IDD_ELPARAM_OBJECT 125 -#define IDD_ELPARAM_PATH 126 -#define IDB_PATCHSELTYPES 126 -#define IDD_ELPARAM_SECTION 127 -#define IDB_SPLINESELTYPES 127 -#define IDD_SKEWPARAM 129 -#define IDD_NOISEPARAM 130 -#define IDD_SINWAVEOMODPARAM 131 -#define IDD_LINWAVEPARAM1 132 -#define IDD_LINWAVEOMODPARAM 133 -#define IDD_OPTIMIZEPARAM 134 -#define IDD_DISPLACEPARAM 135 -#define IDD_CLUSTNODEPARAM 136 -#define IDD_EM_SELECTBYMAT 137 -#define IDD_WINDPARAM 138 -#define IDD_GRAVITYPARAM 139 -#define IDD_DEFLECTORPARAM 140 -#define IDD_UVWMAPPARAM 141 -#define IDD_EM_SELECTBYSMOOTH 143 -#define IDD_DISPLACE_SOT 144 -#define IDD_WINDRAIN_SOT 145 -#define IDD_SINWAVE_SOT 146 -#define IDD_BOMB_SOT 147 -#define IDD_SELECTPARAM 148 -#define IDD_MATERIALPARAM 149 -#define IDD_SMOOTHPARAM 150 -#define IDD_NORMALPARAM 151 -#define IDC_CUR_TRIM 151 -#define IDD_SURFREVPARAM 152 -#define IDD_DISPLACEPARAM_WS 154 -#define IDD_UNWRAP_FLOATER 155 -#define IDB_UNWRAPTOOL 156 -#define IDC_ES_CROSS_HAIR 156 -#define IDB_MASK_UNWRAPTOOL 157 -#define IDD_UNWRAP_PROP 157 -#define IDB_UNWRAP_VIEW_MASK 160 -#define IDB_UNWRAP_OPTION_MASK 161 -#define IDB_UNWRAP_TRANSFORM 162 -#define IDB_UNWRAP_TRANSFORM_MASK 163 -#define IDB_UNWRAP_VERT 164 -#define IDB_UNWRAP_VERT_MASK 165 -#define IDB_UNWRAP_VIEW 166 -#define IDB_UNWRAP_OPTION 167 -#define IDB_SPLINESELMASK 168 -#define IDB_PATCHSELMASK 169 -#define IDC_BEVEL 170 -#define IDR_UNWRAP_RIGHT_MENU 171 -#define IDC_ECHAMFERCUR 172 -#define IDC_VCHAMFERCUR 173 -#define IDC_SCALEY 176 -#define IDC_MOVEY 177 -#define IDC_SCALEX 178 -#define IDC_MOVEX 179 -#define IDC_ZOOMREG 180 -#define IDC_PANHAND 181 -#define IDC_ZOOM 182 -#define IDR_SMALL 185 -#define IDR_MEDIUM 187 -#define IDR_LARGE 188 -#define IDR_128 189 -#define IDR_256 190 -#define IDC_PICK_COLOR 192 -#define IDC_FILL 193 -#define IDC_TRICK 194 -#define IDC_CURSOR1 196 -#define IDI_ICON1 197 -#define IDI_ICON2 198 -#define IDI_ICON3 199 -#define IDD_MAP_ACQUIRE 201 -#define IDD_RESETXFORM_PANEL 202 -#define IDD_AFRPARAM 203 -#define IDD_TESSPARAM 204 -#define IDD_FACEEXTRUDEPARAM 209 -#define IDD_UVWXFORMPARAM 210 -#define IDD_MIRRORPARAM 211 -#define IDD_UNWRAP_PARAMS 212 -#define IDD_PASTE_NAMEDSET 213 -#define IDD_SEL_NAMEDSET 214 -#define IDD_WINDGRAV_SOT 215 -#define IDS_ADV_SURF_APPROX_WARNING_TITLE 322 -#define IDS_ADV_SURF_APPROX_WARNING 323 -#define IDS_PW_PICK 324 -#define IDS_PW_SNAP 325 -#define IDS_PW_WELD 326 -#define IDS_PW_FACEMAP 327 -#define IDS_PW_SELECTFACE 328 -#define IDS_PW_UVWFILES 329 -#define IDS_PW_SAVEOBJECT 330 -#define IDS_PW_FILEEXISTS 331 -#define IDS_PW_LOADOBJECT 332 -#define IDS_PW_MIRRORH 333 -#define IDS_PW_EXPANDSELECTION 334 -#define IDS_PW_FALLOFF 335 -#define IDS_PW_FALLOFFSPACE 336 -#define IDS_PW_BREAK 337 -#define IDS_PW_LOCKSELECTED 338 -#define IDS_PW_HIDE 339 -#define IDS_PW_FREEZE 340 -#define IDS_PW_FACEFILTER 341 -#define IDS_PW_LEVEL 342 -#define IDS_PW_USE_AR 343 -#define IDS_PW_PINCH 344 -#define IDS_PW_BUBBLE 345 -#define IDS_PW_METHOD 346 -#define IDS_PW_TYPE 347 -#define IDS_PW_VOLUME 348 -#define IDS_PW_INVERT 349 -#define IDS_PW_NODE 350 -#define IDS_PW_TEXMAP 351 -#define IDS_PW_CHANNEL 352 -#define IDS_PW_MAP 353 -#define IDS_PW_MIRRORV 354 -#define IDS_PW_CONTRACTSELECTION 355 -#define IDS_PW_FALLOFFSPACEUVW 356 -#define IDS_PW_UNHIDE 357 -#define IDS_PW_UNFREEZE 358 -#define IDS_PW_FALLOFF2 359 -#define IDD_SURF_APPROX_ADV 413 -#define IDD_EM_SELECT 414 -#define IDD_EM_GEOM 415 -#define IDD_EM_SURF_VERT 416 -#define IDD_EM_SURF_FACE 417 -#define IDD_EM_SURF_EDGE 418 -#define IDD_EM_CREATECURVE 419 -#define IDD_EM_DETACH 420 -#define IDD_MESH_SELECT 421 -#define IDD_MESHSEL_AFFECTREGION 422 -#define IDC_ANGLE 1000 -#define IDC_X 1001 -#define IDC_PHASE 1001 -#define IDC_Y 1002 -#define IDC_Z 1003 -#define IDC_DIR 1004 -#define IDC_TWIST_BIAS 1004 -#define IDC_EM_IGNORE_VISEDGE 1004 -#define IDC_ANGLESPINNER 1005 -#define IDC_MODNOISE_SEED 1005 -#define IDC_EM_IGNORE_BACKFACES 1005 -#define IDC_DIRSPINNER 1006 -#define IDC_TWIST_BIASSPIN 1006 -#define IDC_CRV 1007 -#define IDC_PHASESPINNER 1007 -#define IDC_MODNOISE_SEEDSPIN 1007 -#define IDC_OPT_BIAS 1007 -#define IDC_DISP_UTILE 1007 -#define IDC_NS_LIST 1007 -#define IDC_AMT 1008 -#define IDC_DECAYSPINNER 1008 -#define IDC_MODNOISE_ROUGHNESS 1008 -#define IDC_OPT_BIASSPIN 1008 -#define IDC_DISP_UTILESPIN 1008 -#define IDC_SET_NAME 1008 -#define IDC_AMTSPINNER 1009 -#define IDC_DECAY 1009 -#define IDC_MODNOISE_ROUGHNESSSPIN 1009 -#define IDC_DISP_VTILE 1009 -#define IDC_OPT_MAXEDGE 1009 -#define IDC_CRVSPINNER 1010 -#define IDC_MODNOISE_ITERATIONS 1010 -#define IDC_DISP_VTILESPIN 1010 -#define IDC_OPT_MAXEDGESPIN 1010 -#define IDC_AMPLITUDE 1011 -#define IDC_TAPER_FROM 1011 -#define IDC_MODNOISE_ITERATIONSSPIN 1011 -#define IDC_DISP_STRENGTH 1011 -#define IDC_EM_DETACH_ELEM 1011 -#define IDC_AMPSPINNER 1012 -#define IDC_TAPER_TO 1012 -#define IDC_DISP_STRENGTHSPIN 1012 -#define IDC_WAVELEN 1013 -#define IDC_TAPER_FROMSPIN 1013 -#define IDC_DISP_DECAY 1013 -#define IDC_EM_NUMBER_SEL 1013 -#define IDC_NUMSEL_LABEL 1013 -#define IDC_EM_DETACH_CLONE 1013 -#define IDC_WAVELENSPINNER 1014 -#define IDC_TAPER_TOSPIN 1014 -#define IDC_DISP_DECAYSPIN 1014 -#define IDC_CIRCLES 1015 -#define IDC_DISP_BLUR 1015 -#define IDC_CIRCLESSPINNER 1016 -#define IDC_DISP_BLURSPIN 1016 -#define IDC_EMCURVE_NAME 1016 -#define IDC_SEGS 1017 -#define IDC_DISP_CENTERL 1017 -#define IDC_EMCURVE_SMOOTH 1017 -#define IDC_SVN_SELECTED 1017 -#define IDC_WELDTESS 1017 -#define IDC_SEGSPINNER 1018 -#define IDC_DISP_CENTERLSPIN 1018 -#define IDC_EMCURVE_LINEAR 1018 -#define IDC_DIVISIONS 1019 -#define IDC_EMCURVE_IGNOREHIDDEN 1019 -#define IDC_DIVSPINNER 1020 -#define IDC_FLEX 1021 -#define IDC_STRENGTH 1021 -#define IDC_AMPSPINNER2 1021 -#define IDC_FLEXSPINNER 1022 -#define IDC_STRENGTHSPIN 1022 -#define IDC_AMPLITUDE2 1022 -#define IDC_AUTHORIZE 1023 -#define IDC_GRAVITYSPIN 1023 -#define IDC_LOCKID 1024 -#define IDC_GRAVITY 1024 -#define IDC_EDIT2 1025 -#define IDC_DETONATIONSPIN 1025 -#define IDC_DETACH 1026 -#define IDC_DETONATION 1026 -#define IDC_BOMB_CHAOSSPIN 1027 -#define IDC_BOMB_CHAOS 1028 -#define IDC_WELDTHRESH 1030 -#define IDC_THRESHSPINNER 1031 -#define IDC_LENGTH_EDIT 1031 -#define IDC_SMOOTH_THRESHSPIN 1035 -#define IDC_EM_VERT_SELG 1035 -#define IDC_TES_EDGE 1036 -#define IDC_SMOOTH_THRESH 1036 -#define IDC_TES_CENTER 1037 -#define IDC_TENSION 1039 -#define IDC_MAT_IDSPIN 1039 -#define IDC_MAT_ID 1040 -#define IDC_WELD 1041 -#define IDC_WELDCUR 1041 -#define IDC_ES_INSERT 1042 -#define IDC_TESS_U_SPIN 1042 -#define IDC_LEVEL 1043 -#define IDC_ES_BREAK 1043 -#define IDC_LEVELSPINNER 1044 -#define IDC_ES_MAKEFIRST 1044 -#define IDC_TESS_V_SPIN 1044 -#define IDC_TES_FACE_TRI 1045 -#define IDC_SELTYPE 1045 -#define IDC_ES_FUSE 1045 -#define IDC_ES_CLOSE 1046 -#define IDC_TES_FACE_POLY 1047 -#define IDC_ES_OUTLINE 1047 -#define IDC_ES_BOOLEAN 1048 -#define IDC_ES_OUTCENTER 1049 -#define IDC_DETACHCOPY 1050 -#define IDC_LENGTH_SPIN 1050 -#define IDC_ES_FILLET 1050 -#define IDC_EM_ALIGNCONST 1051 -#define IDC_ES_EXPLODE 1051 -#define IDC_ATTACH 1052 -#define IDC_ATTACHCUR 1052 -#define IDC_EM_ANGLETHRESH 1052 -#define IDC_ES_CHAMFER 1052 -#define IDC_EM_REMOVE_ISO_VERTS 1053 -#define IDC_ES_CREATELINE 1053 -#define IDC_EM_CREATE_CURVE 1054 -#define IDC_ES_ATTACH_MULTIPLE 1054 -#define IDC_DETACH_NAME 1055 -#define IDC_ALIGNMIN 1055 -#define IDC_ES_CROSS_INSERT 1055 -#define IDD_EDSPLINE_OPS 1055 -#define IDC_GETSHAPE 1056 -#define IDC_EM_SPLIT 1056 -#define IDD_EDSPLINE_SELECT 1056 -#define IDC_LOCK_HANDLES 1057 -#define IDC_EM_REFINE 1057 -#define IDD_EDPATCH_SELECT 1057 -#define IDC_LOCKALIKE 1058 -#define IDC_ALIGNCENTER 1058 -#define IDC_EM_CUT 1058 -#define IDC_ES_SEGDIVIDE 1058 -#define IDD_EDPATCH_OPS 1058 -#define IDC_LOCKALL 1059 -#define IDC_ALIGNMAX 1059 -#define IDC_EM_SLICEPLANE 1059 -#define IDD_SELECTBYMAT 1059 -#define IDC_ATTACHREORIENT 1060 -#define IDC_EM_SLICE 1060 -#define IDC_SHOW_VERTEX_NUMBERS 1060 -#define IDC_DETACHREORIENT 1061 -#define IDC_EM_TES_TEXT 1061 -#define IDD_EM_CLONE 1061 -#define IDC_AREA_SELECTION 1061 -#define IDC_EM_EXP_TEXT 1062 -#define IDC_ES_SAMESHAPE 1062 -#define IDD_EM_EXPLODE 1062 -#define IDC_AMOUNT 1063 -#define IDC_EM_PIXELS_TEXT 1063 -#define IDC_ES_OUTLINESPINNER 1063 -#define IDD_DISP_APPROX_ADV 1063 -#define IDC_AMOUNTSPINNER 1064 -#define IDC_ES_OUTLINEWIDTH 1064 -#define IDC_NO_SMOOTH 1064 -#define IDC_SEGMENTSPINNER 1065 -#define IDC_ADDTRI 1065 -#define IDC_ES_BOOL_TYPE 1065 -#define IDC_SEGMENTS 1066 -#define IDC_ADDQUAD 1066 -#define IDC_ES_FILLETWIDTH 1066 -#define IDC_CAPSTART 1067 -#define IDC_ES_MIRROR 1067 -#define IDC_CAPEND 1068 -#define IDC_ES_MIRROR_TYPE 1068 -#define IDC_ES_COPY_MIRROR 1069 -#define IDC_HIDE 1069 -#define IDC_SECDELETE 1070 -#define IDC_ES_REVERSE 1070 -#define IDC_UNHIDE 1070 -#define IDC_GETPATH 1071 -#define IDC_SECALIGN 1071 -#define IDC_BIND 1071 -#define IDC_ES_FILLETSPINNER 1071 -#define IDC_SECCENTER 1072 -#define IDC_UNBIND 1072 -#define IDC_ES_CHAMFERWIDTH 1072 -#define IDC_ALIGNTYPES 1073 -#define IDC_ES_CHAMFERSPINNER 1073 -#define IDC_PAINT 1073 -#define IDC_ES_ABOUT_PIVOT 1074 -#define IDC_TURN 1074 -#define IDC_ES_RCLINEAR 1075 -#define IDC_TURN2 1075 -#define IDC_ES_SHOW_SELECTED 1076 -#define IDC_ES_TRIM 1077 -#define IDC_ES_RCCLOSED 1078 -#define IDC_ES_BINDFIRST 1079 -#define IDC_ES_BINDLAST 1080 -#define IDC_ES_EXTEND 1081 -#define IDC_ES_TRIM_INFINITE 1082 -#define IDC_ES_RCONNECT 1083 -#define IDC_FALLOFF 1086 -#define IDC_EM_DELETE 1086 -#define IDC_FALLOFFSPIN 1087 -#define IDC_PINCHSPIN 1088 -#define IDC_SPIN 1088 -#define IDC_EM_T_THR_SPIN 1088 -#define IDC_PINCH 1089 -#define IDC_SPINSPIN 1089 -#define IDC_BUBBLESPIN 1090 -#define IDC_MINFRAG 1090 -#define IDC_BUBBLE 1091 -#define IDC_MINFRAGSPIN 1091 -#define IDC_NEARLABEL 1092 -#define IDC_MAXFRAG 1092 -#define IDC_FARLEFTLABEL 1093 -#define IDC_MAXFRAGSPIN 1093 -#define IDC_FARRIGHTLABEL 1094 -#define IDC_SEED 1094 -#define IDC_AR_GRAPH 1095 -#define IDC_SEEDSPIN 1095 -#define IDC_TENSTEXT 1096 -#define IDC_EM_VERT_SELRSPIN 1096 -#define IDC_EM_E_ITER_SPIN 1096 -#define IDC_EM_VERT_SELGSPIN 1097 -#define IDC_TAPER_AFFECTREGION 1098 -#define IDC_EM_VERT_SELBSPIN 1098 -#define IDC_EFFECT_X 1104 -#define IDC_EFFECT_Y 1105 -#define IDC_EFFECT_BOTH 1106 -#define IDC_TAPER_SYMMETRY 1107 -#define IDC_BEND_AFFECTREGION 1108 -#define IDC_BEND_TO 1109 -#define IDC_BEND_TOSPIN 1110 -#define IDC_BEND_FROM 1111 -#define IDC_BEND_FROMSPIN 1112 -#define IDC_TWIST_AFFECTREGION 1113 -#define IDC_MODNOISE_FRACTAL 1113 -#define IDC_MERGE_SPINNER 1113 -#define IDC_TWIST_TO 1114 -#define IDC_MODNOISE_ANIMATE 1114 -#define IDC_TWIST_TOSPIN 1115 -#define IDC_EM_EXTYPE_A 1115 -#define IDC_TWIST_FROM 1116 -#define IDC_EM_EXTYPE_B 1116 -#define IDC_TWIST_FROMSPIN 1117 -#define IDC_MERGE 1117 -#define IDC_SKEW_AMOUNT 1118 -#define IDC_EP_SM_SMOOTH 1118 -#define IDC_SKEW_AMOUNTSPIN 1119 -#define IDC_EP_SM_SMOOTH2 1119 -#define IDC_SKEW_AFFECTREGION 1120 -#define IDC_EP_SM_SMOOTH3 1120 -#define IDC_SKEW_TO 1121 -#define IDC_EM_CLONE_OBJ 1121 -#define IDC_EP_SM_SMOOTH4 1121 -#define IDC_SKEW_TOSPIN 1122 -#define IDC_EM_CLONE_ELEM 1122 -#define IDC_EP_SM_SMOOTH5 1122 -#define IDC_SKEW_FROM 1123 -#define IDC_DO_SUBDIV 1123 -#define IDC_EP_SM_SMOOTH6 1123 -#define IDC_SKEW_FROMSPIN 1124 -#define IDC_MODNOISE_XSTRENGTH 1127 -#define IDC_MODNOISE_XSTRENGTHSPIN 1128 -#define IDC_MODNOISE_YSTRENGTH 1129 -#define IDC_MODNOISE_YSTRENGTHSPIN 1130 -#define IDC_MODNOISE_ZSTRENGTH 1131 -#define IDC_TESS_MIN_REC_SPINNER 1131 -#define IDC_MODNOISE_ZSTRENGTHSPIN 1132 -#define IDC_TESS_MAX_REC_SPINNER 1132 -#define IDC_MODNOISE_SCALE 1133 -#define IDC_TESS_MAX_TRIS_SPINNER 1133 -#define IDC_MODNOISE_SCALESPIN 1134 -#define IDC_MODNOISE_ROUGHNESSLABEL 1135 -#define IDC_TESS_MIN_REC 1135 -#define IDC_MODNOISE_FREQ 1136 -#define IDC_OPT_PRESERVEMAT 1136 -#define IDC_TESS_MAX_REC 1136 -#define IDC_MODNOISE_FREQSPIN 1137 -#define IDC_OPT_RENDERL1 1137 -#define IDC_TESS_MAX_TRIS 1137 -#define IDC_OPT_RENDERL2 1138 -#define IDC_MODNOISE_PHASE 1138 -#define IDC_OPT_VIEWSL1 1139 -#define IDC_MODNOISE_PHASESPIN 1139 -#define IDC_OPT_VIEWSL2 1140 -#define IDC_MODNOISE_ITERATIONSLABEL 1140 -#define IDC_OPT_FACETHRESH 1141 -#define IDC_OPT_FACETHRESHSPIN 1142 -#define IDD_DISP_APPROX 1142 -#define IDC_OPT_EDGETHRESH 1143 -#define IDD_MESHER_DISP_APPROX 1143 -#define IDC_OPT_EDGETHRESHSPIN 1144 -#define IDD_NSPLINE 1144 -#define IDC_OPT_PRESERVESMOOTH 1145 -#define IDD_EM_AFFECTREGION 1145 -#define IDC_OPT_AUTOEDGE 1146 -#define IDD_ES_EXPLODE 1146 -#define IDC_OPT_VERTCOUNT 1147 -#define IDC_TESS_LDA 1147 -#define IDC_OPT_FACECOUNT 1148 -#define IDD_EDSPLINE_SURF 1148 -#define IDC_DISP_PLANAR 1149 -#define IDD_EDPATCH_SURF 1149 -#define IDC_DISP_CYL 1150 -#define IDD_EDPATCH_SURF_OBJ 1150 -#define IDC_DISP_SPHERE 1151 -#define IDD_NOISEPARAM_VIZ 1151 -#define IDD_EDPATCH_TILE 1151 -#define IDC_DISP_USEMAP 1152 -#define IDD_EDPATCH_EDGE 1152 -#define IDC_DISP_APPLYMAP 1153 -#define IDC_DISP_CENTERLUM 1154 -#define IDC_DISP_PICKIMAGE 1155 -#define IDC_DISP_REMOVEIMAGE 1156 -#define IDC_CLUST_PICKNODE 1157 -#define IDC_DISP_PICKMAP 1157 -#define IDC_CLUST_NODENAME 1158 -#define IDC_DISP_REMOVEMAP 1158 -#define IDC_DISPLENGTH 1161 -#define IDC_DISPLENGTHSPIN 1162 -#define IDC_WIND_STRENGTH 1163 -#define IDC_WIND_STRENGTHSPIN 1164 -#define IDC_FORCE_PLANAR 1165 -#define IDC_FORCE_SPHERICAL 1166 -#define IDC_WIND_DECAYSPIN 1167 -#define IDC_WIND_DECAY 1168 -#define IDC_WIND_TURBSPIN 1169 -#define IDC_WIND_TURB 1170 -#define IDC_GRAV_STRENGTH 1171 -#define IDC_WIND_FREQSPIN 1171 -#define IDC_GRAV_STRENGTHSPIN 1172 -#define IDC_WIND_FREQ 1172 -#define IDC_GRAV_DECAY 1173 -#define IDC_WIND_SCALESPIN 1173 -#define IDC_GRAV_DECAYSPIN 1174 -#define IDC_WIND_SCALE 1174 -#define IDC_DEFLECT_BOUNCE 1175 -#define IDC_DEFLECT_BOUNCESPIN 1176 -#define IDC_DEFLECT_WIDTH 1177 -#define IDC_DEFLECT_WIDTHSPIN 1178 -#define IDC_DEFLECT_HEIGHTSPIN 1179 -#define IDC_MAP_PLANAR 1179 -#define IDC_DEFLECT_HEIGHT 1180 -#define IDC_MAP_CYL 1180 -#define IDC_ES_DIVISIONS 1180 -#define IDC_MAP_SPHERE 1181 -#define IDC_ES_DIVSSPINNER 1181 -#define IDC_MAP_BALL 1182 -#define IDC_MAP_FIT 1183 -#define IDC_MAP_CENTER 1184 -#define IDC_MAP_VIEWALIGN 1185 -#define IDC_MAP_NORMALALIGN 1186 -#define IDC_MAP_BOX 1187 -#define IDC_MAP_FITREGION 1188 -#define IDC_PATCH_DELETE 1188 -#define IDC_MAP_BITMAPFIT 1189 -#define IDC_RESET 1189 -#define IDC_MAP_UFLIP 1190 -#define IDC_MAP_VFLIP 1191 -#define IDC_MAP_UTILESPIN 1192 -#define IDC_MAP_VTILESPIN 1193 -#define IDC_MAP_VTILE 1194 -#define IDC_MAP_UTILE 1195 -#define IDC_MAP_WTILE 1196 -#define IDC_SMOOTH_AUTO 1196 -#define IDC_MAP_WTILESPIN 1197 -#define IDC_SMOOTH_PREVENTINDIRECT 1197 -#define IDC_MAP_WFLIP 1198 -#define IDC_MAP_UOFFSET 1199 -#define IDC_MAP_RESET 1199 -#define IDC_SELECT_BYID 1200 -#define IDC_CLEARSELECTION 1200 -#define IDC_MAP_VOFFSET 1200 -#define IDC_MAP_ACQUIRE 1200 -#define IDC_SEL_OBJECT 1201 -#define IDC_MAP_WOFFSET 1201 -#define IDC_MAP_FACE 1201 -#define IDC_SELECTBYSMOOTH 1201 -#define IDC_SEL_VERTEX 1202 -#define IDC_MAP_UOFFSETSPIN 1202 -#define IDC_MAP_LENGTH 1202 -#define IDC_EM_SMOOTH_CLEAR 1202 -#define IDC_SMOOTH_CLEAR 1202 -#define IDC_SEL_FACE 1203 -#define IDC_MAP_VOFFSETSPIN 1203 -#define IDC_MAP_WIDTH 1203 -#define IDC_BALANCE_SELECTED 1203 -#define IDC_SEL_ADD 1204 -#define IDC_MAP_WOFFSETSPIN 1204 -#define IDC_MAP_HEIGHT 1204 -#define IDC_EM_NORMAL_FLIPMODE 1204 -#define IDC_SEL_SUBTRACT 1205 -#define IDC_MAP_LENGTHSPIN 1205 -#define IDC_SEL_REPLACE 1206 -#define IDC_MAP_WIDTHSPIN 1206 -#define IDC_SEL_WINDOW 1207 -#define IDC_MAP_HEIGHTSPIN 1207 -#define IDC_SEL_CROSSING 1208 -#define IDC_MAP_XYZTOUVW 1208 -#define IDC_SEL_FIT 1212 -#define IDC_SEL_CENTER 1213 -#define IDC_SEL_RESET 1214 -#define IDC_MATID 1215 -#define IDC_MATIDSPIN 1216 -#define IDC_SEL_OBJECT_BUTTON 1217 -#define IDC_SEL_INVERT 1218 -#define IDC_NORM_UNIFY 1219 -#define IDC_SEL_TEXTURE_BUTTON 1219 -#define IDC_NORM_FLIP 1220 -#define IDC_MAP_CAP 1220 -#define IDC_SEL_BOXB 1220 -#define IDC_DEGREES 1221 -#define IDC_SEL_SPHEREB 1221 -#define IDC_DEGREESSPINNER 1222 -#define IDC_SEL_CYLINDERB 1222 -#define IDC_MORPHCAP 1223 -#define IDC_SEL_MESH_OBJECTB 1223 -#define IDC_GRIDCAP 1224 -#define IDC_SEL_AUTOFIT 1224 -#define IDC_SEL_MATB 1225 -#define IDC_WELDCORE 1226 -#define IDC_SEL_SMGROUPB 1226 -#define IDC_SEL_TEXTURE_MAPB 1227 -#define IDC_DISPLATTICE 1229 -#define IDC_DISPSURFACE 1230 -#define IDC_SUBDIVIDE 1233 -#define IDC_PROPAGATE 1235 -#define IDC_STEPS 1237 -#define IDC_STEPSSPINNER 1238 -#define IDC_DISP_BALL 1239 -#define IDC_TESS_U_SPINNER 1239 -#define IDC_STEPS_RENDER 1239 -#define IDC_TESS_U 1240 -#define IDC_STEPSRENDERSPINNER 1240 -#define IDC_TESS_V_SPINNER 1241 -#define IDC_TILESTEPS 1241 -#define IDC_DISP_WTILE 1242 -#define IDC_TESS_V 1242 -#define IDC_TILESTEPSSPINNER 1242 -#define IDC_DISP_WTILESPIN 1243 -#define IDC_TESS_DIST_SPINNER 1243 -#define IDC_TRANSITION 1243 -#define IDC_DISP_WFLIP 1244 -#define IDC_TESS_DIST 1244 -#define IDC_TRANSITIONSPINNER 1244 -#define IDC_DISP_VFLIP 1245 -#define IDC_TESS_ANG_SPINNER 1245 -#define IDC_DISP_UFLIP 1246 -#define IDC_TESS_ANG 1246 -#define IDC_DISP_FIT 1247 -#define IDC_TESS_EDGE_SPINNER 1247 -#define IDC_DISP_CENTER 1248 -#define IDC_TESS_EDGE 1248 -#define IDC_DISP_BITMAPFIT 1249 -#define IDC_DISP_NORMALALIGN 1250 -#define IDC_DISP_RESET 1251 -#define IDC_DISP_ACQUIRE 1252 -#define IDC_PATCH 1254 -#define IDC_MESH 1255 -#define IDC_FILTVERTS 1255 -#define IDC_FILTVECS 1256 -#define IDC_GENMAPPING 1257 -#define IDC_EM_VERT_SELBYCOLOR 1257 -#define IDC_FLIPNORMALS 1258 -#define IDC_SPLINE_VERT_COUNT 1259 -#define IDC_GEN_MATIDS 1259 -#define IDC_USE_SHAPE_IDS 1260 -#define IDC_RESETTM_SELECTED 1261 -#define IDC_SMOOTH 1261 -#define IDC_AFR_FALLOFF 1262 -#define IDC_AFR_FALLOFFSPIN 1263 -#define IDC_AFR_BACKFACE 1264 -#define IDC_EXT_SCALE 1264 -#define IDC_EXT_SCALESPIN 1265 -#define IDC_AFR_PINCH 1266 -#define IDC_TENSIONSPIN 1266 -#define IDC_AFR_PINCHSPIN 1267 -#define IDC_ITERATIONS1 1267 -#define IDC_AFR_BUBBLE 1268 -#define IDC_ITERATIONS2 1268 -#define IDC_AFR_BUBBLESPIN 1269 -#define IDC_ITERATIONS3 1269 -#define IDC_ITERATIONS4 1270 -#define IDC_EXT_CENTER 1271 -#define IDC_EXT_AMOUNT 1272 -#define IDC_EXT_AMOUNTSPIN 1273 -#define IDC_DISP_VIEWALIGN 1274 -#define IDC_DISP_FITREGION 1275 -#define IDS_MIRROR_X 1277 -#define IDS_MIRROR_Y 1278 -#define IDS_MIRROR_Z 1279 -#define IDS_MIRROR_XY 1280 -#define IDS_MIRROR_YZ 1281 -#define IDS_MIRROR_ZX 1282 -#define IDC_MIRROR_COPY 1283 -#define IDC_MIRROR_OFFSET 1284 -#define IDC_MIRROR_OFFSETSPIN 1285 -#define IDC_UNWRAP_EDIT 1287 -#define IDC_UNWARP_TOOLBAR 1288 -#define IDC_UNWRAP_RESET 1288 -#define IDC_GRID 1288 -#define IDC_TREE 1289 -#define IDC_UNWRAP_VERTS_TOOLBAR 1289 -#define IDC_UNWRAP_SAVE 1289 -#define IDC_UNWRAP_VIEW 1290 -#define IDC_UNWRAP_LOAD 1290 -#define IDC_UNWRAP_LINECOLOR 1291 -#define IDC_UNWRAP_OPTION_TOOLBAR 1291 -#define IDC_UNWARP_VIEW_TOOLBAR 1292 -#define IDC_UNWRAP_SELCOLOR 1293 -#define IDC_UNWRAP_FILTER_TOOLBAR 1293 -#define IDC_UNWRAP_CONSTANTUPDATE 1294 -#define IDC_UNWRAP_WIDTH 1295 -#define IDC_UNWRAP_WIDTHSPIN 1296 -#define IDC_UNWRAP_HEIGHT 1297 -#define IDC_UNWRAP_HEIGHTSPIN 1298 -#define IDC_UNWRAP_DEFAULTS 1299 -#define IDC_UNWRAP_SELECT_VERTS 1300 -#define IDC_TESS_VIEW 1301 -#define IDC_UNWRAP_MIDPIXEL_SNAP 1301 -#define IDC_TESS_RENDERER 1302 -#define IDC_UNWRAP_WELDTHRESH 1302 -#define IDC_TESS_SET 1303 -#define IDC_UNWRAP_WELDTHRESHSPIN 1303 -#define IDC_UNWRAP_USEBITMAPRES 1304 -#define IDC_OPT_UPDATE 1305 -#define IDC_TESS_PARAM 1305 -#define IDC_OPT_MANUPDATE 1306 -#define IDC_TESS_SPATIAL 1306 -#define IDC_TESS_CURV 1307 -#define IDC_DISP_CAP 1307 -#define IDC_TESS_VIEW_DEP 1308 -#define IDC_SHOW_INTERIOR_FACES 1309 -#define IDC_MAP_CHAN1 1310 -#define IDC_TILE_MODE 1310 -#define IDC_LENGTH_LABEL 1311 -#define IDC_KEEP_MAPPING 1311 -#define IDC_MAP_CHAN2 1312 -#define IDC_INCLUDE_MESHES 1312 -#define IDC_WIDTH_LABEL 1313 -#define IDC_HEIGHT_LABEL 1314 -#define IDC_MAP_X 1315 -#define IDC_MAP_Y 1316 -#define IDC_EM_VERT_SELCOLOR 1316 -#define IDC_MAP_Z 1317 -#define IDC_DISP_LENGTH 1318 -#define IDC_DISP_LENGTHSPIN 1319 -#define IDC_DISP_WIDTH 1320 -#define IDC_DISP_WIDTHSPIN 1321 -#define IDC_DISP_HEIGHT 1322 -#define IDC_DISP_HEIGHTSPIN 1323 -#define IDC_DISP_X 1324 -#define IDC_DISP_Y 1325 -#define IDC_DISP_Z 1326 -#define IDC_NURBS 1327 -#define IDC_UNWRAP_U 1328 -#define IDC_ADVANCED 1328 -#define IDC_EM_EXPLODE 1328 -#define IDC_ADVANCED_PARAMETERS 1328 -#define IDC_UNWRAP_USPIN 1329 -#define IDC_EM_CREATE 1329 -#define IDC_UNWRAP_ULABEL 1330 -#define IDC_EM_DETACH 1330 -#define IDC_UNWRAP_V 1331 -#define IDC_FALLOFF_ON 1331 -#define IDC_UNWRAP_VSPIN 1332 -#define IDC_TESS_REGULAR 1332 -#define IDC_EM_WELDTOVERT 1332 -#define IDC_UNWRAP_VLABEL 1333 -#define IDC_EM_SELTYPE 1333 -#define IDC_UNWRAP_W 1334 -#define IDC_EM_SEL_BYVERT 1334 -#define IDC_EM_VERT_SELR 1334 -#define IDC_UNWRAP_WSPIN 1335 -#define IDC_EM_PLANAR 1335 -#define IDC_EM_SMOOTH_THRESHSPIN 1335 -#define IDC_UNWRAP_WLABEL 1336 -#define IDC_EM_PLANARSPINNER 1336 -#define IDC_EM_SMOOTH_THRESH 1336 -#define IDC_EM_MAKEPLANAR 1337 -#define IDC_EM_NORMAL_SCALESPIN 1337 -#define IDC_UNWRAP_STR 1337 -#define IDC_EM_EXTRUDE 1338 -#define IDC_EM_NORMAL_SCALE 1338 -#define IDC_UNWRAP_STRSPIN 1338 -#define IDC_EP_EXTRUDE 1338 -#define IDC_EM_EXTRUDEAMOUNT 1339 -#define IDC_EM_MAT_IDSPIN 1339 -#define IDC_EP_EXTRUDEAMOUNT 1339 -#define IDC_EM_EXTRUDESPINNER 1340 -#define IDC_EM_MAT_ID 1340 -#define IDC_EP_EXTRUDESPINNER 1340 -#define IDC_EM_AFFECT_REGION 1341 -#define IDC_EM_TESSELLATE 1342 -#define IDC_EM_TENSION 1343 -#define IDC_EM_E_DIST 1345 -#define IDC_EM_TENSIONSPINNER 1346 -#define IDC_EM_COLLAPSE 1347 -#define IDC_EM_E_ITER 1348 -#define IDC_EM_HIDE 1349 -#define IDC_EM_TES_EDGE 1349 -#define IDC_EM_UNHIDEALL 1350 -#define IDC_EM_TES_CENTER 1350 -#define IDC_EM_ANGLETHRESHSPIN 1351 -#define IDC_EM_COPYNS 1351 -#define IDC_EM_NORMAL_SHOW 1352 -#define IDC_EM_PASTENS 1352 -#define IDC_EM_OUTLINEAMOUNT 1352 -#define IDC_EP_OUTLINEAMOUNT 1352 -#define IDC_EM_NORMAL_FLIP 1353 -#define IDC_EM_OUTLINESPINNER 1353 -#define IDC_EP_OUTLINESPINNER 1353 -#define IDC_EM_NORMAL_UNIFY 1354 -#define IDC_EM_SELECT_OPEN 1355 -#define IDC_EM_VERT_COLOR 1355 -#define IDC_EM_SELECT_BYID 1356 -#define IDC_EM_SELECTBYSMOOTH 1357 -#define IDC_EM_SMOOTH_AUTO 1358 -#define IDC_EM_DETACH_NAME 1359 -#define IDC_EM_DETACH_NAMELABEL 1360 -#define IDC_MS_IGNORE_BACKFACES 1361 -#define IDC_MS_IGNORE_VISEDGE 1362 -#define IDC_MS_SEL_BYVERT 1363 -#define IDC_MS_PLANAR_TEXT 1364 -#define IDC_MS_PLANAR 1365 -#define IDC_MS_PLANARSPINNER 1366 -#define IDC_MS_GETVERT 1367 -#define IDC_MS_GETFACE 1368 -#define IDC_MS_GETEDGE 1369 -#define IDC_MS_COPYNS 1370 -#define IDC_MS_PASTENS 1371 -#define IDC_MS_NUMBER_SEL 1372 -#define IDC_MS_SELTYPE 1373 -#define IDC_MS_MATID 1374 -#define IDC_MS_MATIDSPIN 1375 -#define IDC_MS_SELBYMAT 1376 -#define IDC_EM_EXP_OBJECTS 1377 -#define IDC_MS_SELBYMAT_BOX 1377 -#define IDC_EM_EXP_ELEMENTS 1378 -#define IDC_MS_SELBYMAT_TEXT 1378 -#define IDC_EM_OBJ_ATTACH 1379 -#define IDC_MS_SELOPEN 1379 -#define IDC_MS_AR_USE 1380 -#define IDC_FALLOFF_LABEL 1381 -#define IDC_PINCH_LABEL 1382 -#define IDC_BUBBLE_LABEL 1383 -#define IDC_DISP 1386 -#define IDC_UNWRAP_APPLY 1390 -#define IDC_FOO 1391 -#define IDC_UNWRAP_ALIGN_TO_NORMAL 1391 -#define IDC_MAP_TEXMAP 1392 -#define IDC_UNWRAP_FIT 1392 -#define IDC_MAP_VERTCOL 1393 -#define IDC_MAP_CHAN 1394 -#define IDC_MAP_CHAN_SPIN 1395 -#define IDC_VS_MATID 1396 -#define IDC_VS_MATIDSPIN 1397 -#define IDC_VS_SMG 1398 -#define IDC_VS_SMGSPIN 1399 -#define IDC_DELAUNAY 1416 -#define IDC_PRESET3 1425 -#define IDC_PRESET2 1427 -#define IDC_PRESET1 1429 -#define IDC_EM_W_THR 1431 -#define IDC_ES_DELETE 1434 -#define IDC_EM_T_THR 1435 -#define IDC_NS_COPY 1435 -#define IDC_EM_VERT_SELB 1436 -#define IDC_NS_PASTE 1436 -#define IDC_ES_BIND 1436 -#define IDC_ES_REFINE 1437 -#define IDC_ES_DETACH 1438 -#define IDC_ES_CONNECT 1439 -#define IDC_ES_ATTACH 1440 -#define IDC_ES_ATTACHREORIENT 1441 -#define IDC_ES_WELD 1442 -#define IDC_ES_WELDTHRESH 1443 -#define IDC_ES_THRESHSPINNER 1444 -#define IDC_ES_DETACHREORIENT 1445 -#define IDC_ES_DETACHCOPY 1446 -#define IDC_ES_UNBIND 1447 -#define IDC_ES_HIDE 1448 -#define IDC_EM_DIVIDE 1449 -#define IDC_ES_CROSSTHRESH 1449 -#define IDC_EM_ALIGNVIEW 1450 -#define IDC_ES_CROSSTHRESHSPINNER 1450 -#define IDC_TESS_NORMALS 1451 -#define IDC_ES_UNHIDE 1451 -#define IDC_ES_CYCLE 1452 -#define IDC_TO_SPLINES 1480 -#define IDC_EM_TURN 1481 -#define IDC_TO_OBJECTS 1481 -#define IDC_EM_EDGE_VIS 1482 -#define IDC_EM_EDGE_INVIS 1483 -#define IDC_EM_EDGE_AUTO 1484 -#define IDC_SELECTAREA 1484 -#define IDC_SELECTAREA_SPIN 1485 -#define IDC_ACQUIRE_REL 1552 -#define IDC_ACQUIRE_ABS 1553 -#define IDC_EM_WELD 1584 -#define IDC_EM_W_THR_SPIN 1685 -#define IDC_SMOOTH_GRP1 1701 -#define IDC_SMOOTH_GRP2 1702 -#define IDC_SMOOTH_GRP3 1703 -#define IDC_SMOOTH_GRP4 1704 -#define IDC_SMOOTH_GRP5 1705 -#define IDC_SMOOTH_GRP6 1706 -#define IDC_SMOOTH_GRP7 1707 -#define IDC_SMOOTH_GRP8 1708 -#define IDC_SMOOTH_GRP9 1709 -#define IDC_SMOOTH_GRP10 1710 -#define IDC_SMOOTH_GRP11 1711 -#define IDC_SMOOTH_GRP12 1712 -#define IDC_SMOOTH_GRP13 1713 -#define IDC_SMOOTH_GRP14 1714 -#define IDC_SMOOTH_GRP15 1715 -#define IDC_SMOOTH_GRP16 1716 -#define IDC_SMOOTH_GRP17 1717 -#define IDC_SMOOTH_GRP18 1718 -#define IDC_SMOOTH_GRP19 1719 -#define IDC_SMOOTH_GRP20 1720 -#define IDC_SMOOTH_GRP21 1721 -#define IDC_SMOOTH_GRP22 1722 -#define IDC_SMOOTH_GRP23 1723 -#define IDC_SMOOTH_GRP24 1724 -#define IDC_SMOOTH_GRP25 1725 -#define IDC_SMOOTH_GRP26 1726 -#define IDC_SMOOTH_GRP27 1727 -#define IDC_SMOOTH_GRP28 1728 -#define IDC_SMOOTH_GRP29 1729 -#define IDC_SMOOTH_GRP30 1730 -#define IDC_SMOOTH_GRP31 1731 -#define IDC_SMOOTH_GRP32 1732 -#define IDC_EP_HOOPSON 1734 -#define IDC_EM_CLONE_NAME 1735 -#define IDC_EM_EXPLODE_NAMELABEL 1736 -#define IDC_ES_EXPLODE_NAMELABEL 1736 -#define IDC_EM_EXPLODE_NAME 1737 -#define IDC_ES_EXPLODE_NAME 1737 -#define IDC_EM_BEVEL 1738 -#define IDC_EP_BEVEL 1738 -#define IDC_EM_AE_SET 1739 -#define IDC_EM_AR_BACK 1740 -#define IDC_EM_AE_CLEAR 1741 -#define IDC_RADIO1 1741 -#define IDC_EM_AE_SETCLEAR 1742 -#define IDC_RADIO2 1742 -#define IDC_CUSTOM 1742 -#define IDC_RADIO3 1743 -#define IDC_UPDATE 1743 -#define IDC_RADIO4 1744 -#define IDC_SPLITMESH 1744 -#define IDC_NURBS_TXT_SRF 1746 -#define IDC_EM_WEIGHT 1749 -#define IDC_EM_WEIGHTSPIN 1750 -#define IDC_EM_WEIGHT_LABEL 1751 -#define IDC_DISP_CHAN 1752 -#define IDC_DISP_CHAN_SPIN 1753 -#define IDC_DISP_TEXMAP 1754 -#define IDC_DISP_VERTCOL 1755 -#define ID_VERSION 1756 -#define IDC_TESS_U2 1757 -#define IDC_TESS_V2 1758 -#define IDC_TILE_MAT 1759 -#define IDC_TILE_MAT_SPIN 1760 -#define IDC_TILE_ROT 1761 -#define IDC_TILE_ROT_SPIN 1762 -#define IDC_VERSION 1764 -#define IDC_TESS_RECALC 3012 -#define IDC_TESS_UPDATE_RENDER 3016 -#define IDC_TESS_UPDATE_MANUAL 3017 -#define IDC_TESS_UPDATE_ALWAYS 3018 -#define IDC_BOOLUNION 5010 -#define IDC_BOOLSUBTRACTION 5011 -#define IDC_BOOLINTERSECTION 5012 -#define IDC_CROSSINSERTCUR 5016 -#define IDC_FILLETCUR 5017 -#define IDC_CHAMFERCUR 5018 -#define IDS_DS_MOVE2 10004 -#define IDS_DS_SELECT 10007 -#define IDS_DS_CREATE 10008 -#define IDS_RB_EXTRUDE 30001 -#define IDS_RB_TAPER 30003 -#define IDS_RB_OBJECT 30004 -#define IDS_RB_EDITMESH 30009 -#define IDS_RB_VERTEX 30011 -#define IDS_RB_FACE 30012 -#define IDS_RB_EDGE 30013 -#define IDS_RB_CENTER 30014 -#define IDS_RB_APPARATUS 30015 -#define IDS_RB_EDITMESH_CLASS 30022 -#define IDS_RB_PARAMETERS 30028 -#define IDS_RB_ANGLE 30029 -#define IDS_RB_DIRECTION 30030 -#define IDS_RB_AMOUNT 30031 -#define IDS_RB_AMOUNT2 30032 -#define IDS_RB_CURVITURE 30033 -#define IDS_RB_AMPLITUDE 30034 -#define IDS_RB_WAVELEN 30035 -#define IDS_RB_PHASE 30036 -#define IDS_RB_DECAY 30037 -#define IDS_RB_FLEXIBILITY 30038 -#define IDS_RB_WIDTH 30039 -#define IDS_RB_HEIGHT 30040 -#define IDS_DB_EXTRUDE 30041 -#define IDS_RB_NONE 30137 -#define IDS_RB_RIPPLE 30155 -#define IDS_RB_RIPPLE_BINDING 30156 -#define IDS_RB_DELETEVERT 30211 -#define IDS_RB_DELETEFACE 30212 -#define IDS_RB_ADDVERTS 30213 -#define IDS_RB_ATTACHOBJECT 30214 -#define IDS_RB_FACECOLLAPSE 30215 -#define IDS_RB_MAKEPLANAR 30216 -#define IDS_RB_BUILDFACE 30217 -#define IDS_RB_HIDEFACE 30218 -#define IDS_RB_UNHIDEALLFACES 30219 -#define IDS_RB_EDGEVISIBLE 30220 -#define IDS_RB_EDGEINVISIBLE 30221 -#define IDS_RB_AUTOEDGE 30222 -#define IDS_RB_EDGEDIVIDE 30223 -#define IDS_RB_EDGETURN 30224 -#define IDS_RB_DELETEEDGE 30225 -#define IDS_RB_COLLAPSEEDGE 30226 -#define IDS_RB_CLONE 30227 -#define IDS_RB_TESSELLATE 30228 -#define IDS_RB_DELETEISOLATED 30229 -#define IDS_PW_PLANAR 30230 -#define IDS_PW_LATTICE 30231 -#define IDS_RB_DEFDEFORMATIONS 30270 -#define IDS_RB_DEFEDIT 30271 -#define IDS_RB_NODEXFORM 30276 -#define IDS_RB_NODEXFORM_CLASS 30277 -#define IDS_RB_XFORM_CLASS 30278 -#define IDS_RB_EDITSURFACE 30279 -#define IDS_RB_SETSMOOTHGROUP 30280 -#define IDS_RB_ASSIGNMATID 30281 -#define IDS_RB_FLIPNORMALS 30282 -#define IDS_RB_UNIFYNORMALS 30283 -#define IDS_RB_AUTOSMOOTH 30284 -#define IDS_RB_SELECTBYMATID 30285 -#define IDS_RB_SELECTBYSMOOTH 30286 -#define IDS_RB_SOT 30287 -#define IDS_RB_DEFLECTOR_CLASS 30288 -#define IDS_RB_HIDEVERT 30294 -#define IDS_RB_DEFSURFACE 30298 -#define IDS_RB_SCALE 30377 -#define IDS_RB_NOISE 30411 -#define IDS_RB_ROTATION2 30521 -#define IDS_RB_TWIST 30522 -#define IDS_RB_BENDMOD 30543 -#define IDS_RB_BEND2 30544 -#define IDS_RB_FROM 30545 -#define IDS_RB_TO 30546 -#define IDS_RB_BOMBOBJECT 30547 -#define IDS_RB_BOMB 30548 -#define IDS_RB_BOMBMOD 30549 -#define IDS_RB_BOMBBINDING 30550 -#define IDS_RB_CLUSTNODEMOD 30551 -#define IDS_RB_XFORM 30552 -#define IDS_RB_DEFLECTOR 30553 -#define IDS_RB_DEFLECTMOD 30554 -#define IDS_RB_DEFLECTORBINDING 30555 -#define IDS_RB_BOUNCE 30556 -#define IDS_RB_DISPMOD 30557 -#define IDS_RB_DISPLACE 30558 -#define IDS_RB_DISPLACEMOD 30559 -#define IDS_RB_DISPLACEBINDING 30560 -#define IDS_RB_SELECTDISPIMAGE 30561 -#define IDS_RB_SELECTIMAGE 30562 -#define IDS_RB_UTILE 30563 -#define IDS_RB_VTILE 30564 -#define IDS_RB_WTILE 30565 -#define IDS_RB_BLUR 30566 -#define IDS_RB_DOCREATENEWOBJECT 30567 -#define IDS_RB_EDITMESH2 30568 -#define IDS_RB_GRAVITY 30569 -#define IDS_RB_WIND 30570 -#define IDS_RB_GRAVITYMOD 30571 -#define IDS_RB_GRAVITYBINDING 30572 -#define IDS_RB_WINDMOD 30573 -#define IDS_RB_WINDBINDING 30574 -#define IDS_RB_TURBULENCE 30575 -#define IDS_RB_FREQUENCY 30576 -#define IDS_RB_MAPMOD 30577 -#define IDS_RB_UVWMAPPING 30578 -#define IDS_RB_UVWMAP 30579 -#define IDS_RB_NOISEMOD 30580 -#define IDS_RB_SEED 30581 -#define IDS_RB_FRACTAL 30582 -#define IDS_RB_ROUGH 30583 -#define IDS_RB_ITERATIONS 30584 -#define IDS_RB_OPTMOD 30585 -#define IDS_RB_OPTIMIZE 30586 -#define IDS_RB_FACETHRESHL1 30587 -#define IDS_RB_FACETHRESHL2 30588 -#define IDS_RB_EDGETHRESHL1 30589 -#define IDS_RB_EDGETHRESHL2 30590 -#define IDS_RB_BIASL1 30591 -#define IDS_RB_BIASL2 30592 -#define IDS_RB_EDITMESHMOD 30593 -#define IDS_RB_TWISTMOD 30594 -#define IDS_RB_TWIST2 30595 -#define IDS_RB_TWISTPLUGIN 30596 -#define IDS_RB_BIAS 30597 -#define IDS_RB_INCORRECTSTRING 30598 -#define IDS_RB_AUTHORIZATION 30599 -#define IDS_RB_TAPERMOD 30600 -#define IDS_RB_SYMMETRY 30601 -#define IDS_RB_MATMOD 30602 -#define IDS_RB_MATERIAL3 30603 -#define IDS_RB_MATERIALID 30604 -#define IDS_RB_MATERIAL4 30605 -#define IDS_RB_MATERIALID2 30606 -#define IDS_RB_SMOOTHMOD 30607 -#define IDS_RB_NORMALMOD 30608 -#define IDS_RB_SKEWMOD 30609 -#define IDS_RB_SKEW 30610 -#define IDS_RB_SMOOTH2 30611 -#define IDS_RB_WAVE 30612 -#define IDS_RB_WAVEMOD 30613 -#define IDS_RB_WAVEBINDING 30614 -#define IDS_RB_AMPLITUDE1 30615 -#define IDS_RB_AMPLITUDE2 30616 -#define IDS_RB_VOLSELECT 30617 -#define IDS_RB_THRESHOLD 30618 -#define IDS_RB_GIZMO 30619 -#define IDS_RB_NORMAL 30620 -#define IDS_RB_BEND_CLASS 30621 -#define IDS_RB_DISPLACE_CLASS 30622 -#define IDS_RB_VOLSELECT_CLASS 30623 -#define IDS_RB_SKEW_CLASS 30624 -#define IDS_RB_MATERIAL3_CLASS 30625 -#define IDS_RB_SMOOTH2_CLASS 30626 -#define IDS_RB_NORMAL_CLASS 30627 -#define IDS_TH_LATHE_CLASS 30628 -#define IDS_RB_EXPLODE 30629 -#define IDS_RB_COLLAPSE 30630 -#define IDS_RB_WELDVERTS 30631 -#define IDS_RB_TAPER_CLASS 30632 -#define IDS_RB_TWIST2_CLASS 30633 -#define IDS_RB_TWIST_CLASS 30634 -#define IDS_RB_BOMBOBJECT_CLASS 30635 -#define IDS_RB_BOMB_CLASS 30636 -#define IDS_RB_RIPPLE_CLASS 30637 -#define IDS_RB_WAVE_CLASS 30638 -#define IDS_RB_STRENGTH2 30646 -#define IDS_DS_MOVE 30647 -#define IDS_RB_FACESEL 30651 -#define IDS_RB_POLYGONSEL 30652 -#define IDS_RB_ELEMENTSEL 30653 -#define IDS_RB_NOVERTSTOWELD 30680 -#define IDS_RB_CHAOS 30681 -#define IDS_RB_DETONATION 30682 -#define IDS_RB_BOMBPARAMS 30683 -#define IDS_RB_EDITMESHTITLE 30684 -#define IDS_RB_DUPFACEWARNING 30685 -#define IDS_RB_NUMVERTSELP 30699 -#define IDS_RB_NUMFACESELP 30701 -#define IDS_RB_NUMEDGESELP 30703 -#define IDS_EM_BEVEL 30738 -#define IDS_EM_OUTLINE 30739 -#define IDS_ADV_DISP_APPROX_WARNING_TITLE 30740 -#define IDS_ADV_DISP_APPROX_WARNING 30741 -#define ID_UNWRAP_MOVE 40002 -#define ID_UNWRAP_ROTATE 40003 -#define ID_UNWRAP_SCALE 40004 -#define ID_UNWRAP 40005 -#define ID_UNWRAP_BREAK 40006 -#define ID_UNWRAP_WELD 40007 -#define ID_UNWRAP_WELDSELECTED 40008 -#define ID_UNWRAP_PAN 40010 -#define ID_UNWRAP_ZOOM 40011 -#define ID_UNWRAP_ZOOMREGION 40012 -#define ID_UNWRAP_EXTENT 40013 -#define ID_UNWRAP_MIRROR 40014 -#define IDS_TH_EDITSPLINE 40025 -#define IDS_TH_EDITSEGMENT 40026 -#define IDS_TH_EDITVERTEX 40027 -#define IDS_TH_SPLINE 40028 -#define IDS_TH_SEGMENT 40029 -#define IDS_TH_VERTEX 40030 -#define IDS_TH_EDITOBJECT 40031 -#define IDS_TH_EDITPATCH_CLASS 40032 -#define IDS_TH_EDITSPLINE_CLASS 40033 -#define IDS_RB_EXTRUDE_CLASS 40034 -#define IDS_RB_GRAVITY_CLASS 40035 -#define IDS_RB_WIND_CLASS 40036 -#define IDS_RB_UVWMAP_CLASS 40037 -#define IDS_RB_NOISE_CLASS 40038 -#define IDS_TH_CLOSESPLINE 40039 -#define IDS_RB_OPTIMIZE_CLASS 40040 -#define IDS_TH_DELETESPLINE 40041 -#define IDS_TH_NOVALIDSPLINESSEL 40042 -#define IDS_TH_NOSPLINESSEL 40043 -#define IDS_TH_VERTBREAK 40044 -#define IDS_TH_NOVALIDVERTSSEL 40045 -#define IDS_TH_SEGDELETE 40046 -#define IDS_TH_NOSEGSSEL 40047 -#define IDS_TH_DETACHSPLINE 40048 -#define IDS_TH_OUTLINE 40049 -#define IDS_TH_SEGDETACH 40050 -#define IDS_TH_SHAPE 40051 -#define IDS_TH_REFINE 40052 -#define IDS_TH_SEGBREAK 40053 -#define IDS_TH_VERTCONNECT 40054 -#define IDS_TH_VERTINSERT 40055 -#define IDS_TH_VERTWELD 40056 -#define IDS_TH_NOWELDPERFORMED 40057 -#define IDS_TH_SELECTONESPLINE 40058 -#define IDS_TH_MORETHANONESPLINESEL 40059 -#define IDS_TH_BOOLEAN 40060 -#define IDS_TH_UNION 40061 -#define IDS_TH_SUBTRACTION 40062 -#define IDS_TH_INTERSECTION 40063 -#define IDS_TH_BOOLWELDFAILED 40064 -#define IDS_TH_COINCIDENTVERTEX 40065 -#define IDS_TH_SPLINESMUSTOVERLAP 40066 -#define IDS_TH_SELECTCLOSEDSPLINE 40067 -#define IDS_TH_SPLINESELFINTERSECTS 40068 -#define IDS_TH_ATTACH 40069 -#define IDS_TH_CANHAVEONLYONESHAPE 40070 -#define IDS_TH_NOVERTSSEL 40071 -#define IDS_TH_VERTCHANGE 40072 -#define IDS_TH_SMOOTH 40073 -#define IDS_TH_CORNER 40074 -#define IDS_RB_RESETXFORM_CLASS 40075 -#define IDS_TH_BEZIER 40076 -#define IDS_TH_SEGCHANGE 40077 -#define IDS_TH_CURVE 40078 -#define IDS_TH_LINE 40079 -#define IDS_TH_VERTDELETE 40080 -#define IDS_TH_BEZIERCORNER 40081 -#define IDS_TH_AMOUNT 40082 -#define IDS_TH_EDITPATCH 40083 -#define IDS_TH_PATCH 40084 -#define IDS_TH_SEGMENTS 40085 -#define IDS_TH_PATCHDELETE 40086 -#define IDS_TH_NOPATCHESSEL 40087 -#define IDS_TH_MAKEFIRST 40160 -#define IDS_TH_EDITEDGE 40170 -#define IDS_TH_EDGE 40171 -#define IDS_TH_AUTOINTERIOR 40172 -#define IDS_TH_MANUALINTERIOR 40173 -#define IDS_TH_NOVALIDEDGESSEL 40174 -#define IDS_TH_PATCHADD 40175 -#define IDS_TH_EDGESUBDIVIDE 40176 -#define IDS_TH_PATCHSUBDIVIDE 40177 -#define IDS_TH_CREATELINE 40178 -#define IDS_TH_MIRROR_H 40179 -#define IDS_TH_MIRROR_V 40180 -#define IDS_TH_MIRROR_BOTH 40181 -#define IDS_TH_MIRROR 40182 -#define IDS_TH_PATCHCHANGE 40186 -#define IDS_TH_COPLANAR 40187 -#define IDS_TH_POLYCONNECT 40190 -#define IDS_TH_CONNECT_COINCIDENT 40191 -#define IDS_TH_CANHAVEONLYONEPATCH 40192 -#define IDS_TH_DETACHPATCH 40193 -#define IDS_TH_COPY_SPLINE 40196 -#define IDS_TH_COPY_SEGMENT 40197 -#define IDS_TH_SPLINECHANGE 40201 -#define IDS_TH_MIRRORSPLINE 40279 -#define IDS_TH_DEGREES 40308 -#define IDS_TH_AXIS 40309 -#define IDS_TH_LATHE 40310 -#define IDS_TH_VERTWELDRESULT 40316 -#define IDS_RB_RESETXFORM 40317 -#define IDS_RB_AFRMOD 40318 -#define IDS_RB_STARTPOINT 40319 -#define IDS_RB_ENDPOINT 40320 -#define IDS_RB_AFRPOINTS 40321 -#define IDS_AFR_FALLOFF 40322 -#define IDS_AFR_PINCH 40323 -#define IDS_AFR_BUBBLE 40324 -#define IDS_RB_TESSMOD 40325 -#define IDS_TESS_TENSION 40326 -#define IDS_RB_DELETEMOD 40327 -#define IDS_RB_MESHSELMOD 40328 -#define IDS_RB_FACEEXTRUDEMOD 40329 -#define IDS_RB_EXTRUDECENT 40330 -#define IDS_EXT_AMOUNT 40331 -#define IDS_EXT_SCALE 40332 -#define IDS_RB_UVWXFORMMOD 40333 -#define IDS_RB_UOFFSET 40334 -#define IDS_RB_VOFFSET 40335 -#define IDS_RB_WOFFSET 40336 -#define IDS_RB_MAXEDGE1 40337 -#define IDS_RB_MAXEDGE2 40338 -#define IDS_RB_CENTERPOINT 40339 -#define IDS_RB_MIRRORMOD 40340 -#define IDS_RB_MIRRORCENTER 40341 -#define IDS_RB_OFFSET 40342 -#define IDS_RB_SELVERTEX 40343 -#define IDS_RB_SELFACE 40344 -#define IDS_RB_SELEDGE 40345 -#define IDS_RB_SELOBJECT 40346 -#define IDS_RB_UNWRAPMOD 40347 -#define IDS_AP_SDELETEMOD 40348 -#define IDS_RB_RESETUVWS 40349 -#define IDS_RB_SETCHANNEL 40350 -#define IDS_RB_SHOULDRESET 40351 -#define IDS_RB_RESETUNWRAPUVWS 40352 -#define IDS_RB_LENGTH 40353 -#define IDS_SA_TRIANGLE 40354 -#define IDS_SA_POLYGON 40355 -#define IDS_SA_TRI_POLY_RESTORE 40356 -#define IDS_RB_SPIN 40357 -#define IDS_RB_FALLOFF 40358 -#define IDS_TH_PATCHMTLCHANGE 40359 -#define IDS_RB_MOVE 40360 -#define IDS_RB_ROTATE 40361 -#define IDS_RB_PAN 40362 -#define IDS_RB_ZOOM 40363 -#define IDS_RB_PICKMAP 40364 -#define IDS_RB_UPDATE 40365 -#define IDS_RB_ZOOMEXT 40366 -#define IDS_RB_ZOOMREG 40367 -#define IDS_RB_UVW 40368 -#define IDS_RB_PROP 40369 -#define IDS_RB_SHOWMAP 40370 -#define IDS_RB_DEFMODS 40371 -#define SPACEWARPS_FOR_BOTH 40372 -#define SPACEWARPS_FOR_PARTICLES 40373 -#define SW_TEST 40374 -#define IDS_EM_SELECTION 40375 -#define IDS_EM_POLY 40376 -#define IDS_EM_ELEMENT 40377 -#define IDS_EM_OBJECT_SEL 40378 -#define IDS_EM_WHICHVERTSEL 40379 -#define IDS_EM_WHICHEDGESEL 40380 -#define IDS_EM_WHICHFACESEL 40381 -#define IDS_EM_EDIT_GEOM 40382 -#define IDS_EM_SHAPE 40383 -#define IDS_EM_SELBYCOLOR 40384 -#define IDS_EM_VERTEXCOLOR 40385 -#define IDS_EM_SETVERTCOLOR 40386 -#define IDS_EM_CREATE_MESH 40387 -#define IDS_EM_NEWOBJECTNAME 40388 -#define IDS_MS_PARAMS 40389 -#define IDS_EM_FACE_DIVIDE 40390 -#define IDS_EM_SELECT_OPEN 40391 -#define IDS_EM_CREATECURVE 40392 -#define IDS_EM_DELETE_ISOVERTS 40393 -#define IDS_MS_AFFECTREGION 40394 -#define IDS_EM_ALIGN 40395 -#define IDS_EM_VERT_BREAK 40396 -#define IDS_EM_SLICE 40397 -#define IDS_EM_CUT 40398 -#define IDS_EM_DETACHFACES 40399 -#define IDS_EM_DETACHVERTS 40400 -#define IDS_EM_INHERIT_MATERIAL 40401 -#define IDS_EM_COMBINE_MATERIALS 40402 -#define IDS_EM_NOEDGESSELECTED 40403 -#define IDS_UVWX_CHANNEL 40404 -#define IDS_UVWX_MAPCHANNEL 40405 -#define IDS_UVWX_UFLIP 40406 -#define IDS_UVWX_VFLIP 40407 -#define IDS_UVWX_WFLIP 40408 -#define IDS_EM_FLIP_NORMAL 40409 -#define IDS_TH_SPLSEGSEL 40410 -#define IDS_TH_NUMSEGSELP 40411 -#define IDS_TH_NUMSPLINESEL 40412 -#define IDS_TH_NUMSPLINESELP 40413 -#define IDS_TH_SPLVERTSEL 40414 -#define IDS_TH_SPLINE_VERT_COUNT 40415 -#define IDS_TH_SELECTION 40416 -#define IDS_TH_OBJECT_SEL 40417 -#define IDS_TH_NUMVERTSEL 40418 -#define IDS_TH_NUMVERTSELP 40419 -#define IDS_TH_GEOMETRY 40420 -#define IDS_TH_MULTIATTACH 40421 -#define IDS_TH_NUMEDGESEL 40422 -#define IDS_TH_NUMEDGESELP 40423 -#define IDS_TH_NUMPATCHSEL 40424 -#define IDS_TH_NUMPATCHSELP 40425 -#define IDS_MS_USE_AR 40426 -#define IDS_TH_EXPLODE 40427 -#define IDS_TH_DIVIDE_SEGMENT 40428 -#define IDS_TH_REVERSE_SPLINE 40429 -#define IDS_TH_MULTIPLE_NODES 40430 -#define IDS_TH_CROSS_INSERT 40431 -#define IDS_TH_CROSS_NOT_IN_THRESHOLD 40432 -#define IDS_TH_EDGEDELETE 40433 -#define IDS_TH_NOEDGESSEL 40434 -#define IDS_TH_SEGMTLCHANGE 40435 -#define IDS_CT_DISPAPPROX_CLASS 40436 -#define IDS_CT_DISP_APPROX 40437 -#define IDS_CT_DISP_APPROX_CHANGE 40438 -#define IDS_CT_MESH_MESHER_CLASS 40439 -#define IDS_CT_MESH_MESHER 40440 -#define IDS_PW_NSPLINE 40441 -#define IDS_EM_CHAMFER 40442 -#define IDS_EM_BREAK 40445 -#define IDS_EM_DIVIDE 40446 -#define IDS_TH_OPEN 40447 -#define IDS_TH_CLOSED 40448 -#define IDS_EM_ATTACH_LIST 40449 -#define IDS_EM_DETACH 40450 -#define IDS_VS_MATID 40451 -#define IDS_VS_SMGROUP 40452 -#define IDS_TH_TRIM 40453 -#define IDS_TH_EXTEND 40454 -#define IDS_TH_FILLET 40455 -#define IDS_TH_CHAMFER 40456 -#define IDS_CHANGEWEIGHT 40457 -#define IDS_TH_PASTE_NAMED_SEL 40458 -#define IDS_TH_SURFACEPROPERTIES 40459 -#define IDS_PW_MOVEH 40460 -#define IDS_PW_MOVEV 40461 -#define IDS_PW_SCALEH 40462 -#define IDS_PW_SCALEV 40463 -#define IDS_PW_WELDSELECTED 40464 -#define IDS_PW_APPLYPLANAR 40465 -#define IDS_PW_FACEMODE 40466 -#define IDS_PW_UVW_VERT_EDIT 40467 -#define IDS_PW_UVW_EDIT 40468 -#define IDS_PW_SELECT_UVW 40469 -#define IDS_PW_RESET_UNWRAP 40470 -#define IDS_PW_SELECTRESTORE 40471 -#define IDS_PW_PLANARMAP 40472 -#define IDS_PW_POINT 40473 -#define IDS_PW_MOVE_UVW 40474 -#define IDS_PW_ID_ALLID 40475 -#define IDS_PW_UNWRAPVIEW 40476 -#define IDS_PW_DELETE_SELECTED 40477 -#define IDS_PW_HIDE_SELECTED 40478 -#define IDS_PW_UNHIDEALL 40479 -#define IDS_PW_FREEZE_SELECTED 40480 -#define IDS_PW_UNFREEZEALL 40481 -#define IDS_PW_ASSIGN_CONTROLLER 40482 -#define IDS_PW_ROTATE_UVW 40483 -#define IDS_PW_SCALE_UVW 40484 -#define IDS_PW_WELD_UVW 40485 -#define IDS_PW_LINECOLOR 40486 -#define IDS_RB_UNSUPPORTED_MAP_TYPE 40487 -#define IDS_MM_ACQ_MAPPING 40488 -#define IDS_PARAM_CHANGE 40489 -#define IDS_PW_UNDO_RESET 40490 -#define IDS_PW_UNDO_FIT 40491 -#define IDS_PW_MOUSE_CENTER 40492 -#define IDS_PW_MOUSE_ADD 40493 -#define IDS_PW_MOUSE_SUBTRACT 40494 -#define IDS_PW_MOUSE_CONSTRAIN 40495 -#define IDS_PW_MOUSE_SELECTTV 40496 -#define IDS_PW_MOUSE_SELECTTRI 40497 -#define IDS_PW_MOUSE_SELECTFACE 40498 -#define IDS_PW_CYCLE 40499 -#define IDS_PW_FUSE 40500 -#define IDS_PW_AUTOFIT 40501 -#define IDS_PW_BIND 40502 -#define IDS_PW_UNBIND 40503 -#define IDS_PW_SURFACEERROR 40504 -#define IDS_PW_VOLDATA 40505 -#define IDS_PW_ERROR 40506 -#define IDS_PW_INSTANCEERROR 40507 -#define IDC_STATIC -1 -#define IDC_EM_SEL_PT_TEXT 65535 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 200 -#define _APS_NEXT_COMMAND_VALUE 40002 -#define _APS_NEXT_CONTROL_VALUE 1765 -#define _APS_NEXT_SYMED_VALUE 107 -#endif -#endif diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_x.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_x.cur deleted file mode 100644 index 7172f0c494a4addf7d52b3745b6055ffba187ffa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmb7;ArgQ<37z^YNit}!w2 nNjLv?_upi$GU>qx_3S^S;ai@BI^=QO?)6f8^9Mr1w>*g#(^r6u diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_y.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/move_y.cur deleted file mode 100644 index 98bc661dc9ff664b1b723028bbfa0e0d2c411e83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaKmF%Ezr5CjKeVW*X?l$QQLex^^hv@o8xVqzsr7H*HZ07L>QK~KjVU;rk!x5)0` z>(P6Z@a<;yg}+L(af2p9n@X)*vpDf$e%|Jl|DmqSug}%&Sj_gZ)XFuB6E8;d72Pof BffE1# diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/outline.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/outline.cur deleted file mode 100644 index e00008a642ea128bb1859c4e8f94b39e7042b468..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZ8bI}UxpxS2Qq>)x0$U8=xkWFMbj(F_JvLLUoKC7SdO;oT=a1=c|LVet(iD!q@{Ui4^QF?f)0Cu diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/panhand.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/panhand.cur deleted file mode 100644 index 5237bb16805191a1dbc912d05816f9b8812102dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma*hu?@m75QX92xJW?}DjJHUq(ou>7=?n89mr@Y=~y8HAd!+H%HuhSl!}P6KHGO^ zSqCcuWeGVO4gt2n-dy5r!E1==7?XLIG$+4qSp!LKMGL3o19yAdvvcnSyPI9%co{|h l3eT_{Z7wB^)tOW!(UV8@gCLbwPpY;1e)}k-Zu#rf{Q_P%e7OJs diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselm.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselm.bmp deleted file mode 100644 index 24b084d30a477613f7d13458c1c96ac6c6b5a85c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2422 zcmeH{F%H5o3`LE^!qk-`a1M5^)44~>k#d9ZV>^jkT7k`mh=}t^q-Xo5?fo%dh{ue0 z!%Uc0%oCjvG4x#i*tihkN6R7$A|$1hu+{^NQfH9`5fZbmzQHU<@X>2kzVQ?M{CO8X zcleHB>NFDA8{g3(zNw$e$VDb^(;@z<`kt(!+DX@Le#cc5^Rxjby=XVzcu*vlMj>$n zd1yC(Rlk%gQAk_u<~N6>P#Z_lWi;>|Umu=r(e1N<{WzbYZ*L&X&+;rvmg5G(e6^-F zkOeQUZ*-im7d>@6o2~e+WBg7*@vZvWhwsAHa6D M|NI?O%$C=mC#Tl+iU0rr diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselt.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/patselt.bmp deleted file mode 100644 index cba637850ede0452cc3bf0bdbebd165883e626d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2424 zcmds%J#ND=424;sKw)I-)Fbp9-FufzRlVg1-VDK)$ZBZu%~Fz&qNKVCoV7|sJ{2oZh7u$E98_zeMPxQoZTN8J^EJHaNwo9rcO?a^z$bof zqTxkPq6^>D95OzH!SSvO-_+vx#06x$Yf$GBW-Rz{&e`*A)1X?ya=o9UUl{VlM;H5eP}#8V>w{=OziaR0c7LSFqZUAGqjodiz8_Q|m`V diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/pick_color.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/pick_color.cur deleted file mode 100644 index 2d93d58346e949457a5e8352c01ec0bf45bff3eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmbWxyA8rH6ouhqTu?-UE}}rfB_$h#k=P)XC|JvgL6Q+DDG-MrQ$`fzTAv?B*RrLB zf>ILeT8ALDlJ+3d5rOfkT<7Uzdm8?kB>FelVudAQ=Iz2}#0d#Mia*S*ftwfHaK(sw XZ$CQwxwBslLBtsax&JoQCeG9w2J3$Y diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/region.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/region.cur deleted file mode 100644 index 88b853822d82cbafa3221d03933c2e4e0071a424..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZvXu?@mN3`Jk)QbnQw(U6FWk_jM42xSaLU;+{rV1}E7P$9;kf;JPx{5wEMA!j{* z+h^;1Fd!n!AeJp67y)yk61j+E;e6zs{Jfbd85U5s;t6(@o?xHCV+m_f)Nnh)R`ITc zrX^Run{99!@1oKnxlm~fui-fPK61UN75a%)pH^mLsb``%k*Z%CS?bXby3}UJW@X&d Mpr-t<=R2dj7p!4&WB>pF diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/scale_x.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/scale_x.cur deleted file mode 100644 index c5036000d4fb027c202e618c0d2d510ec985608a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmaiuu?>JQ3*^0L$)5=!P!Px&8iX#u z19&?A#LEdDtG;D3dp5J(96OmwDjH?Xv39CH$8uQvG`*F2zjg&9RFQAUKPIgA|JA{Y`0&;Ds-L zE_Z3t;t diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/segrefin.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/segrefin.cur deleted file mode 100644 index ea86df9f32ea3b2cf303981f287d196927740b96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)!K?=e!5Ji8)g$p4GFqk4F6y^_Qm(-m)O^NvegKtecTWHS diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/selmask.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/selmask.bmp deleted file mode 100644 index c2937689d52fc749f2bba42159aba4d6bc83af15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 830 zcmd7NK@P$o5Cza7y@b1Ny@Vxk@0svs=mAWR;KB&jz4j2EVMQhWS6ZLsO1#YJ!Q&lXd3W_5p@@9*$EF*Mx* XJ(G^66GvwBb89~POEm8x59J5z-OFn?z8f&6NAll3*K_3KuE-L>`ZidZ*)q zzP?ZIN$~^x#Qeqlz1T#Y==iF$RE`~rnE_L8SBG3Wx zxX>vw07S@)?D5NMgbV-?G9!DrQ&ABL7DL#%MdP5N5DFGU*ttb+tUlYMy3z<1=Y0=- twn+`q2o~qB{j4frg}ZA%s|r|f$M^Pv@9o8&2G932c>dJ6-=#{MOmtGzXV&OA#7U&KGKkZPTvT_!)^)8ud3&-NT|7nMQj&$;iHjK~<> hlBFR$uU^=_zzB~ZEM|B?)-H9=RFpMRL;n7XeE>17(MkXS diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.cpp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.cpp deleted file mode 100644 index 62eecad20..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.cpp +++ /dev/null @@ -1 +0,0 @@ -#include "stdafx.h" diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.h b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.h deleted file mode 100644 index 9045b4b53..000000000 --- a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/stdafx.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma warning (disable : 4786) - -#include -#include -#include -#include -#include -#include -#include -#include -#undef min -#undef max - diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/thselcur.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/thselcur.cur deleted file mode 100644 index ad5bfd8be8ed19385cf85acb3599db15c3c7afe0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)0F%Ezr5Gyd~=H|@k=nK@JsW0&@zR3j>lX@p65*F;G^h%F#fQ5ngKqJ)~paswg z zbLXS;!H01xJY{_NX(Wd%ZBg^;5Z&THFD@XLxy4JMMCg~eq}QLOdH;TxNP8As?jOL# z8kh(!HaJ04F}h5KO)PcxcEtz0e%ah5F3GWzu!sBI;7+|>+M@D)zF1iYFfO=QU}l>^ zk3fT$gMXb#Uf|L^#E#3BTug=^<4Q!is7@}M2sx3K_HQbn2rki*ZIoJ@)+duHvTf2UsBpmDZiMstEA&nBg2eyc};#f;xDX6%)6{cHR1^MNd1NSgz~OQ zrc5%s3S~`O_qk{^u^KUsUh6N2Uxem!eu0ksg3N*BqWOg-sMXtiGpTxH9)G7@vzFlb z7{|DrSf}+e_zT}Zxlm_*p;m7PxiIfS+@$jEebfAE8mua?s)OZwakS?z4djG+v_iaX z?riBwJSMoT;3u0^rw{uJ>omDcsZQJKzDaS-j{pV|?HiWOiT+}55O8@BY|TL0F4~1% zuVeB)j*x13FJ0H6XB<&Klfb-D;rEftlBr<}K8}u=rE|m+Y}SQw5m4M9;Igk{0-oSJ eyny|o&U0swQ79N77cBLOg&9D*e{24i@9Dp+ajH@P diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_option_mask.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_option_mask.bmp deleted file mode 100644 index 2d7f35097c418cd20787bcbdff92598eb62bd8f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4318 zcmd6pK~lpo3`GsY-W-DsmtfC5I05S(tta6OzCrl!%MNLalXNEOL~Sf9axCdfk@NBS z^O{WG8sBuiKc|$%pVEu(e^tGOi{X@#{^@iIrcu*$KA*)=4F0EKV5UnyZXq+t8c}HC zsiYofWH^b!XundS-gPL7F5_($OlZrFv{cR;ZlP?(o)eJ*X%m! zV}i!+Yb?gaHPrFO`*d`Z+bqk%!^?BnDx~t09JXj)6UZ{*c-zi+@fA;@lZ9& zw1NtScy)Z)S1Q17CtMR7Zud%Tlf`9C+0bk#1G3DKoMi)Bt>_^V_W>l*MTUioQf&9Q z2`P0wM)@}_K;4PAk5cX6zj1MCm=@Wj+d6fuhyu?LNM7432 zy&UpAlA}&4iJiq|+j_a_FW_~o{z6;vMTen6+IzHTz0|sK{kUEZhYOiAAU-QDaG7+O z`}>P`o%EM#L`}qhHxu_0pGS0?W7P{)@<)AKyk@y8##Z!PC~$FqL6ZCrF4C~?;rebA z3}L7vPT!-8da-^Pm%?$b^QHKt;j2W%_X={Y46x`XqoJj#7y z==&2p^!1~L16^;#5OvsIq$X<_0I?dx%;_(d=j^j$Q|dxuh1|<(wz9}+G-KGS*L+?? zf%tIKGp%5nEDIwZQe*I1o^fJJl>_Py_AA1jg=MWrhL}*j=Ph5m&;IMWkXZ2xws^uA diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_transform.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_transform.bmp deleted file mode 100644 index 1fe4b0b09410cd798d5aee9b267f86edc2dd80ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7078 zcmds+zi#735XNalFxlw@1h@lIq)nMeFaiR)CdezeaxDWwb~`G-0cNMx*QLsHxQhz| zd6g6gtPBWXe%~xfkt-c+A=l6&YyZsd4!QH~H@jN@^6OteWG26p{>1ms@3L%8ev!>g z|8v`Jl~Jt!mh5jQDf?g z-c1v%d|uMq*Rb5VTV->e7o5}dBzep-)aS{rj{Un=^>tM6y4K+DVtW;0PJ1mC?I$OL zdeXwwN`ue2daF6FKRWjbjmIz2EEbFJ%aXE*dYDvk)?L;7gQ~9&3cY>#kp%>vt2_(B zb2VSxNUq(=%x}VA+^dTFCt20&1>o|dRANs1(<4LlIGb-&_vxg;Gyqna zNGbr$13(AFOjtRZ4|V-x1;sRfAOPOQ0)*rbX;do*b&VR!z&;I^x$wNqi@ES5y%e6g zbA{{~JyXh!%_X({Qv^)!A^|T`*vqMY0#EhO(=^22!C;YCye6MMo__7k6W;HXFO`6w zxrY!8p6|n#9?uU&z4?PqcZ97vY~6cCtf^=-}yFJhMFF>F9n!SR5v{Y%Xu|TR52)_1p&%5H@-mL8&2U z;Rzul13Q9(OjLMV4=J8{Kr?u51 z1GZ{elK~w67C#No$Nl8-Tmz+ZGoWljXzFIAD(BB3p2Pj~6hDXYwzp>!Hl)@aEvBm=lCycIlqK5=*t1l>N~ zLWQ6J`dfvd#kKe>o^Oe_=5CbWVdo*$g=cT?Onzd#5Lu7#dlAngf{rLTprWj|a_C}M zawdK&c(UL1`)A+~#CZttI1g=gK0>h!$d?{Z9I|W=!60lP8=mOn`L>|+y8Y9i+&`P< z`M!;_+hLrw1*G_0H9JxsV&@$xk{$E_mNmv`-1pW{ZI~wYcK=U@WXz`=YxV9-tEHsd zg+Q%z8&lN{;R{F;e$pew)6PTaVWiD@JKHTjB)BW^u7Vi_-jw)R73V!PM3c?Bb6rR0(FF+5!KUpl_;PayR3=mS5iF#c$k zQx;rO8XCew{_(R?m*#d{l!Dtlq;-ddE~+*H_t=QEE-OPB+3)XfdBRujZ`=K`zj7Vg zI$a)~SLp#I!Ox}uo|RqMTI~d$slh2@sdr~Sqx}tf0v-ZdmjC}`WS^yC|6d_j`0f6$ n(&a|b^Brm<=gjP zpEtLk>c8mw_2ahf!VlXg+ke!$CrkITZTf64F9G!$Zm+MeLKYtWY>x*cef19$^T*@R zmv%4#wjGqCT^Os$tmc&%-rXzO*Hrlv! z$wa0uwl~CrN?6)0SnT1I>0~6%JUt!JT^CS}tEdS;qVxXXQr^k%Ku*1ba2YDb7}V7pRcmMnq}-YkuG%E_Yb$#|d*(6Z1ZjSk1*5LQT!lX>if#e!N!ToH}o@w|Y)r4(y3T=_GxBxKQ3uHLSo(#sWa#w|R4>n07 zOY;^-)gowZJi@^FQD@Gvia;b&;P$8c;??Ma2lvG!42lm~VL5d%p~4fNJZLzbbyUpE z71=?q-Q>?wiWx}R*=(FmQ`g4zbh}pa7qDm|>w~76}CF1M*GCxOG zzD@Mhj7+}&}TrEQ165O$-NYnA4-`Wq#L%(wto3D4G;%)`+8$b2Z?#wM|Za&-q!Q9_^7y8?4LazQ{vf&Z9(# zXY3VDlc^1U8O2(^N4%aaxED; z57IMl%!>VG( O3o1l@5C+aslgDoivO9tR diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_verts.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_verts.bmp deleted file mode 100644 index 0ac1b442f11459e2c25d346f913aaa020d0c2b27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4318 zcmcgvL2lzV6lIG6EN{l0m8Uo8rk5xJB%495(WMLoC5R5J`L|F1{-h-SK>G_mzy7Gy0{DY^C+C09 z-wQcv8l~{BnkE5S9IEH%XCS|b@~>j#5kC0iDK<_^6iiH78{>d!Ej(K57y~p6a6w$L ztIUsCv)y`ew%nkgO%Y;jYk9-SsKnZQJ+s1JoM3enaHZO?61w35Bt7!%&Vqj ztG3D+P8+E20FWiN%?xKu+qRr{9j%c(gj>gSoI6Hu688o}eErJq2i$BD&uDSI2+e_l z{#GWRy<3ojA=usPm1A_IMAc$Gu8!u;rNm$#>ZtGzEJIz79G8!o{-JeGxWcqAXi#n zqU!}dEib`FzeXB8r`=D-xw^n8f8S@r+<_#&aNa||P`ShnWPvcQM^+Z=Q-uMd-}|)Q zJm1^@_kfh^Rep79Uob^(!fxq>*NOB+O&%gkGc0Zzx+x>z;8XWDi? z->kXuhkoe-@*Mc33tm+S<$81hX?4zLoUSi+EX0vt3^l49e6rbWP?!$7Kz>_v`J8ou zko3#-P2#P=d{4*ux^zF^OL5;iDKb)DIJuYoQmY1eG*v-^y{H!27lba0{&mVUuTl3gUad}qHDT^=6RPk%n#K^Nah zA(ZDR=2#S@T(~A{Q}$3&wYIXf6Mx!H3oMHWnw<58%<(yKI-uSe!RNBwKk}sx z_2mhES#KWjyrEfKRV~OLtHpq~usgpj=qg-lDpzpIFDG<~o%lr@gFA|2s)JwtL0sWI z2K#CESzCkk!HVb`q`AAv{0*N+xP9bH9pa7+{lXPB@C%WC8FCa&!#CuNunKf^y5RYK ziP3_a{`E%4P21tcF8YGeT@xuv1+x0Aie_!9yq(6iZjfDF7yivo*>?L5i5Mk z{9Zs40=6}FPR0&D032#?!592e>Wm=X2W1Udx_LV;dO9e`b5eW<$U{cZ%k<*AYO#G0 z&_!N^d(Nv*g$y&9K~?WxX=V<94nKnr!>ao0!2SMDs^$Z0$UN4YUo zmO}9Y0UM1oYmlKh)~}wWA27C0@#cJx4C$8tk(bh!U7)lSpUZ@%P;T&5;e3ruyPprd z-Wio0yR$k_ojZR78#k7zE);774|d187-d6D#IL>3M(f>1DPdWoI5d zsf3GRw>PFr$EXr=W90pvmuz9ESp0mHrOC$mh5K?>;YNz)+ z&G;z&Z}6gG<7Yh{xQOFfd35Z&{NsKpUi4C;zmbRHr(@MW!)so=v+`H3OnCBxCNhNK zxZ{887jF!CsbAtam&SP>;*5{d-{wW{mW~1$w5d8IH1<>k<>`XW*e_{k;Cx{~?D??S zjVT@4nVsr6ws-w(2kvFP*xGC17~+Z-DkNC3psP`XOHwh$sf&$A@1vAM@AHLKNwupv zp2E%b>^huB^h-R~XsJK%8bcOKc3M~wLYpg0@L{_>v#`-*pSonK!uJy|jh}1YuhkI+`h$2v4A_G7ZNix z9l0HaC`TSBorKx98Mw=so{eyGJ0PQ;gWB>pF diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view.bmp deleted file mode 100644 index cb147efdbb90fc350a659b8b52fd7488d6571fbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4318 zcmcIn!HVQI5LLo}eHd^W7Wx-*$v=e9;5lrV&)6K@(4=$-r~?bqVZp!DhlQPkVgDfC z;6sCa2q^EBOt0OZo$<_&>Tb!UQcG3OuS)iBzyI@-QTY??&-nfFqcIiwAIy!8|1sKC znKega@HNL{?$F}WoK7e7G$j3+lz4?7J{&?L(!>}G5wZBS_)(hNiA|<34ZbG$VDSx` zElvAP@a&g5M;FpyeQQdNyAawmpKuse%W--_x$bqlYm2>J6-PaH z&$YmXbcubYi`cwQ^PV7)4!%%x9d*FAvfV*y+4}%#qrKL_wFNGPNGMaktBnsWa2Z10 zM)$z{{0AFm!`V1#xnY>-k6-RLkas({t`ecYgU1*BIYhD@xOk<*m_pX+ZZ{8kQ~055 zxxH`H5Lzp|xjXzwpaACIW2KAESsTExkkAnqDHWGE!k=f^12Y&m!47PV@ya-m3<<0{ zdpYoi-094xn*A|^a(lpPA=uW&J^m>L^ayBdh^ui?LZHAXA##Dqba81w5uv&N?E6+! z&$!$H9K{99Coc7@$I-z%m%l-mh6y;6Di*0Xzy&1>4#uhR z!WWLta8WH+89A@x3zooox+Lk%CG|W)|FZL_0a;?%BSR2Xum_gk2`)wLA|7#i9yKU2 zR`j?;eIfn~kUIH7%@6Q{m@FP)s#}-3&Xhw7I)4Wj{`m=9bYskTRu;Ih?n3DP>bff^ zFpVn;phCX*gNqp#;)4(??1Bm;-nyhLI3TIcA5n=g0lbt0cyd0By51kU0Ay!UcHNh* zdnkbkahcjK&o2YG^aL&)O(6 zrgl1a^ucrACarA1Wv=5dSPRdr*K%~R zq{*k@%6NG{x*DIapwYzn*y9=hj-oS-ZR_3kFrZN~7=<2DKdT b)Bbhu)4J}Fu+ZD<@Rj7WsQrI#*5dLXPM{3A diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view_mask.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrap_view_mask.bmp deleted file mode 100644 index daeb83feaa90de4d2a70e9b0dd5a21543ff915cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4318 zcmcJR%XJe$5Jd+Ldl3d3l3-6BM8MjiITB)+48*;!s^=q(sjENL^?CKW>GhMHa`10qH^Xq(} zF`R2kU*kvvnE7nvSU;Ao9yTnvj{6#{N;I?uDw;Bo|kyNzg|Lz zuJT-*?nu3AMHX0NB$PU|GLd}g;$qCzI?Ar1GB|PBGYSu!0?*J$mF!a@K(8anPAr;_ zx_G+GTC)y}sJL^?S(eukDUE9};?ft}Y%yTr^uRI=*@)x7E%yr-a!_r|8Iaw$T-vH; zwq?S=_P7*N(aSM10Xpqz$FG0lpGbzm7v;dk@V)lp0w5aaa~_xQfd__@`Z53`FIb$# zk#O{SaB)Lz5^x#6HIM59#%M$r)=->vwX`^97Fj5)csMUyjC6l+v9K8=T+y&4uM{}A zuwYqEwWbRdiBIyxPI4a-Tcje{S#Q3etNOqt^>i*SoHM3f3oc?zT)9cR-7(Sa78jfr zD*iCMgD?MbkBBvtsUng+VFzu3G(oXQr5F?4F)kavn7aAxo3}mGl3t8=yItISzU*;H z6uW~*lfjp}_eGYZE~n^1h0~Pe99o1gU=Uo`T}tIzy)OdB_>eDT9Shs26RntdL~+(PcpN^>qpgHnU<0sC4IMSPk>*cIasw M>(a-KPCycszZf3Nm;e9( diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrapto.bmp b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/unwrapto.bmp deleted file mode 100644 index 34ff35d31c69c24c2d747818722f315e9b28a4b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4318 zcmbtX!HOd{5LJSqeF$*|0?sYhz2qN;(4^;(Fu#$b49!Z1fP5H`4g>n7IV@}r4f6;2 zhCUe7hXv)mQoHSL&tyECvMsqJwN!fbs-*t)kAHqpA|FwH!0(rDmD-^GMy;g%PxOEK zzWk(ND)vg@tM>a+p~PSH^z?+99a+9AXa2(vA2y*d#G6mXiw(Q;A1Zl8g zsk8ULM0W9J(G!=tDHDa5@Ta{q<^e6-5?gL=Zhow5{1?H9jdQNTKpN(uQ&yi#9U^-n zx*(PT-rlVg#t+_x;Ld<9PoSKyKQ+JnXIq+g(Q$LeF7@fDviG#qOY>VLanXw45Qvaa z0Rk!LX@i!ZLipLirGO5F|TU9wjtRNF~x-} z*1zaKHi%!$wuUrj=c&eIm--HVgd@2dN`elzp7gg6DgDI7wu}hWc3{=801mPPgcfkw zro#yrFLXHeJB~K1zoi0pM%eP*y_Sv;t$ln3E=I#d;4%eX88790eX9_4bd;{}Rfali z(-IJHnfB3lv@d{u_t?p#JG0w|u->-VO$avHwBu$f=m}84IoIPt5Fjq$(QMk{=*Au$ zzT}G#0trU?%RUQTTpkeg?CwALJ{r-j?Vi(!%P_;mB`hjoRn~`N*rF?Z7QN`W6DuJA>vmGA{iT#ZW$NDv4xF{hM69#59) z9GCO_QY9gbA49^My|HV~0bJ#b=v~_Q)I01Fy4Bs6t}?%AoKJ|P7?P0(%3P-V4G>9<;1ampo6gc#uY3* zyn(RTG{%8bI-(ocTJ4BSeH+1_j103}50i|}J@MsbT(0BGtNA4(%-@k;PX0?K!Re!s z4fhEDMRQMk&`KDvQ(ciSRd2m_CPj-LH-InX7mgoOHOcfC0YXWe&R_Ow#Kj}SoUccc zoeQS;|9s(jv_)!Q7<^TcP@eKjLb65P#a3;D(5Jh-X_)U06D~%(4Zqkl zqB#y2YC+vvbH9`&>Q0+OBaB|(|Rk!U6Rn!}PW$Sb^A zO!);mEGqNSDw;IvCEtAAd4!u+;;c0?2B8TVi(=jdUyKG>(z*xhVMVYl)9)EBRpSzF z#66A%28PxB=lrF6QZaBFFWq0bn8=V&y^hOxPD_RSLjMyN>dY_Hyi9@lWJ(y1FBIlo z2+g@V?_%un{xZm{4|kZPmUWT?&zF2bg3+$3fC~BITb{SXh4{ez8<>O)WW05mY|xKg z_gB~9R)Jd`EJxEq&eliI>$r3foJTF``+&@b1rZmf1y2s`s23cTxbU2Yfc)<`r_b-Z zV)1P)?*VW?;x;C}VEqi_Dhs|;z+i}$J8yE5T#X}FtV(qa%X^3CX^YuEb~!!qC4hk> zE6j_t`|iABt{n|CbzBUyjm zchY1t$!yETcNcNEL4b=~geM&juz}BU0PC6lHYOY)xCqHO4<|9VWm4iG`elL3gh;s( wBfyJV#^Y5QiLz4g4c@0c=dk5{x)7+0ot5+TXI+=d^8ILd+ACz;|}x8*na4w#LBsK1%%zAxL$Zbc?0qF>1W zudpH8T=;>@k*p8o`H?ivpLshc!;<7xG?khcH;F#DP|@+ERZJsy@h&gpI-=(j)nIxb diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/vinsert.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/vinsert.cur deleted file mode 100644 index b45008ce79ca218e167871de83e8d19a45fe27f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcma)#!3n}Z5JmqQ4|_{M5N}y;9__&GMD0URu>|j~rKAH(NUR{DhafKb{-_|{oZ-#i znZL{cJs3C#Sd1_=z!1PhXap~e@)aL>H{VL~Z5R6Mf5}%s)(7%caxuQ28E>uenQ+z= z&gzO>7h#SYV5vRbkr(Q*5PwBGBV#VYmug2ATk>@8G^W+=QOD3UG1Q`L;-GBWarxl6 iOn9BI$pguj3?gmUOu1K{83kuIZIUlx3@Yh|?#(Ayqj?bk diff --git a/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/weld.cur b/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/weld.cur deleted file mode 100644 index c985ba7433762b35e6ed130ded1786588c42f895..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmZ`zF$%&!5S%+wSOgLqD