iEPolyMod.h

Go to the documentation of this file.
00001 /**********************************************************************
00002  *<
00003     FILE: iEPolyMod.h
00004 
00005     DESCRIPTION:   Interface for Edit Poly modifier.
00006 
00007     CREATED BY: Steve Anderson
00008 
00009     HISTORY: created March 2004
00010 
00011  *> Copyright (c) 2004, All Rights Reserved.
00012  **********************************************************************/
00013 
00014 #pragma once
00015 
00016 #include "iFnPub.h"
00017 #include "mnmesh.h"
00018 // forward declarations
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 // Editable Poly Selection Levels
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 // Relate EPolyMod selection levels to MNMesh selection levels:
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 // Edit Poly Parameters:
00038 enum epolyModParameters {
00039 
00040     epm_animation_mode,     // int - is the Edit Poly in modeling mode (0) or animation mode (1)
00041     epm_show_cage,          // BOOL - indicates if the Edit Poly is set to display the cage
00042 
00043     epm_by_vertex,          // BOOL - indicates if the Edit Poly is selecting by vertex.
00044     epm_ignore_backfacing,  // BOOL - indicates if the Edit Poly is ignoring backfacing when the user selects subobjects.
00045     epm_stack_selection,    // BOOL - indicates whether or not the Edit Poly is using the subobject selection from the stack below it.
00046 
00047     epm_ss_use,             // BOOL - Is the Edit Poly using soft selection?
00048     epm_ss_edist_use,       // BOOL - Is the Edit Poly soft selection using edge distances or not?
00049     epm_ss_edist,           // int - How many edges do we traverse in determining soft selection?  (Ignored if epm_ss_edist_use is set to false.)
00050     epm_ss_affect_back,     // BOOL - Should soft selection affect backfacing?
00051     epm_ss_falloff,         // float - soft selection falloff value
00052     epm_ss_pinch,           // float - soft selection pinch value
00053     epm_ss_bubble,          // float - soft selection bubble value
00054 
00055     epm_current_operation,  // int - indicates current operation, which should be one of the epolyModButtonOp enums.
00056 
00057     epm_world_to_object_transform, // Matrix3 - Worldspace to common Objectspace transform.  Used in combination with the local mod context tms, this can give us relative WS-to-OS transforms for each modifier instance.  See Edit Poly source for examples of use.
00058 
00059     epm_constrain_type,     // int - Represents the current vertex constraints.  0 for no constraints, 1 for constrain-to-edge, 2 for constrain-to-face, 3 for constrain-to-normal.
00060 
00061     epm_split,              // BOOL - indicates whether Cut and Slice (ep_op_cut, ep_op_slice, ep_op_slice_face) operations should split the mesh, or merely refine it.
00062 
00063     epm_ms_smoothness,      // float - Smoothness parameter for MeshSmooth operation (ep_op_meshsmooth)
00064     epm_ms_sep_smooth,      // BOOL - Separate-by-smoothing-groups parameter for MeshSmooth operation (ep_op_meshsmooth)
00065     epm_ms_sep_mat,         // BOOL - Separate-by-materials parameter for MeshSmooth operation (ep_op_meshsmooth)
00066 
00067     epm_tess_type,          // int - Type of Tessellation (ep_op_tessellate) - 0 for 
00068     epm_tess_tension,       // float - tension parameter for Tessellation operation (ep_op_tessellate)
00069 
00070     epm_bridge_taper,       // float - Taper parameter for Bridge operation (ep_op_bridge_border, ep_op_bridge_polygon)
00071     epm_bridge_bias,        // float - Bias parameter for Bridge operation (ep_op_bridge_border, ep_op_bridge_polygon)
00072 
00073     epm_align_type,         // int - whether to align to view (0) or construction plane (1) in future uses of ep_op_align
00074     epm_align_plane_normal, // Point3 - describes the plane normal currently used for alignment.
00075     epm_align_plane_offset, // float - describes the plane offset currently used for alignment.  (The normal and offset together describe a plane.)
00076 
00077     epm_delete_isolated_verts,  // BOOL - Indicates whether the Edit Poly deletes freshly isolated vertices when deleting faces.
00078 
00079     epm_weld_vertex_threshold,  // float - The threshold used when welding selected vertices (ep_op_weld_vertex)
00080 
00081     epm_chamfer_vertex,         // float - the "amount" parameter for the Chamfer Vertex operation (ep_op_chamfer_vertex)
00082 
00083     epm_extrude_vertex_width,   // float - the width of the extrusion for the Extrude Vertex operation (ep_op_extrude_vertex)
00084     epm_extrude_vertex_height,  // float - the height of the extrusion for the Extrude Vertex operation (ep_op_extrude_vertex)
00085 
00086     epm_connect_edge_segments,  // int - the number of segments to use when connecting edges (ep_op_conect_edge)
00087 
00088     epm_weld_edge_threshold,    // float - The threshold used when welding selected edges (ep_op_weld_edge)
00089 
00090     epm_extrude_edge_height,    // float - the height of the extrusion for the Extrude Edge operation (ep_op_extrude_edge)
00091     epm_extrude_edge_width,     // float - the width of the extrusion for the Extrude Edge operation (ep_op_extrude_edge)
00092 
00093     epm_chamfer_edge,           // float - the "amount" parameter for the Chamfer Edge operation (ep_op_chamfer_edge)
00094 
00095     epm_extrude_face_type,      // int - indicates the type of face extrusion - 0 for Group Normals, 1 for Local Normals, 2 for By Polygon (ep_op_extrude_face)
00096     epm_extrude_face_height,    // float - indicates the height of the face extrusion (ep_op_extrude_face)
00097 
00098     epm_bevel_type,             // int - indicates the type of face extrusion used in beveling - 0 for Group Normals, 1 for Local Normals, 2 for By Polygon (ep_op_bevel)
00099     epm_bevel_height,           // float - height of the face bevel (ep_op_bevel)
00100     epm_bevel_outline,          // float - "outline" amount (amount to move vertices in or out) in the Bevel operation (ep_op_bevel)
00101 
00102     epm_inset_type,             // int - indicates the type of face extrusion used in insetting - 0 for Group Normals, 1 for Local Normals, 2 for By Polygon (ep_op_inset)
00103     epm_inset,                  // float - the amount of the inset (ep_op_inset)
00104 
00105     epm_outline,                // float - the amount of outlining (ep_op_outline)
00106 
00107     epm_hinge_angle,            // float - the angle to use in Hinge from Edge (ep_op_hinge_from_edge)
00108     epm_hinge_base,             // Point3 - the base of the hinge (ep_op_hinge_from_edge)
00109     epm_hinge_dir,              // Point3 - the direction of the hinge - combine with epm_hinge_base to get a complete ray for the hinge (ep_op_hinge_from_edge)
00110     epm_hinge_segments,         // int - the number of segments to use on the sides of the Hinge from Edge extrusion (ep_op_hinge_from_edge)
00111 
00112     epm_extrude_spline_node,        // INode - the node of the spline to use in Extrude along Spline (ep_op_extrude_along_spline)
00113     epm_extrude_spline_segments,    // int - the number of segments in Extrude along Spline (ep_op_extrude_along_spline)
00114     epm_extrude_spline_taper,       // float - the amount of tapering to use in Extrude along Spline (ep_op_extrude_along_spline)
00115     epm_extrude_spline_taper_curve, // float - the taper curve for Extrude along Spline (ep_op_extrude_along_spline)
00116     epm_extrude_spline_twist,       // float - the amount of twist (in radians) for Extrude along Spline (ep_op_extrude_along_spline)
00117     epm_extrude_spline_rotation,    // float - the rotation (in radians) around the face normal for Extrude along Spline (ep_op_extrude_along_spline)
00118     epm_extrude_spline_align,       // BOOL - whether or not to try to align the extrusion spline to match the face normal (ep_op_extrude_along_spline)
00119 
00120     epm_autosmooth_threshold,   // float - the threshold for autosmoothing across edges, in radians (ep_op_autosmooth)
00121     epm_smooth_group_set,       // DWORD cast as an int - the set of smoothing groups to set (ep_op_smooth)
00122     epm_smooth_group_clear,     // DWORD cast as an int - the set of smoothing groups to clear (ep_op_smooth)
00123 
00124     epm_material,               // int - the material ID to set on selected faces (ep_op_set_material)
00125 
00126     epm_material_selby,         // int - the material ID to select faces by (ep_op_select_by_material)
00127     epm_material_selby_clear,   // BOOL - whether or not to clear the previous selection before selecting by material (ep_op_select_by_material)
00128 
00129     epm_smoother_selby,         // DWORD cast as an int - the set of smoothing groups to select faces by (ep_op_select_by_smooth)
00130     epm_smoother_selby_clear,   // BOOL - whether or not to clear the previous selection before selecting faces by smoothing group (ep_op_select_by_smooth)
00131 
00132     epm_clone_to_element,       // BOOL - whether to clone to an element or to a separate object.
00133 
00134     epm_bridge_segments,        // int - the number of segments for bridge operations
00135     epm_bridge_smooth_thresh,   // float - the smoothing threshold for successive bridge columns (in radians)
00136     epm_bridge_target_1,        // int - the first edge or face we're bridging between, in 1-based indexing.  (Value of 0 indicates not set yet.)
00137     epm_bridge_target_2,        // int - the second edge or face we're bridging between, in 1-based indexing.  (Value of 0 indicates not set yet.)
00138     epm_bridge_twist_1,         // int - the Twist amount for the first end of the bridge.
00139     epm_bridge_twist_2,         // int - the Twist amount for the second end of the bridge
00140     epm_bridge_selected,        // BOOL - false indicates we should bridge between the specific targets given in epm_bridge_target_1 and _2, true indicates we should bridge selected borders or polgyons.
00141 
00142     epm_preserve_maps,          // BOOL - Indicates whether map values should be "preserved" in geometric deformations such as subobject transforms.
00143 
00144     epm_relax_amount,           // float - the relax Amount parameter - range of 0 (no relaxing) to 1 (maximum relaxing), default of .5
00145     epm_relax_iters,            // int - the number of iterations of the relax algorithm to apply.
00146     epm_relax_hold_boundary,    // BOOL - Indicates whether or not to fix boundary points in place when relaxing
00147     epm_relax_hold_outer,       // BOOL - Indicates whether or not to fix "outer" points in place when relaxing.  (See the MNMeshUtilities::Relax declaration in MNMesh.h for further explanation.)
00148 
00149     epm_select_by_angle,        // BOOL - Indicates whether Polygon selections should be expanded depending on edge angles.
00150     epm_select_angle,           // float - Indicates the maximum angle used in expanding polygon selections.  (Ignored if epm_select_by_angle is false.)
00151 
00152     // Paint tools
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,                  // obsolete -- SEE the #define epm_edge_chamfer_segments epm_reserved1
00159                                     // beneath this enum!
00160     epm_reserved2,                  // obsolete
00161     epm_reserved3,                  // obsolete
00162     epm_reserved4,                  // obsolete
00163     epm_reserved5,                  // obsolete
00164     
00165     epm_connect_edge_pinch,         // float    - distance between new edges created when connecting edges
00166     epm_connect_edge_slide,         // float    - start position for edge connection
00167     epm_loop_edge_sel,              // int      - loop spinner value
00168     epm_ring_edge_sel,              // int      - ring spinner value
00169     epm_remove_edge_ctrl,           // BOOOL    - is control key pressed when removing edges ? 
00170     epm_cage_color,                 // Point3   - the user supplied cage color 
00171     epm_selected_cage_color,        // Point3   - the user supplied cage color for selected objects
00172     epm_cage_color_changed,         // int      - has the cage color been changed 
00173     epm_selected_cage_color_changed,// int      - has the selected cage color been changed 
00174     epm_chamfer_vertex_open,        // BOOL     - is a vertex chamfer creating a hole ? 
00175     epm_chamfer_edge_open,          // BOOL     - is an edge chamfer creating a hole ? 
00176     epm_bridge_adjacent,            // float    - the angle limit used for bridging adjacent edges 
00177     epm_bridge_reverse_triangle,    // BOOL     - is a triangle to be reversed when bridging edges ?
00178     epm_break_vertex_distance,      // float    - the distance used for opening vertices
00179 
00180     epm_paintsel_mode,
00181     epm_paintdeform_mode,
00182 
00183     epm_select_mode,                // BOOL     -  the select mode that we are in, none, sub object, or multi.
00184 
00185     // new for 9.5
00186     //epm_edge_chamfer_segments  // int - the number of new edges to create per selected edge (ep_edge_chamfer_segments)
00187                                  // SEE #define BELOW!
00188 };
00189 // In order to preserve forward file IO compatibility with Makalu (Max 9), the new chamfer parameter
00190 // for Velveeta (Max 9.5) has to take on the value of epm_reserved1. See the implementation of
00191 // PolyOperation::LoadBasics (and PolyOperation::SaveBasics).
00192 #define epm_edge_chamfer_segments epm_reserved1
00193 
00194 // Edit Poly Operations:
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 // Edit Poly Command modes:
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 // Edit Poly Pick modes:
00241 enum epolyModPickMode { ep_mode_attach, ep_mode_pick_shape };
00242 
00243 // Edit Poly methods - for use in function-publishing (for Maxscript access).
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     // Access to information about mesh:
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         // Transforms:
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         // Access to slice plane:
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         //VFN_2(epmod_turn_edge, EpModTurnEdge, TYPE_INDEX, TYPE_INODE);
00377         VFN_3(epmod_turn_diagonal, EpModTurnDiagonal, TYPE_INDEX, TYPE_INDEX, TYPE_INODE);
00378 
00379         // Mesh access methods:
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         //Bridge methods introduced in Max 8 - (Moved from EPolyMod8 to here)
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         //Functionality added to match editable poly - (Added in Max 9)
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     //  \brief 
00952     // Retrieve the transform of the Edit Poly's node.
00953     // This method is used by the FPS exposure to expose the EpModGetNodeTM method. The FPS 
00954     // exposure requires that the time parameter be the last argument.
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     //Bridge related methods - removed from EPolyMod8 and joined to EPolyMod
01535     //----------------------------------------------------------------------
01536 
01541 
01542     virtual void EpModBridgeEdges (const int in_edge1,  const int in_edge2, INode *in_pNode=NULL) { }
01543 
01545     // \param[in] in_val: Specifies which way the current edge selection is changed. it can take the values :   
01546     // \li RING_UP: Moves the selection one edge up in the ring direction
01547     // \li LOOP_UP: Moves the selection one edge up in the loop direction
01548     // \li RING_DOWN: Moves the selection one edge down in the ring direction
01549     // \li LOOP_DOWN: Moves the selection one edge up in the loop direction
01550     // \li RING_UP_ADD: Adds to the selection one edge in the up ring direction 
01551     // \li LOOP_UP_ADD: Adds to the selection one edge in the up loop direction 
01552     // \li RING_DOWN_ADD: Adds to the selection one edge in the down ring direction 
01553     // \li LOOP_DOWN_ADD: Adds to the selection one edge in the down loop direction 
01554     // \li RING_UP_SUBTRACT: Subtracts to the selection one edge in the up ring direction 
01555     // \li LOOP_UP_SUBTRACT: Subtracts to the selection one edge in the up loop direction 
01556     // \li RING_DOWN_SUBTRACT: Subtracts to the selection one edge in the down ring direction 
01557     // \li LOOP_DOWN_SUBTRACT: Subtracts to the selection one edge in the down loop direction 
01558     // \param[in] in_pNode: The node to which the bridge is applied
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     //Methods that previously only existed in editable poly - added in Max 9
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     //  \brief Closes the Material ID Floater Dialog
01836     virtual void CloseMatIDFloater() {}
01837 
01839     virtual HWND MatIDFloaterHWND() { return NULL; }
01840 
01842     virtual HWND SmGrpFloaterHWND() { return NULL; }
01843 };
01844 
01845 // Controls whether or not "inherently" nonanimatable operations are available in Animation mode.
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     //  \param[in] pNode - The node that is used by the modifier.
01859     virtual void EPMeshStartSetVertices(INode* pNode) { return; }
01860 
01862     //  calls to EPMeshStartSetVertices and EPMeshEndSetVertices.
01863     //  \param[in] vert - The vert to set.
01864     //  \param[in] in_point - The position to set, in the objects local coordinate space.
01865     //  \param[in] pNode - The node that is used by the modifier.
01866     virtual void EPMeshSetVert( const int vert, const Point3 & in_point, INode* pNode) { return; }
01867 
01869     //  \param[in] pNode - The node that is used by the modifier.
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)