00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #pragma once
00015
00016 #include "iFnPub.h"
00017 #include "mnmesh.h"
00018
00019 class Modifier;
00020 class IParamBlock2;
00021 class IObjParam;
00022
00023 #define EPOLY_MOD_INTERFACE Interface_ID(0x405e217d, 0x49c2abc)
00024 #define GetEPolyModInterface(cd) (EPolyMod *)(cd)->GetInterface(EPOLY_MOD_INTERFACE)
00025
00026 #define EPOLY_MOD13_INTERFACE Interface_ID(0x1a4cc8f2, 0x71682518)
00027 #define GetEPolyMod13Interface(cd) (EPolyMod13 *)(cd)->GetInterface(EPOLY_MOD13_INTERFACE)
00028
00029
00030 enum ePolyModSelLevel { EPM_SL_OBJECT, EPM_SL_VERTEX, EPM_SL_EDGE,
00031 EPM_SL_BORDER, EPM_SL_FACE, EPM_SL_ELEMENT, EPM_SL_CURRENT };
00032
00033
00034 const int meshSelLevel[] = { MNM_SL_OBJECT, MNM_SL_VERTEX, MNM_SL_EDGE, MNM_SL_EDGE,
00035 MNM_SL_FACE, MNM_SL_FACE, MNM_SL_CURRENT };
00036
00037
00038 enum epolyModParameters {
00039
00040 epm_animation_mode,
00041 epm_show_cage,
00042
00043 epm_by_vertex,
00044 epm_ignore_backfacing,
00045 epm_stack_selection,
00046
00047 epm_ss_use,
00048 epm_ss_edist_use,
00049 epm_ss_edist,
00050 epm_ss_affect_back,
00051 epm_ss_falloff,
00052 epm_ss_pinch,
00053 epm_ss_bubble,
00054
00055 epm_current_operation,
00056
00057 epm_world_to_object_transform,
00058
00059 epm_constrain_type,
00060
00061 epm_split,
00062
00063 epm_ms_smoothness,
00064 epm_ms_sep_smooth,
00065 epm_ms_sep_mat,
00066
00067 epm_tess_type,
00068 epm_tess_tension,
00069
00070 epm_bridge_taper,
00071 epm_bridge_bias,
00072
00073 epm_align_type,
00074 epm_align_plane_normal,
00075 epm_align_plane_offset,
00076
00077 epm_delete_isolated_verts,
00078
00079 epm_weld_vertex_threshold,
00080
00081 epm_chamfer_vertex,
00082
00083 epm_extrude_vertex_width,
00084 epm_extrude_vertex_height,
00085
00086 epm_connect_edge_segments,
00087
00088 epm_weld_edge_threshold,
00089
00090 epm_extrude_edge_height,
00091 epm_extrude_edge_width,
00092
00093 epm_chamfer_edge,
00094
00095 epm_extrude_face_type,
00096 epm_extrude_face_height,
00097
00098 epm_bevel_type,
00099 epm_bevel_height,
00100 epm_bevel_outline,
00101
00102 epm_inset_type,
00103 epm_inset,
00104
00105 epm_outline,
00106
00107 epm_hinge_angle,
00108 epm_hinge_base,
00109 epm_hinge_dir,
00110 epm_hinge_segments,
00111
00112 epm_extrude_spline_node,
00113 epm_extrude_spline_segments,
00114 epm_extrude_spline_taper,
00115 epm_extrude_spline_taper_curve,
00116 epm_extrude_spline_twist,
00117 epm_extrude_spline_rotation,
00118 epm_extrude_spline_align,
00119
00120 epm_autosmooth_threshold,
00121 epm_smooth_group_set,
00122 epm_smooth_group_clear,
00123
00124 epm_material,
00125
00126 epm_material_selby,
00127 epm_material_selby_clear,
00128
00129 epm_smoother_selby,
00130 epm_smoother_selby_clear,
00131
00132 epm_clone_to_element,
00133
00134 epm_bridge_segments,
00135 epm_bridge_smooth_thresh,
00136 epm_bridge_target_1,
00137 epm_bridge_target_2,
00138 epm_bridge_twist_1,
00139 epm_bridge_twist_2,
00140 epm_bridge_selected,
00141
00142 epm_preserve_maps,
00143
00144 epm_relax_amount,
00145 epm_relax_iters,
00146 epm_relax_hold_boundary,
00147 epm_relax_hold_outer,
00148
00149 epm_select_by_angle,
00150 epm_select_angle,
00151
00152
00153 epm_ss_lock,
00154 epm_paintsel_value, epm_paintsel_size, epm_paintsel_strength,
00155 epm_paintdeform_value, epm_paintdeform_size, epm_paintdeform_strength,
00156 epm_paintdeform_axis,
00157
00158 epm_reserved1,
00159
00160 epm_reserved2,
00161 epm_reserved3,
00162 epm_reserved4,
00163 epm_reserved5,
00164
00165 epm_connect_edge_pinch,
00166 epm_connect_edge_slide,
00167 epm_loop_edge_sel,
00168 epm_ring_edge_sel,
00169 epm_remove_edge_ctrl,
00170 epm_cage_color,
00171 epm_selected_cage_color,
00172 epm_cage_color_changed,
00173 epm_selected_cage_color_changed,
00174 epm_chamfer_vertex_open,
00175 epm_chamfer_edge_open,
00176 epm_bridge_adjacent,
00177 epm_bridge_reverse_triangle,
00178 epm_break_vertex_distance,
00179
00180 epm_paintsel_mode,
00181 epm_paintdeform_mode,
00182
00183 epm_select_mode,
00184
00185
00186
00187
00188 };
00189
00190
00191
00192 #define epm_edge_chamfer_segments epm_reserved1
00193
00194
00195 enum epolyModButtonOp { ep_op_null,
00196 ep_op_hide_vertex, ep_op_hide_face,
00197 ep_op_unhide_vertex, ep_op_unhide_face,
00198 ep_op_hide_unsel_vertex, ep_op_hide_unsel_face,
00199 ep_op_ns_copy, ep_op_ns_paste, ep_op_cap,
00200 ep_op_delete_vertex, ep_op_delete_face, ep_op_detach_vertex, ep_op_detach_face,
00201 ep_op_split, ep_op_break, ep_op_collapse_vertex, ep_op_collapse_edge,
00202 ep_op_collapse_face, ep_op_reset_plane, ep_op_slice, ep_op_slice_face,
00203 ep_op_weld_vertex, ep_op_weld_edge, ep_op_create_shape, ep_op_make_planar, ep_op_remove_iso_verts,
00204 ep_op_meshsmooth, ep_op_tessellate, ep_op_retriangulate,
00205 ep_op_flip_face, ep_op_flip_element, ep_op_bevel, ep_op_chamfer_vertex,
00206 ep_op_chamfer_edge, ep_op_cut,
00207 ep_op_sel_grow, ep_op_sel_shrink, ep_op_inset, ep_op_extrude_vertex,
00208 ep_op_extrude_edge, ep_op_extrude_face,
00209 ep_op_extrude_along_spline, ep_op_connect_edge, ep_op_connect_vertex,
00210 ep_op_hinge_from_edge, ep_op_select_ring, ep_op_select_loop,
00211 ep_op_remove_iso_map_verts, ep_op_remove_vertex, ep_op_remove_edge, ep_op_outline,
00212 ep_op_toggle_shaded_faces,
00213 ep_op_transform, ep_op_delete_edge, ep_op_unused,
00214 ep_op_create, ep_op_align,
00215 ep_op_attach, ep_op_target_weld_vertex, ep_op_target_weld_edge,
00216 ep_op_edit_triangulation, ep_op_create_edge,
00217 ep_op_clone_vertex, ep_op_clone_edge, ep_op_clone_face,
00218 ep_op_insert_vertex_edge, ep_op_insert_vertex_face,
00219 ep_op_autosmooth, ep_op_smooth, ep_op_set_material,
00220 ep_op_select_by_smooth, ep_op_select_by_material, ep_op_get_stack_selection,
00221 ep_op_bridge_border, ep_op_bridge_polygon, ep_op_make_planar_x, ep_op_make_planar_y,
00222 ep_op_make_planar_z, ep_op_turn_edge, ep_op_relax, ep_op_paint_deform,
00223 ep_op_bridge_edge, ep_op_preserve_uv_settings
00224 };
00225
00226
00227 enum epolyModCommandMode { ep_mode_create_vertex, ep_mode_create_edge,
00228 ep_mode_create_face, ep_mode_divide_edge, ep_mode_divide_face,
00229 ep_mode_extrude_vertex, ep_mode_extrude_edge, ep_mode_extrude_face,
00230 ep_mode_chamfer_vertex, ep_mode_chamfer_edge, ep_mode_bevel,
00231 ep_mode_sliceplane, ep_mode_cut, ep_mode_weld, ep_mode_edit_tri,
00232 ep_mode_inset_face, ep_mode_quickslice, ep_mode_hinge_from_edge,
00233 ep_mode_pick_hinge, ep_mode_outline, ep_mode_bridge_border,
00234 ep_mode_bridge_polygon, ep_mode_pick_bridge_1, ep_mode_pick_bridge_2,
00235 ep_mode_turn_edge, ep_mode_bridge_edge,
00237 ep_mode_edit_ss
00238 };
00239
00240
00241 enum epolyModPickMode { ep_mode_attach, ep_mode_pick_shape };
00242
00243
00244 enum epolyModMethods {
00245 epmod_get_sel_level, epmod_get_mn_sel_level, epmod_set_sel_level,
00246 epmod_get_operation, epmod_set_operation, epmod_local_data_changed,
00247 epmod_refresh_screen, epmod_commit, epmod_commit_unless_animating,
00248 epmod_commit_and_repeat, epmod_cancel_operation, epmod_convert_selection, epmod_get_selection,
00249 epmod_set_selection, epmod_select, epmod_set_primary_node,
00250 epmod_toggle_command_mode, epmod_enter_command_mode, epmod_enter_pick_mode,
00251 epmod_get_command_mode, epmod_get_pick_mode,
00252 epmod_popup_dialog, epmod_button_op, epmod_repeat_last, epmod_in_slice_mode,
00253 epmod_reset_slice_plane, epmod_get_slice_plane_tm, epmod_get_slice_plane, epmod_set_slice_plane,
00254 epmod_create_vertex, epmod_create_face, epmod_create_edge, epmod_set_diagonal,
00255 epmod_cut, epmod_target_weld_vertex, epmod_target_weld_edge, epmod_attach_node,
00256 epmod_attach_nodes, epmod_detach_to_object, epmod_create_shape,
00257 epmod_bridge_borders, epmod_bridge_polygons, epmod_set_bridge_node, epmod_get_bridge_node,
00258 epmod_ready_to_bridge_selected,epmod_get_preserve_map, epmod_set_preserve_map,
00259 epmod_turn_diagonal,
00260
00261
00262 epmod_get_num_vertices, epmod_get_vertex, epmod_get_vertex_face_count, epmod_get_vertex_face,
00263 epmod_get_vertex_edge_count, epmod_get_vertex_edge, epmod_get_num_edges, epmod_get_edge_vertex,
00264 epmod_get_edge_face, epmod_get_num_faces, epmod_get_face_degree, epmod_get_face_vertex,
00265 epmod_get_face_edge, epmod_get_face_diagonal, epmod_get_face_material, epmod_get_face_smoothing_group,
00266 epmod_get_num_map_channels, epmod_get_map_channel_active,
00267 epmod_get_num_map_vertices, epmod_get_map_vertex, epmod_get_map_face_vertex,
00268
00269 epmod_get_face_normal, epmod_get_face_center, epmod_get_face_area, epmod_get_open_edges,
00270 epmod_get_verts_by_flag, epmod_get_edges_by_flag, epmod_get_faces_by_flag,
00271 epmod_set_vertex_flags, epmod_set_edge_flags, epmod_set_face_flags,
00272 epmod_get_vertex_flags, epmod_get_edge_flags, epmod_get_face_flags,
00273 epmod_get_verts_using_edge, epmod_get_edges_using_vert, epmod_get_faces_using_edge,
00274 epmod_get_elements_using_face, epmod_get_faces_using_vert, epmod_get_verts_using_face,
00275 epmod_set_vert,
00276
00277 epmod_move_selection, epmod_move_slicer, epmod_rotate_selection, epmod_rotate_slicer,
00278 epmod_scale_selection, epmod_scale_slicer,
00279
00280 epmod_list_operations, epmod_set_hinge_edge, epmod_get_hinge_edge,
00281 epmod_bridge_edges,
00282
00283 epmod_in_slice, epmod_show_operation_dialog, epmod_showing_operation_dialog,
00284 epmod_close_operation_dialog, epmod_get_primary_node, epmod_get_node_tm, epmod_set_cut_end,
00285 epmod_get_last_cut_end, epmod_clear_last_cut_end, epmod_cut_cancel, epmod_divide_edge,
00286 epmod_divide_face,epmod_ring_sel, epmod_loop_sel,epmod_convert_selection_to_border,
00287 epmod_paintdeform_commit, epmod_paintdeform_cancel,
00288
00289 epmod_matid_floater,epmod_matid_floatervisible,
00290 epmod_smgrp_floater,epmod_smgrp_floatervisible
00291
00292 };
00293
00295
00298
00299 #pragma warning(push)
00300 #pragma warning(disable:4100)
00301 class EPolyMod : public FPMixinInterface {
00302 public:
00303 #pragma warning(push)
00304 #pragma warning(disable:4238)
00305 BEGIN_FUNCTION_MAP
00306 FN_0(epmod_get_sel_level, TYPE_ENUM, GetEPolySelLevel);
00307 FN_0(epmod_get_mn_sel_level, TYPE_ENUM, GetMNSelLevel);
00308 VFN_1(epmod_set_sel_level, SetEPolySelLevel, TYPE_ENUM);
00309
00310 FN_3(epmod_convert_selection, TYPE_INT, EpModConvertSelection, TYPE_ENUM, TYPE_ENUM, TYPE_bool);
00311
00312 FN_0(epmod_get_operation, TYPE_ENUM, GetPolyOperationID);
00313 VFN_1(epmod_set_operation, EpModSetOperation, TYPE_ENUM);
00314 VFN_1(epmod_popup_dialog, EpModPopupDialog, TYPE_ENUM);
00315 VFN_1(epmod_button_op, EpModButtonOp, TYPE_ENUM);
00316 VFN_0(epmod_repeat_last, EpModRepeatLast);
00317
00318 VFNT_0(epmod_commit, EpModCommit);
00319 VFNT_0(epmod_commit_unless_animating, EpModCommitUnlessAnimating);
00320 VFNT_0(epmod_commit_and_repeat, EpModCommitAndRepeat);
00321 VFN_0(epmod_cancel_operation, EpModCancel);
00322
00323 FN_2(epmod_get_selection, TYPE_BITARRAY, EpModGetSelection, TYPE_ENUM, TYPE_INODE);
00324 FN_3(epmod_set_selection, TYPE_bool, EpModSetSelection, TYPE_ENUM, TYPE_BITARRAY_BR, TYPE_INODE);
00325 FN_5(epmod_select, TYPE_bool, EpModSelect, TYPE_ENUM, TYPE_BITARRAY_BR, TYPE_bool, TYPE_bool, TYPE_INODE);
00326
00327 VFN_1(epmod_set_primary_node, EpModSetPrimaryNode, TYPE_INODE);
00328
00329 VFN_1(epmod_toggle_command_mode, EpModToggleCommandMode, TYPE_ENUM);
00330 VFN_1(epmod_enter_command_mode, EpModEnterCommandMode, TYPE_ENUM);
00331 FN_0(epmod_get_command_mode, TYPE_ENUM, EpModGetCommandMode);
00332 VFN_1(epmod_enter_pick_mode, EpModEnterPickMode, TYPE_ENUM);
00333 FN_0(epmod_get_pick_mode, TYPE_ENUM, EpModGetPickMode);
00334
00335
00336 VFNT_4(epmod_move_selection, EpModMoveSelection, TYPE_POINT3_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR, TYPE_BOOL);
00337 VFNT_4(epmod_rotate_selection, EpModRotateSelection, TYPE_QUAT_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR, TYPE_BOOL);
00338 VFNT_4(epmod_scale_selection, EpModScaleSelection, TYPE_POINT3_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR, TYPE_BOOL);
00339
00340 VFNT_3(epmod_move_slicer, EpModMoveSlicePlane, TYPE_POINT3_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR);
00341 VFNT_4(epmod_rotate_slicer, EpModRotateSlicePlane, TYPE_QUAT_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR, TYPE_BOOL);
00342 VFNT_4(epmod_scale_slicer, EpModScaleSlicePlane, TYPE_POINT3_BR, TYPE_MATRIX3_BR, TYPE_MATRIX3_BR, TYPE_BOOL);
00343
00344
00345 FN_0(epmod_in_slice_mode, TYPE_bool, EpInSliceMode);
00346 VFN_0(epmod_reset_slice_plane, EpResetSlicePlane);
00347 FNT_0(epmod_get_slice_plane_tm, TYPE_MATRIX3_BV, EpGetSlicePlaneTM);
00348 VFNT_2(epmod_get_slice_plane, EpGetSlicePlane, TYPE_POINT3_BR, TYPE_POINT3_BR);
00349 VFNT_2(epmod_set_slice_plane, EpSetSlicePlane, TYPE_POINT3_BR, TYPE_POINT3_BR);
00350
00351 FN_2(epmod_create_vertex, TYPE_INDEX, EpModCreateVertex, TYPE_POINT3, TYPE_INODE);
00352 FN_2(epmod_create_face, TYPE_INDEX, EpModCreateFace, TYPE_INDEX_TAB, TYPE_INODE);
00353 FN_3(epmod_create_edge, TYPE_INDEX, EpModCreateEdge, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00354 VFN_3(epmod_set_diagonal, EpModSetDiagonal, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00355 VFN_5(epmod_cut, EpModCut, TYPE_ENUM, TYPE_INDEX, TYPE_POINT3, TYPE_POINT3, TYPE_INODE);
00356 VFN_3(epmod_target_weld_vertex, EpModWeldVerts, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00357 VFN_3(epmod_target_weld_edge, EpModWeldEdges, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00358
00359 VFNT_2(epmod_attach_node, EpModAttach, TYPE_INODE, TYPE_INODE);
00360 VFNT_2(epmod_attach_nodes, EpModMultiAttach, TYPE_INODE_TAB_BR, TYPE_INODE);
00361
00362 VFNT_1(epmod_detach_to_object, EpModDetachToObject, TYPE_TSTR_BR);
00363 VFNT_1(epmod_create_shape, EpModCreateShape, TYPE_TSTR_BR);
00364
00365 VFN_3(epmod_set_hinge_edge, EpModSetHingeEdge, TYPE_INDEX, TYPE_MATRIX3, TYPE_INODE);
00366 FN_1 (epmod_get_hinge_edge, TYPE_INDEX, EpModGetHingeEdge, TYPE_INODE);
00367 VFN_3(epmod_bridge_borders, EpModBridgeBorders, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00368 VFN_3(epmod_bridge_polygons, EpModBridgePolygons, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00369 FN_0(epmod_get_bridge_node, TYPE_INODE, EpModGetBridgeNode);
00370 VFN_1(epmod_set_bridge_node, EpModSetBridgeNode, TYPE_INODE);
00371 FN_0(epmod_ready_to_bridge_selected, TYPE_bool, EpModReadyToBridgeSelected);
00372
00373 FN_1(epmod_get_preserve_map, TYPE_bool, EpModGetPreserveMap, TYPE_INT);
00374 VFN_2(epmod_set_preserve_map, EpModSetPreserveMap, TYPE_INT, TYPE_bool);
00375
00376
00377 VFN_3(epmod_turn_diagonal, EpModTurnDiagonal, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00378
00379
00380 FN_1 (epmod_get_num_vertices, TYPE_INT, EpMeshGetNumVertices, TYPE_INODE);
00381 FN_2 (epmod_get_vertex, TYPE_POINT3_BV, EpMeshGetVertex, TYPE_INDEX, TYPE_INODE);
00382 FN_2 (epmod_get_vertex_face_count, TYPE_INT, EpMeshGetVertexFaceCount, TYPE_INDEX, TYPE_INODE);
00383 FN_3 (epmod_get_vertex_face, TYPE_INDEX, EpMeshGetVertexFace, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00384 FN_2 (epmod_get_vertex_edge_count, TYPE_INT, EpMeshGetVertexEdgeCount, TYPE_INDEX, TYPE_INODE);
00385 FN_3 (epmod_get_vertex_edge, TYPE_INDEX, EpMeshGetVertexEdge, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00386
00387 FN_1 (epmod_get_num_edges, TYPE_INT, EpMeshGetNumEdges, TYPE_INODE);
00388 FN_3 (epmod_get_edge_vertex, TYPE_INDEX, EpMeshGetEdgeVertex, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00389 FN_3 (epmod_get_edge_face, TYPE_INDEX, EpMeshGetEdgeFace, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00390
00391 FN_1 (epmod_get_num_faces, TYPE_INT, EpMeshGetNumFaces, TYPE_INODE);
00392 FN_2 (epmod_get_face_degree, TYPE_INT, EpMeshGetFaceDegree, TYPE_INDEX, TYPE_INODE);
00393 FN_3 (epmod_get_face_vertex, TYPE_INDEX, EpMeshGetFaceVertex, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00394 FN_3 (epmod_get_face_edge, TYPE_INDEX, EpMeshGetFaceEdge, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00395 FN_4 (epmod_get_face_diagonal, TYPE_INDEX, EpMeshGetFaceDiagonal, TYPE_INDEX, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00396 FN_2 (epmod_get_face_material, TYPE_INDEX, EpMeshGetFaceMaterial, TYPE_INDEX, TYPE_INODE);
00397 FN_2 (epmod_get_face_smoothing_group, TYPE_DWORD, EpMeshGetFaceSmoothingGroup, TYPE_INDEX, TYPE_INODE);
00398
00399 FN_1 (epmod_get_num_map_channels, TYPE_INT, EpMeshGetNumMapChannels, TYPE_INODE);
00400 FN_2 (epmod_get_map_channel_active, TYPE_bool, EpMeshGetMapChannelActive, TYPE_INT, TYPE_INODE);
00401 FN_2 (epmod_get_num_map_vertices, TYPE_INT, EpMeshGetNumMapVertices, TYPE_INT, TYPE_INODE);
00402 FN_3 (epmod_get_map_vertex, TYPE_POINT3_BV, EpMeshGetMapVertex, TYPE_INT, TYPE_INDEX, TYPE_INODE);
00403 FN_4 (epmod_get_map_face_vertex, TYPE_INDEX, EpMeshGetMapFaceVertex, TYPE_INT, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00404
00405 VFN_1 (epmod_list_operations, EpModListOperations, TYPE_INODE);
00406
00407 VFN_1 (epmod_local_data_changed, EpModLocalDataChanged, TYPE_DWORD);
00408 VFN_0 (epmod_refresh_screen, EpModRefreshScreen);
00409 FN_0 (epmod_in_slice, TYPE_bool, EpInSlice);
00410 FN_0 (epmod_show_operation_dialog, TYPE_bool, EpModShowOperationDialog);
00411 FN_0 (epmod_showing_operation_dialog, TYPE_bool, EpModShowingOperationDialog);
00412 VFN_0 (epmod_close_operation_dialog, EpModCloseOperationDialog);
00413 FN_0(epmod_get_primary_node, TYPE_INODE, EpModGetPrimaryNode);
00414 FNT_1(epmod_get_node_tm, TYPE_MATRIX3_BV, EpModGetNodeTM_FPS, TYPE_INODE);
00415 VFN_2(epmod_set_cut_end, EpModSetCutEnd, TYPE_POINT3, TYPE_INODE);
00416 FN_0 (epmod_get_last_cut_end, TYPE_INDEX, EpModGetLastCutEnd);
00417 VFN_0 (epmod_clear_last_cut_end, EpModClearLastCutEnd);
00418 VFN_1 (epmod_cut_cancel, EpModCutCancel, TYPE_INODE);
00419 VFN_3 (epmod_divide_edge, EpModDivideEdge, TYPE_INDEX, TYPE_FLOAT, TYPE_INODE);
00420 VFN_3 (epmod_divide_face, EpModDivideFace, TYPE_INDEX, TYPE_FLOAT_TAB, TYPE_INODE);
00421
00422
00423 VFN_3(epmod_bridge_edges, EpModBridgeEdges, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00424 VFN_3(epmod_ring_sel, EpModSetRingShift, TYPE_INT, TYPE_bool, TYPE_bool);
00425 VFN_3(epmod_loop_sel, EpModSetLoopShift, TYPE_INT, TYPE_bool, TYPE_bool);
00426 FN_2(epmod_convert_selection_to_border, TYPE_INT, EpModConvertSelectionToBorder, TYPE_ENUM, TYPE_ENUM);
00427 VFN_0(epmod_paintdeform_commit,EpModPaintDeformCommit);
00428 VFN_0(epmod_paintdeform_cancel,EpModPaintDeformCancel);
00429
00430
00431 FN_2 ( epmod_get_face_normal, TYPE_POINT3_BV, EPMeshGetFaceNormal, TYPE_INDEX, TYPE_INODE );
00432 FN_2 ( epmod_get_face_center, TYPE_POINT3_BV, EPMeshGetFaceCenter, TYPE_INDEX, TYPE_INODE );
00433 FN_2 ( epmod_get_face_area, TYPE_FLOAT, EPMeshGetFaceArea, TYPE_INDEX, TYPE_INODE );
00434 FN_1 ( epmod_get_open_edges, TYPE_BITARRAY, EPMeshGetOpenEdges, TYPE_INODE );
00435 FN_4 ( epmod_get_verts_by_flag, TYPE_bool, EPMeshGetVertsByFlag, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_INODE );
00436 FN_4 ( epmod_get_edges_by_flag, TYPE_bool, EPMeshGetEdgesByFlag, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_INODE );
00437 FN_4 ( epmod_get_faces_by_flag, TYPE_bool, EPMeshGetFacesByFlag, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_INODE );
00438 VFN_5 ( epmod_set_vertex_flags, EPMeshSetVertexFlags, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_bool, TYPE_INODE );
00439 VFN_5 ( epmod_set_edge_flags, EPMeshSetEdgeFlags, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_bool, TYPE_INODE );
00440 VFN_5 ( epmod_set_face_flags, EPMeshSetFaceFlags, TYPE_BITARRAY_BR, TYPE_DWORD, TYPE_DWORD, TYPE_bool, TYPE_INODE );
00441 FN_2 ( epmod_get_vertex_flags, TYPE_INT, EPMeshGetVertexFlags, TYPE_INDEX, TYPE_INODE );
00442 FN_2 ( epmod_get_edge_flags, TYPE_INT, EPMeshGetEdgeFlags, TYPE_INDEX, TYPE_INODE );
00443 FN_2 ( epmod_get_face_flags, TYPE_INT, EPMeshGetFaceFlags, TYPE_INDEX, TYPE_INODE );
00444 VFN_3 ( epmod_get_verts_using_edge, EPMeshGetVertsUsingEdge, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00445 VFN_3 ( epmod_get_edges_using_vert, EPMeshGetEdgesUsingVert, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00446 VFN_3 ( epmod_get_faces_using_edge, EPMeshGetFacesUsingEdge, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00447 VFN_4 ( epmod_get_elements_using_face, EPMeshGetElementsUsingFace, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00448 VFN_3 ( epmod_get_faces_using_vert, EPMeshGetFacesUsingVert, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00449 VFN_3 ( epmod_get_verts_using_face, EPMeshGetVertsUsingFace, TYPE_BITARRAY_BR, TYPE_BITARRAY_BR, TYPE_INODE );
00450 VFN_3 ( epmod_set_vert, EPMeshSetVert, TYPE_BITARRAY_BR, TYPE_POINT3_BR, TYPE_INODE );
00451
00452 VFN_0(epmod_smgrp_floater, SmGrpFloater);
00453 FN_0(epmod_smgrp_floatervisible,TYPE_BOOL, SmGrpFloaterVisible);
00454
00455 VFN_0(epmod_matid_floater, MatIDFloater);
00456 FN_0(epmod_matid_floatervisible,TYPE_BOOL, MatIDFloaterVisible);
00457
00458 END_FUNCTION_MAP
00459 #pragma warning(pop)
00460
00464 FPInterfaceDesc *GetDesc ();
00465
00470 virtual int GetEPolySelLevel()=0;
00471
00475 virtual int GetMNSelLevel()=0;
00476
00481 virtual void SetEPolySelLevel (int sl)=0;
00482
00498 virtual int EpModConvertSelection (int epSelLevelFrom, int epSelLevelTo, bool requireAll) { return 0; }
00499
00504 virtual int GetPolyOperationID () { return ep_op_null; }
00505
00510 virtual IParamBlock2 *getParamBlock () { return NULL; }
00511
00515 virtual MapBitArray GetPreserveMapSettings () const { return MapBitArray(true, false); }
00516
00520 virtual void SetPreserveMapSettings (const MapBitArray & mapSettings) { }
00521
00527 virtual void EpModSetPreserveMap (int mapChannel, bool preserve) { }
00528
00534 virtual bool EpModGetPreserveMap (int mapChannel) { return (mapChannel>0); }
00535
00539 virtual void InvalidateDistanceCache () { }
00540
00545 virtual void InvalidateSoftSelectionCache () { }
00546
00551 virtual void EpModSetOperation (int opcode) { }
00552
00556 virtual void EpModPopupDialog (int opcode) { EpModSetOperation (opcode); EpModShowOperationDialog(); }
00557
00561 virtual void EpModButtonOp (int opcode) { }
00562
00568 virtual void EpModLocalDataChanged (DWORD parts) { }
00569
00573 virtual void EpModRefreshScreen () { }
00574
00579 virtual void EpModCommitUnlessAnimating (TimeValue t) { }
00580
00584 virtual void EpModCommit (TimeValue t) { }
00585
00590 virtual void EpModCommitAndRepeat (TimeValue t) { }
00591
00595 virtual void EpModCancel () { }
00596
00602 virtual void EpModToggleCommandMode (int mode) { }
00603
00608 virtual void EpModEnterCommandMode (int mode) { }
00609
00614 virtual void EpModEnterPickMode (int mode) { }
00615
00621 virtual int EpModGetCommandMode () { return -1; }
00622
00628 virtual int EpModGetPickMode () { return -1; }
00629
00637 virtual BitArray *EpModGetSelection (int meshSelLevel, INode *pNode=NULL) { return NULL; }
00638
00646 virtual bool EpModSetSelection (int meshSelLevel, BitArray & selection, INode *pNode=NULL) { return false; }
00647
00657 virtual bool EpModSelect (int meshSelLevel, BitArray & selection, bool invert=false, bool select=true, INode *pNode=NULL) { return false; }
00658
00670 virtual void SetHitLevelOverride (DWORD hlo) { }
00671
00676 virtual void ClearHitLevelOverride () { }
00677
00684 virtual DWORD GetHitLevelOverride () { return 0x0; }
00685
00698 virtual DWORD CurrentHitLevel (int *selByVert=NULL) { return 0x0; }
00699
00713 virtual void SetHitTestResult (bool ignoreNew=false) { }
00714
00719 virtual void ClearHitTestResult () { }
00720
00730 virtual void SetDisplayLevelOverride (DWORD dlo) { }
00731
00736 virtual void ClearDisplayLevelOverride () { }
00737
00743 virtual DWORD GetDisplayLevelOverride () { return 0x0; }
00744
00750 virtual void ForceIgnoreBackfacing (bool force) { }
00751
00756 virtual bool GetForceIgnoreBackfacing () { return false; }
00757
00768 virtual void EpModMoveSelection (Point3 &val, Matrix3 &partm, Matrix3 &tmAxis, BOOL localOrigin, TimeValue t) { }
00769
00780 virtual void EpModRotateSelection (Quat &val, Matrix3 &partm, Matrix3 &tmAxis, BOOL localOrigin, TimeValue t) { }
00781
00792 virtual void EpModScaleSelection (Point3 &val, Matrix3 &partm, Matrix3 &tmAxis, BOOL localOrigin, TimeValue t) { }
00793
00801 virtual void EpModMoveSlicePlane (Point3 &val, Matrix3 &partm, Matrix3 &tmAxis, TimeValue t) { }
00802
00811 virtual void EpModRotateSlicePlane (Quat &val, Matrix3 &partm, Matrix3 &tmAxis, BOOL localOrigin, TimeValue t) { }
00812
00822 virtual void EpModScaleSlicePlane (Point3 &val, Matrix3 &partm, Matrix3 &tmAxis, BOOL localOrigin, TimeValue t) { }
00823
00827 virtual void EpResetSlicePlane () { }
00828
00832 virtual Matrix3 EpGetSlicePlaneTM (TimeValue t) { return Matrix3(true); }
00833
00837 virtual void EpGetSlicePlane (Point3 & planeNormal, Point3 & planeCenter, TimeValue t) { }
00838
00842 virtual void EpSetSlicePlane (Point3 & planeNormal, Point3 & planeCenter, TimeValue t) { }
00843
00848 virtual bool EpInSliceMode () { return false; }
00849
00853 virtual bool EpInSlice () { return false; }
00854
00858 virtual Modifier* GetModifier ()=0;
00859
00863 virtual IObjParam* EpModGetIP() { return NULL; }
00864
00884 virtual HWND GetDlgHandle(int paramPanelID) { return NULL; }
00885
00891 virtual void UpdateAlignParameters (TimeValue t) { }
00892
00897 virtual void UpdateCache(TimeValue t) { }
00898
00904 virtual bool EpModShowOperationDialog () { return false; }
00905
00910 virtual bool EpModShowingOperationDialog () { return false; }
00911
00915 virtual void EpModCloseOperationDialog () { }
00916
00924 virtual void EpModRepeatLast () { }
00925
00930 virtual INode *EpModGetPrimaryNode () { return NULL; }
00931
00936 virtual void EpModSetPrimaryNode (INode *node) { }
00937
00949 virtual Matrix3 EpModGetNodeTM (TimeValue t, INode *node=NULL) { return Matrix3(1); }
00950
00951
00952
00953
00954
00955
00956 Matrix3 EpModGetNodeTM_FPS (INode *node=NULL, TimeValue t=0) { return EpModGetNodeTM(t,node); }
00957
00967 virtual int EpModCreateVertex (Point3 p, INode *pNode=NULL) { return 0; }
00968
00978 virtual int EpModCreateFace (Tab<int> *vertex, INode *pNode=NULL) { return 0; }
00979
00992 virtual int EpModCreateEdge (int v1, int v2, INode *pNode=NULL) { return 0; }
00993
01006 virtual void EpModSetDiagonal (int v1, int v2, INode *pNode=NULL) { }
01007
01025 virtual void EpModCut (int startLevel, int startIndex, Point3 startPoint, Point3 normal, INode *pNode=NULL) { }
01026
01035 virtual void EpModSetCutEnd (Point3 endPoint, INode *pNode=NULL) { }
01036
01044 virtual int EpModGetLastCutEnd () { return -1; }
01045
01049 virtual void EpModClearLastCutEnd () { }
01050
01055 virtual void EpModCutCancel (INode *pNode=NULL) { }
01056
01069 virtual void EpModDivideEdge (int edge, float prop, INode *pNode=NULL) { }
01070
01083 virtual void EpModDivideFace (int face, Tab<float> *bary, INode *pNode=NULL) { }
01084
01096 virtual void EpModWeldVerts (int v1, int v2, INode *pNode=NULL) { }
01097
01110 virtual void EpModWeldEdges (int e1, int e2, INode *pNode=NULL) { }
01111
01124 virtual void EpModAttach (INode *node, INode *pNode=NULL, TimeValue t=0) { }
01125
01138 virtual void EpModMultiAttach (Tab<INode *> & nodeTab, INode *pNode=NULL, TimeValue t=0) { }
01139
01145 virtual void EpModDetachToObject (MSTR & newObjectName, TimeValue t) { }
01146
01153 virtual void EpModCreateShape (MSTR & shapeObjectName, TimeValue t) { }
01154
01167 virtual void EpModSetHingeEdge (int edge, Matrix3 modContextTM, INode *pNode=NULL) { }
01168
01177 virtual int EpModGetHingeEdge (INode *pNode) { return -1; }
01178
01188 virtual void EpModBridgeBorders (int edge1, int edge2, INode *pNode=NULL) { }
01189
01199 virtual void EpModBridgePolygons (int face1, int face2, INode *pNode=NULL) { }
01200
01204 virtual void EpModSetBridgeNode (INode *pNode) { }
01205
01209 virtual INode *EpModGetBridgeNode () { return NULL; }
01210
01214 virtual bool EpModReadyToBridgeSelected () { return false; }
01215
01223 virtual void EpModTurnDiagonal (int face, int diag, INode *pNode=NULL) { }
01224
01225
01234 virtual void EpModListOperations (INode *pNode=NULL) { }
01235
01236
01245 virtual MNMesh *EpModGetMesh (INode *pNode=NULL) { return NULL; }
01246
01255 virtual MNMesh *EpModGetOutputMesh (INode *pNode=NULL) { return NULL; }
01256
01266 virtual int EpMeshGetNumVertices (INode *pNode=NULL) { return 0; }
01267
01278 virtual Point3 EpMeshGetVertex (int vertIndex, INode *pNode=NULL) { return Point3(0,0,0); }
01279
01290 virtual int EpMeshGetVertexFaceCount (int vertIndex, INode *pNode=NULL) { return 0; }
01291
01303 virtual int EpMeshGetVertexFace (int vertIndex, int whichFace, INode *pNode=NULL) { return 0; }
01304
01315 virtual int EpMeshGetVertexEdgeCount (int vertIndex, INode *pNode=NULL) { return 0; }
01316
01328 virtual int EpMeshGetVertexEdge (int vertIndex, int whichEdge, INode *pNode=NULL) { return 0; }
01329
01339 virtual int EpMeshGetNumEdges (INode *pNode=NULL) { return 0; }
01340
01352 virtual int EpMeshGetEdgeVertex (int edgeIndex, int end, INode *pNode=NULL) { return 0; }
01353
01366 virtual int EpMeshGetEdgeFace (int edgeIndex, int side, INode *pNode=NULL) { return 0; }
01367
01377 virtual int EpMeshGetNumFaces(INode *pNode=NULL) { return 0; }
01378
01389 virtual int EpMeshGetFaceDegree (int faceIndex, INode *pNode=NULL) { return 0; }
01390
01403 virtual int EpMeshGetFaceVertex (int faceIndex, int corner, INode *pNode=NULL) { return 0; }
01404
01417 virtual int EpMeshGetFaceEdge (int faceIndex, int side, INode *pNode=NULL) { return 0; }
01418
01434 virtual int EpMeshGetFaceDiagonal (int faceIndex, int diagonal, int end, INode *pNode=NULL) { return 0; }
01435
01446 virtual int EpMeshGetFaceMaterial (int faceIndex, INode *pNode=NULL) { return 0; }
01447
01458 virtual DWORD EpMeshGetFaceSmoothingGroup (int faceIndex, INode *pNode=NULL) { return 0; }
01459
01472 virtual int EpMeshGetNumMapChannels (INode *pNode=NULL) { return 0; }
01473
01486 virtual bool EpMeshGetMapChannelActive (int mapChannel, INode *pNode=NULL) { return false; }
01487
01500 virtual int EpMeshGetNumMapVertices (int mapChannel, INode *pNode=NULL) { return 0; }
01501
01514 virtual UVVert EpMeshGetMapVertex (int mapChannel, int vertIndex, INode *pNode=NULL) { return UVVert(0,0,0); }
01515
01531 virtual int EpMeshGetMapFaceVertex (int mapChannel, int faceIndex, int corner, INode *pNode=NULL) { return 0; }
01532
01533
01534
01535
01536
01541
01542 virtual void EpModBridgeEdges (const int in_edge1, const int in_edge2, INode *in_pNode=NULL) { }
01543
01545
01546
01547
01548
01549
01550
01551
01552
01553
01554
01555
01556
01557
01558
01559
01560 virtual void EpModUpdateRingEdgeSelection ( int in_val, INode *in_pNode=NULL) { }
01561
01577
01578 virtual void EpModUpdateLoopEdgeSelection ( int in_val, INode *in_pNode=NULL) { }
01579
01581
01589 virtual void EpModSetRingShift( int in_newPos, bool in_moveOnly, bool in_add) {}
01590
01592
01601 virtual void EpModSetLoopShift( int in_newPos, bool in_moveOnly, bool in_add) {}
01602
01604
01610 virtual int EpModConvertSelectionToBorder (int in_epSelLevelFrom, int in_epSelLevelTo) { return 0; }
01611
01613
01615 virtual void EpModPaintDeformCommit() {}
01616
01618
01620 virtual void EpModPaintDeformCancel() {}
01621
01622
01623
01624
01625
01633 virtual Point3 EPMeshGetFaceNormal( const int in_faceIndex, INode *in_pNode = NULL ) { return Point3(0,0,0); }
01641 virtual Point3 EPMeshGetFaceCenter( const int in_faceIndex, INode *in_pNode = NULL ) { return Point3(0,0,0); }
01649 virtual float EPMeshGetFaceArea( const int in_faceIndex, INode *in_pNode = NULL ) { return 0.0f; }
01656 virtual BitArray * EPMeshGetOpenEdges( INode *in_pNode = NULL ) { return NULL; }
01657
01660
01661
01662
01663
01664
01665
01666
01667
01668
01669
01670 virtual bool EPMeshGetVertsByFlag( BitArray & out_vset, const DWORD in_flags, const DWORD in_fmask=0x0, INode *in_pNode = NULL ) { return false; }
01680 virtual bool EPMeshGetEdgesByFlag( BitArray & out_eset, const DWORD in_flags, const DWORD in_fmask=0x0, INode *in_pNode = NULL ) { return false; }
01690 virtual bool EPMeshGetFacesByFlag( BitArray & out_fset, const DWORD in_flags, const DWORD in_fmask=0x0, INode *in_pNode = NULL ) { return false; }
01692
01695
01696
01697
01698
01699
01700
01701
01702
01703
01704 virtual void EPMeshSetVertexFlags( BitArray & in_vset, const DWORD in_flags, DWORD in_fmask=0x0, const bool in_undoable = true, INode *in_pNode = NULL ) { return; }
01713 virtual void EPMeshSetEdgeFlags( BitArray & in_eset, const DWORD in_flags, DWORD in_fmask=0x0, const bool in_undoable = true, INode *in_pNode = NULL ) { return; }
01722 virtual void EPMeshSetFaceFlags( BitArray & in_fset, const DWORD in_flags, DWORD in_fmask=0x0, const bool in_undoable = true, INode *in_pNode = NULL ) { return; }
01724
01727
01728
01729
01730
01731
01732
01733
01734
01735 virtual int EPMeshGetVertexFlags( const int in_vertexIndex, INode *in_pNode = NULL ) { return 0; }
01743 virtual int EPMeshGetEdgeFlags( const int in_edgeIndex, INode *in_pNode = NULL ) { return 0; }
01751 virtual int EPMeshGetFaceFlags( const int in_faceIndex, INode *in_pNode = NULL ) { return 0; }
01753
01756
01757
01758
01759
01760
01761
01762
01763
01764
01765 virtual void EPMeshGetVertsUsingEdge( BitArray & out_vset, const BitArray & in_eset, INode *in_pNode = NULL ) { return; }
01774 virtual void EPMeshGetEdgesUsingVert( BitArray & out_eset, BitArray & in_vset, INode *in_pNode = NULL ) { return; }
01783 virtual void EPMeshGetFacesUsingEdge( BitArray & out_fset, BitArray & in_eset, INode *in_pNode = NULL ) { return; }
01793 virtual void EPMeshGetElementsUsingFace( BitArray & out_eset, BitArray & in_fset, BitArray & in_fenceSet, INode *in_pNode = NULL ) { return; }
01802 virtual void EPMeshGetFacesUsingVert( BitArray & out_fset, BitArray & in_vset, INode *in_pNode = NULL ) { return; }
01811 virtual void EPMeshGetVertsUsingFace( BitArray & out_vset, BitArray & in_fset, INode *in_pNode = NULL ) { return; }
01813
01822 virtual void EPMeshSetVert( const BitArray & in_vset, const Point3 & in_point, INode *in_pNode = NULL ) { return; }
01823
01825 virtual void SmGrpFloater() = 0;
01827 virtual void MatIDFloater() = 0;
01829 virtual BOOL MatIDFloaterVisible() = 0;
01831 virtual BOOL SmGrpFloaterVisible() = 0;
01832
01834 virtual void CloseSmGrpFloater() {}
01835
01836 virtual void CloseMatIDFloater() {}
01837
01839 virtual HWND MatIDFloaterHWND() { return NULL; }
01840
01842 virtual HWND SmGrpFloaterHWND() { return NULL; }
01843 };
01844
01845
01846 #define EDIT_POLY_DISABLE_IN_ANIMATE
01847
01848 class EPolyManipulatorGrip_Imp;
01851 class EPolyMod13 : public EPolyMod
01852 {
01853
01854 friend class EPolyManipulatorGrip_Imp;
01855
01856 public:
01858
01859 virtual void EPMeshStartSetVertices(INode* pNode) { return; }
01860
01862
01863
01864
01865
01866 virtual void EPMeshSetVert( const int vert, const Point3 & in_point, INode* pNode) { return; }
01867
01869
01870 virtual void EPMeshEndSetVertices(INode* pNode) { return; }
01871
01872
01873 protected:
01874
01879 enum ManipulateGrips
01880 {
01882 eSoftSelFalloff = 0,
01884 eSoftSelPinch,
01886 eSoftSelBubble,
01888 eSetFlow,
01890 eLoopShift,
01892 eRingShift
01893
01894 };
01896
01901 virtual void SetManipulateGrip(bool on, ManipulateGrips item) = 0;
01902
01908 virtual bool GetManipulateGrip(ManipulateGrips item) = 0;
01909 };
01910 #pragma warning(pop)