/// <summary>
        /// Adds the Shell modifier to the provided node (by handle).
        /// </summary>
        /// <param name="nodeHandle"> Input the node handle to add the modifier to. </param>
        /// <param name="shellAmount"> Input the amount of shell thickness as float. </param>
        /// <returns> Returns 1 if successful or -1 if not. </returns>
        static public int AddOsmShell(uint nodeHandle, float shellAmount)
        {
            try
            {
                IGlobal      global = Autodesk.Max.GlobalInterface.Instance;
                IInterface14 ip     = global.COREInterface14;

                IClass_ID cidOsmShell = global.Class_ID.Create(0x3b9b1a16, 0x6d84e8d0);
                AddOsmModifier(nodeHandle, cidOsmShell);

                IINode    node = ip.GetINodeByHandle(nodeHandle);
                IModifier mod  = GetModifier(node, cidOsmShell);
                if (mod != null)
                {
                    IIParamBlock2 pb = mod.GetParamBlock(0);
                    pb.SetValue(0, 0, shellAmount, 0); // innerAmount parameter is at index zero of the parameter block.
                }
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
                return(-1);
            }

            return(1);
        }
Пример #2
0
        public void Print(IIParamBlock2 paramBlock, int logRank)
        {
            RaiseVerbose("paramBlock=" + paramBlock, logRank);
            if (paramBlock != null)
            {
                RaiseVerbose("paramBlock.NumParams=" + paramBlock.NumParams, logRank + 1);
                for (short i = 0; i < paramBlock.NumParams; i++)
                {
                    ParamType2 paramType = paramBlock.GetParameterType(i);

                    RaiseVerbose("paramBlock.GetLocalName(" + i + ")=" + paramBlock.GetLocalName(i, 0) + ", type=" + paramType, logRank + 1);
                    switch (paramType)
                    {
                    case ParamType2.String:
                        RaiseVerbose("paramBlock.GetProperty(" + i + ")=" + paramBlock.GetStr(i, 0, 0), logRank + 2);
                        break;

                    case ParamType2.Int:
                        RaiseVerbose("paramBlock.GetProperty(" + i + ")=" + paramBlock.GetInt(i, 0, 0), logRank + 2);
                        break;

                    case ParamType2.Float:
                        RaiseVerbose("paramBlock.GetProperty(" + i + ")=" + paramBlock.GetFloat(i, 0, 0), logRank + 2);
                        break;

                    default:
                        RaiseVerbose("Unknown property type", logRank + 2);
                        break;
                    }
                }
            }
        }
        /// <summary>
        /// Adds the Shell modifier to the provided node (by handle).
        /// </summary>
        /// <param name="nodeHandle"> Input the node handle to add the modifier to. </param>
        /// <param name="shellAmount"> Input the amount of shell thickness as float. </param>
        /// <returns> Returns 1 if successful or -1 if not. </returns>
        static public int AddOsmProoptimizer(IINode node, float VertexPercent, bool KeepNormals)
        {
            try
            {
                IGlobal      global = Autodesk.Max.GlobalInterface.Instance;
                IInterface14 ip     = global.COREInterface14;
                int          t      = ip.Time;

                // classID:#(1056067556, 1496462090)
                IClass_ID cidOsmProoptimizer = global.Class_ID.Create(0x3EF24FE4, 0x5932330A);
                AddOsmModifier(node, cidOsmProoptimizer);

                IModifier mod = GetModifier(node, cidOsmProoptimizer);
                if (mod != null)
                {
                    // In order to get the "Calculate" parameter to trigger the modifier to execute, we have to enable some UI elements.
                    ip.CmdPanelOpen = true;      // ensures the command panel in general is open
                    ip.SelectNode(node, true);   // Select the node to make it active
                    ip.CommandPanelTaskMode = 2; // TASK_MODE_MODIFY. This makes the modifier panel active.
                    // Now we can set the parameters on the modifier, and at end "calculate" the results.
                    IIParamBlock2 pb = mod.GetParamBlock(0);
                    pb.SetValue((int)ProOptimizerPBValues.optimizer_main_ratio, t, VertexPercent, 0);
                    pb.SetValue((int)ProOptimizerPBValues.optimizer_options_keep_uv, t, 1, 0);
                    pb.SetValue((int)ProOptimizerPBValues.optimizer_options_keep_normals, t, 0, 0);
                    // There is no true way to know if this was valid/invalid for the mesh, so we check the outer level routine on triobject for changes. **
                    pb.SetValue((int)ProOptimizerPBValues.optimizer_main_calculate, t, 1, 0);
                    ip.ClearNodeSelection(false);
                }
            }
            catch (Exception ex)
            {
                Debug.Print(ex.Message);
                return(-1);
            }

            return(1);
        }
Пример #4
0
 internal Parameter2(IIParamBlock2 pb, short id) { this.pb = pb; this.id = id; }
Пример #5
0
 public static ParameterBlock2 Create(IIParamBlock2 x) { return Animatable.CreateWrapper<ParameterBlock2>(x); }
Пример #6
0
 internal ParameterBlock2(IIParamBlock2 pb) : base(pb) { }
Пример #7
0
 internal Parameter2(IIParamBlock2 pb, short id)
 {
     this.pb = pb; this.id = id;
 }
Пример #8
0
 public static ParameterBlock2 Create(IIParamBlock2 x)
 {
     return(Animatable.CreateWrapper <ParameterBlock2>(x));
 }
Пример #9
0
 internal ParameterBlock2(IIParamBlock2 pb) : base(pb)
 {
 }