コード例 #1
0
    protected override void register_parameters()
    {
        closingMode = base.RegisterDropDown("FillTypeDropDown", "fill_type",
                                            new List <string>()
        {
            "Trivial", "Minimal", "Smooth"
        },
                                            new List <int>()
        {
            (int)FillHolesTool.FillTypes.Trivial,
            (int)FillHolesTool.FillTypes.Minimal,
            (int)FillHolesTool.FillTypes.Smooth
        });

        showHidden = base.RegisterToggle("ShowHiddenToggle", "show_hidden");

        minimalPanel  = this.gameObject.FindChildByName("MinimalPanel", true);
        smoothPanel   = this.gameObject.FindChildByName("SmoothPanel", true);
        fillAllButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "FillAllButton", on_fill_all_clicked);

        minOptimizeTris     = base.RegisterToggle("MinimalOptimizeTrisToggle", "optimize_tris");
        minOptTrisTolerance = base.RegisterFloatInput("MinimalOptTrisTolInput", "optimize_tris_deviation_thresh", new Interval1d(0, 1));

        smoothAutoTargetEdgeLen = base.RegisterToggle("AutoEdgeLengthToggle", "auto_edge_length");
        smoothTargetEdgeLen     = base.RegisterFloatInput("TargetEdgeLenInput", "edge_length", new Interval1d(0.01, 100));
        smoothOptRounds         = base.RegisterIntInput("OptimizationRoundsInput", "smooth_opt_rounds", new Interval1i(1, 999));

        statusText = UnityUIUtil.FindTextAndSet(this.gameObject, "StatusText", "");
    }
コード例 #2
0
    protected override void register_parameters()
    {
        reduceMode = base.RegisterDropDown("ReduceTypeDropDown", "target_mode",
                                           new List <string>()
        {
            "Triangles", "Vertices", "Min Length"
        },
                                           new List <int>()
        {
            (int)ReduceOp.TargetModes.TriangleCount,
            (int)ReduceOp.TargetModes.VertexCount,
            (int)ReduceOp.TargetModes.MinEdgeLength
        });

        triangleCount = base.RegisterIntInput("TriangleCountInput", "triangle_count", new Interval1i(0, int.MaxValue));
        trianglePanel = this.gameObject.FindChildByName("TriangleCountParam", true);

        vertexCount = base.RegisterIntInput("VertexCountInput", "vertex_count", new Interval1i(0, int.MaxValue));
        vertexPanel = this.gameObject.FindChildByName("VertexCountParam", true);

        minEdgeLength      = base.RegisterFloatInput("MinEdgeLengthInput", "min_edge_length", new Interval1d(0.0001, 100), "F8");
        minEdgeLengthPanel = this.gameObject.FindChildByName("MinEdgeLengthParam", true);

        reproject    = base.RegisterToggle("ReprojectToggle", "reproject");
        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");

        statusText = UnityUIUtil.FindTextAndSet(this.gameObject, "StatusText", "");
    }
コード例 #3
0
    protected override void register_parameters()
    {
        holeType = base.RegisterDropDown("HoleTypeDropDown", "hole_type",
                                         new List <string>()
        {
            "Cut Mesh", "Add Cavity"
        },
                                         new List <int>()
        {
            (int)AddHoleTool.HoleTypes.CutHole,
            (int)AddHoleTool.HoleTypes.CavityObject
        });

        directionType = base.RegisterDropDown("HoleDirectionDropDown", "hole_direction",
                                              new List <string>()
        {
            "Vertical", "Right/Left", "Back/Fwd", "Normal"
        },
                                              new List <int>()
        {
            (int)AddHoleTool.HoleDirections.AxisY,
            (int)AddHoleTool.HoleDirections.AxisX,
            (int)AddHoleTool.HoleDirections.AxisZ,
            (int)AddHoleTool.HoleDirections.Normal
        });

        holeSize     = base.RegisterFloatInput("HoleSizeInput", "hole_size", new Interval1d(0.001f, 500.0f));
        throughHole  = base.RegisterToggle("ThroughHoleToggle", "through_hole");
        holeDepth    = base.RegisterFloatInput("HoleDepthInput", "hole_depth", new Interval1d(0.001f, 500.0f));
        subdivisions = base.RegisterIntInput("SubdivisionsInput", "subdivisions", new Interval1i(3, 1000));
        showPreview  = base.RegisterToggle("ShowPreviewToggle", "show_preview");

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");
    }
コード例 #4
0
    protected override void register_parameters()
    {
        edgeLength  = base.RegisterFloatInput("EdgeLengthInput", "edge_length", new Interval1d(0.01, 100), "F4");
        smoothAlpha = base.RegisterFloatInput("SmoothingInput", "smooth_alpha", new Interval1d(0, 1), "F4");

        iterations = base.RegisterIntInput("RoundsInput", "iterations", new Interval1i(1, 9999));

        boundaryMode = base.RegisterDropDown("BoundaryModeDropDown", "boundary_mode",
                                             new List <string>()
        {
            "Free", "Fixed", "Split"
        },
                                             new List <int>()
        {
            (int)RemeshTool.BoundaryModes.FreeBoundaries,
            (int)RemeshTool.BoundaryModes.FixedBoundaries,
            (int)RemeshTool.BoundaryModes.ConstrainedBoundaries
        });

        preserveCreases = base.RegisterToggle("PreserveCreasesToggle", "preserve_creases");
        creaseAngle     = base.RegisterFloatInput("CreaseAngleInput", "crease_angle", new Interval1d(10, 90), "F2");

        reproject = base.RegisterToggle("ReprojectToggle", "reproject");

        smoothButton   = base.RegisterToggleButton("SmoothButton", "enable_smooth");
        collapseButton = base.RegisterToggleButton("CollapseButton", "enable_collapse");
        splitButton    = base.RegisterToggleButton("SplitButton", "enable_split");
        flipButton     = base.RegisterToggleButton("FlipButton", "enable_flip");

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");
    }
コード例 #5
0
    protected override void register_parameters()
    {
        shellType = base.RegisterDropDown("ShellTypeDropDown", "shell_type",
                                          new List <string>()
        {
            "Voxel", "Extrusion"
        },
                                          new List <int>()
        {
            (int)MeshShellTool.ShellTypes.DistanceField,
            (int)MeshShellTool.ShellTypes.Extrusion
        });

        directionType = base.RegisterDropDown("ShellDirectionDropDown", "shell_direction",
                                              new List <string>()
        {
            "Inset", "Outset", "Symmetric"
        },
                                              new List <int>()
        {
            (int)MeshShellTool.ShellDirections.Inner,
            (int)MeshShellTool.ShellDirections.Outer,
            (int)MeshShellTool.ShellDirections.Symmetric,
        });

        shellThickness = base.RegisterFloatInput("ShellThicknessInput", "shell_thickness", new Interval1d(0.0001f, 9999f));

        simpleCellSize    = base.RegisterFloatInput("SimpleCellSizeInput", "all_cell_size", new Interval1d(0.25f, 500.0f));
        simpleCellSizeRow = this.gameObject.FindChildByName("SimpleCellSizeParam", true);

        gridCellCount    = base.RegisterIntInput("GridCellCountInput", "grid_cell_count", new Interval1i(4, 2048));
        gridCellCountRow = this.gameObject.FindChildByName("GridCellCountParam", true);
        gridCellSize     = base.RegisterFloatInput("GridCellSizeInput", "grid_cell_size", new Interval1d(0.001f, 500.0f));
        gridCellSizeRow  = this.gameObject.FindChildByName("GridCellSizeParam", true);

        meshCellCount    = base.RegisterIntInput("MeshCellCountInput", "mesh_cell_count", new Interval1i(4, 2048));
        meshCellCountRow = this.gameObject.FindChildByName("MeshCellCountParam", true);
        meshCellSize     = base.RegisterFloatInput("MeshCellSizeInput", "mesh_cell_size", new Interval1d(0.001f, 500.0f));
        meshCellSizeRow  = this.gameObject.FindChildByName("MeshCellSizeParam", true);

        minComponentSize    = base.RegisterFloatInput("MinComponentSizeInput", "min_component_size", new Interval1d(0.0f, 500.0f));
        minComponentSizeRow = this.gameObject.FindChildByName("MinComponentSizeParam", true);

        showInputObjects = base.RegisterToggle("ShowOriginalToggle", "show_original");
        replaceInput     = base.RegisterToggle("ReplaceInputToggle", "replace_input");

        basicButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "BasicToggleButton", on_basic_expert_toggle);
        TabOrder.Add(basicButton.gameObject);

        update_basic_expert_visibility();
    }
コード例 #6
0
    protected override void register_parameters()
    {
        insideMode = base.RegisterDropDown("InsideModeDropDown", "inside_mode",
                                           new List <string>()
        {
            "Interior", "Occluded"
        },
                                           new List <int>()
        {
            (int)RemoveHiddenFacesTool.CalculationMode.WindingNumber,
            (int)RemoveHiddenFacesTool.CalculationMode.OcclusionTest
        });

        allVertices  = base.RegisterToggle("AllVerticesToggle", "all_hidden_vertices");
        showRemoved  = base.RegisterToggle("ShowRemovedToggle", "show_removed");
        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");
    }
コード例 #7
0
        public MappedDropDown RegisterDropDown(string dropdownName, string toolParamName,
                                               List <string> options, List <int> values)
        {
            MappedDropDown dropdown = new MappedDropDown(
                this.gameObject.FindChildByName(dropdownName, true).GetComponent <Dropdown>(),
                () => { return(ActiveParameterSet.GetValueInt(toolParamName)); },
                (intValue) => { ActiveParameterSet.SetValue <int>(toolParamName, intValue); update_values_from_tool(); });

            dropdown.SetOptions(options, values);
            TabOrder.Add(dropdown.drop);

            dropdown_params.Add(new DropDownParam()
            {
                widget = dropdown, paramName = toolParamName
            });

            return(dropdown);
        }
コード例 #8
0
    protected override void register_parameters()
    {
        reprojectMode = base.RegisterDropDown("ReprojectTypeDropDown", "project_mode",
                                              new List <string>()
        {
            "Smooth", "Sharp", "Bounded"
        },
                                              new List <int>()
        {
            (int)ReprojectTool.ReprojectModes.Smooth,
            (int)ReprojectTool.ReprojectModes.Sharp,
            (int)ReprojectTool.ReprojectModes.Bounded
        });


        maxDistance      = base.RegisterFloatInput("MaxDistanceInput", "max_distance", new Interval1d(0.001, 1000), "F4");
        transitionSmooth = base.RegisterFloatInput("TransitionSmoothInput", "transition_smoothness", new Interval1d(0, 1));
        edgeLength       = base.RegisterFloatInput("EdgeLengthInput", "edge_length", new Interval1d(0.01, 100));
        smoothAlpha      = base.RegisterFloatInput("SmoothingInput", "smooth_alpha", new Interval1d(0, 1), "F4");

        iterations = base.RegisterIntInput("RoundsInput", "iterations", new Interval1i(1, 9999));

        boundaryMode = base.RegisterDropDown("BoundaryModeDropDown", "boundary_mode",
                                             new List <string>()
        {
            "Free", "Fixed", "Split"
        },
                                             new List <int>()
        {
            (int)RemeshTool.BoundaryModes.FreeBoundaries,
            (int)RemeshTool.BoundaryModes.FixedBoundaries,
            (int)RemeshTool.BoundaryModes.ConstrainedBoundaries
        });


        smoothButton   = base.RegisterToggleButton("SmoothButton", "enable_smooth");
        collapseButton = base.RegisterToggleButton("CollapseButton", "enable_collapse");
        splitButton    = base.RegisterToggleButton("SplitButton", "enable_split");
        flipButton     = base.RegisterToggleButton("FlipButton", "enable_flip");

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");
    }
コード例 #9
0
    protected override void register_parameters()
    {
        removeInsideMode = base.RegisterDropDown("InsideModeDropDown", "remove_inside_mode",
                                                 new List <string>()
        {
            "None", "Interior", "Hidden"
        },
                                                 new List <int>()
        {
            (int)MeshAutoRepairTool.RemoveInsideModes.None,
            (int)MeshAutoRepairTool.RemoveInsideModes.Interior,
            (int)MeshAutoRepairTool.RemoveInsideModes.Occluded
        });

        minEdgeLength = base.RegisterFloatInput("MinEdgeLengthInput", "min_edge_length", new Interval1d(0.0001, 100));

        erosionRounds = base.RegisterIntInput("ErosionRoundsInput", "erosion_rounds", new Interval1i(0, 10000));

        invertResult = base.RegisterToggle("InvertResultToggle", "invert_result");

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");
    }
コード例 #10
0
    protected override void register_parameters()
    {
        shapeTypeMode = base.RegisterDropDown("ShapeTypeDropDown", "shape_type",
                                              new List <string>()
        {
            "Box", "Sphere", "Cylinder", "Arrow", "Bunny"
        },
                                              new List <int>()
        {
            (int)GenerateShapeTool.ShapeTypes.Box,
            (int)GenerateShapeTool.ShapeTypes.Sphere,
            (int)GenerateShapeTool.ShapeTypes.Cylinder,
            (int)GenerateShapeTool.ShapeTypes.Arrow,
            (int)GenerateShapeTool.ShapeTypes.Bunny
        });

        subdivisions = base.RegisterIntInput("SubdivisionsInput", "subdivisions", new Interval1i(1, 1000));

        shapeHeight = base.RegisterFloatInput("HeightInput", "shape_height", new Interval1d(0, 1000000));
        shapeWidth  = base.RegisterFloatInput("WidthInput", "shape_width", new Interval1d(0, 1000000));
        shapeDepth  = base.RegisterFloatInput("DepthInput", "shape_depth", new Interval1d(0, 1000000));
    }
コード例 #11
0
    protected override void register_parameters()
    {
        closingMode = base.RegisterDropDown("ClosingTypeDropDown", "closing_type",
                                            new List <string>()
        {
            "Robust", "Precise", "Fast"
        },
                                            new List <int>()
        {
            (int)GenerateClosedMeshTool.ClosingTypes.WindingNumberGrid,
            (int)GenerateClosedMeshTool.ClosingTypes.WindingNumberAnalytic,
            (int)GenerateClosedMeshTool.ClosingTypes.LevelSet
        });

        simpleCellSize    = base.RegisterFloatInput("SimpleCellSizeInput", "all_cell_size", new Interval1d(0.25f, 500.0f));
        simpleCellSizeRow = this.gameObject.FindChildByName("SimpleCellSizeParam", true);

        gridCellCount    = base.RegisterIntInput("GridCellCountInput", "grid_cell_count", new Interval1i(4, 2048));
        gridCellCountRow = this.gameObject.FindChildByName("GridCellCountParam", true);
        gridCellSize     = base.RegisterFloatInput("GridCellSizeInput", "grid_cell_size", new Interval1d(0.001f, 500.0f));
        gridCellSizeRow  = this.gameObject.FindChildByName("GridCellSizeParam", true);

        meshCellCount    = base.RegisterIntInput("MeshCellCountInput", "mesh_cell_count", new Interval1i(4, 2048));
        meshCellCountRow = this.gameObject.FindChildByName("MeshCellCountParam", true);
        meshCellSize     = base.RegisterFloatInput("MeshCellSizeInput", "mesh_cell_size", new Interval1d(0.001f, 500.0f));
        meshCellSizeRow  = this.gameObject.FindChildByName("MeshCellSizeParam", true);

        minComponentSize    = base.RegisterFloatInput("MinComponentSizeInput", "min_component_size", new Interval1d(0.0f, 500.0f));
        minComponentSizeRow = this.gameObject.FindChildByName("MinComponentSizeParam", true);

        offsetDistance = base.RegisterFloatInput("OffsetDistanceInput", "offset_distance", new Interval1d(-500, 500));
        windingIso     = base.RegisterFloatInput("WindingIsoInput", "winding_inflate", new Interval1d(0.01, 0.99));

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");

        basicButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "BasicToggleButton", on_basic_expert_toggle);
        TabOrder.Add(basicButton.gameObject);
    }
コード例 #12
0
    protected override void register_parameters()
    {
        operationMode = base.RegisterDropDown("OpTypeDropDown", "op_type",
                                              new List <string>()
        {
            "Expand", "Contract", "Erode", "Fill"
        },
                                              new List <int>()
        {
            (int)MeshMorphologyTool.OperationTypes.Dilate,
            (int)MeshMorphologyTool.OperationTypes.Contract,
            (int)MeshMorphologyTool.OperationTypes.Open,
            (int)MeshMorphologyTool.OperationTypes.Close
        });

        offsetDistance = base.RegisterFloatInput("DistanceInput", "distance", new Interval1d(-500, 500));

        simpleCellSize    = base.RegisterFloatInput("SimpleCellSizeInput", "all_cell_size", new Interval1d(0.25f, 500.0f));
        simpleCellSizeRow = this.gameObject.FindChildByName("SimpleCellSizeParam", true);

        gridCellCount    = base.RegisterIntInput("GridCellCountInput", "grid_cell_count", new Interval1i(4, 2048));
        gridCellCountRow = this.gameObject.FindChildByName("GridCellCountParam", true);
        gridCellSize     = base.RegisterFloatInput("GridCellSizeInput", "grid_cell_size", new Interval1d(0.001f, 500.0f));
        gridCellSizeRow  = this.gameObject.FindChildByName("GridCellSizeParam", true);

        meshCellCount    = base.RegisterIntInput("MeshCellCountInput", "mesh_cell_count", new Interval1i(4, 2048));
        meshCellCountRow = this.gameObject.FindChildByName("MeshCellCountParam", true);
        meshCellSize     = base.RegisterFloatInput("MeshCellSizeInput", "mesh_cell_size", new Interval1d(0.001f, 500.0f));
        meshCellSizeRow  = this.gameObject.FindChildByName("MeshCellSizeParam", true);

        minComponentSize    = base.RegisterFloatInput("MinComponentSizeInput", "min_component_size", new Interval1d(0.0f, 500.0f));
        minComponentSizeRow = this.gameObject.FindChildByName("MinComponentSizeParam", true);

        replaceInput = base.RegisterToggle("ReplaceInputToggle", "replace_input");

        basicButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "BasicToggleButton", on_basic_expert_toggle);
        TabOrder.Add(basicButton.gameObject);
    }
コード例 #13
0
    // Use this for initialization
    public void Start()
    {
        dismissButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "DismissButton", on_dismiss);
        UnityUIUtil.FindTextAndSet(this.gameObject, "VersionText", string.Format("v{0}.{1}.{2}",
                                                                                 CotangentVersion.CurrentVersion.a, CotangentVersion.CurrentVersion.b, CotangentVersion.CurrentVersion.c));

        prefsTabButton   = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "PreferencesButton", on_prefs_tab);
        prefsTab         = this.gameObject.FindChildByName("PreferencesPanel", true);
        privacyTabButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "PrivacyButton", on_privacy_tab);
        privacyTab       = this.gameObject.FindChildByName("PrivacyPanel", true);
        aboutTabButton   = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "AboutButton", on_about_tab);
        aboutTab         = this.gameObject.FindChildByName("AboutPanel", true);



        startupWorkspace = new MappedDropDown(
            this.gameObject.FindChildByName("StartupWorkspaceDropDown", true).GetComponent <Dropdown>(),
            () => { return((int)CCPreferences.StartupWorkspace); },
            (intValue) => { CCPreferences.StartupWorkspace = (AppViewMode)intValue; });
        startupWorkspace.SetOptions(
            new List <string>()
        {
            "Print", "Repair", "Model"
        },
            new List <int>()
        {
            (int)AppViewMode.PrintView,
            (int)AppViewMode.RepairView,
            (int)AppViewMode.ModelView
        });
        startupWorkspace.SetFromId((int)CCPreferences.StartupWorkspace);


        graphicsQuality = new MappedDropDown(
            this.gameObject.FindChildByName("GraphicsQualityDropDown", true).GetComponent <Dropdown>(),
            () => { return((int)CCPreferences.GraphicsQuality); },
            (intValue) => { CCPreferences.GraphicsQuality = (CCPreferences.GraphicsQualityLevels)intValue; });
        graphicsQuality.SetOptions(
            new List <string>()
        {
            "Maximum", "High", "Medium", "Low", "Fastest"
        },
            new List <int>()
        {
            (int)CCPreferences.GraphicsQualityLevels.Max,
            (int)CCPreferences.GraphicsQualityLevels.High,
            (int)CCPreferences.GraphicsQualityLevels.Medium,
            (int)CCPreferences.GraphicsQualityLevels.Low,
            (int)CCPreferences.GraphicsQualityLevels.Fastest
        });
        graphicsQuality.SetFromId((int)CCPreferences.GraphicsQuality);


        cameraMode = new MappedDropDown(
            this.gameObject.FindChildByName("CameraModeDropDown", true).GetComponent <Dropdown>(),
            () => { return((int)CCPreferences.CameraMode); },
            (intValue) => { CCPreferences.CameraMode = (CCPreferences.CameraModes)intValue; });
        cameraMode.SetOptions(
            new List <string>()
        {
            "Perspective", "Orthographic"
        },
            new List <int>()
        {
            (int)CCPreferences.CameraModes.Perspective,
            (int)CCPreferences.CameraModes.Orthographic
        });
        cameraMode.SetFromId((int)CCPreferences.CameraMode);



        importXFormMode = new MappedDropDown(
            this.gameObject.FindChildByName("ImportXFormDropdown", true).GetComponent <Dropdown>(),
            () => { return((int)CCPreferences.ImportTransformMode); },
            (intValue) => { CCPreferences.ImportTransformMode = (CCPreferences.ImportTransformModes)intValue; });
        importXFormMode.SetOptions(
            new List <string>()
        {
            "Auto-Center First", "Auto-Center All", "No Transformations"
        },
            new List <int>()
        {
            (int)CCPreferences.ImportTransformModes.AutoCenterFirst,
            (int)CCPreferences.ImportTransformModes.AutoCenterAll,
            (int)CCPreferences.ImportTransformModes.NoAutoCenter
        });
        importXFormMode.SetFromId((int)CCPreferences.ImportTransformMode);


        importAssistantMode = new MappedDropDown(
            this.gameObject.FindChildByName("ImportAssistantModeDropdown", true).GetComponent <Dropdown>(),
            () => { return((int)CCPreferences.ImportAssistantMode); },
            (intValue) => { CCPreferences.ImportAssistantMode = (CCPreferences.ImportAssistantModes)intValue; });
        importAssistantMode.SetOptions(
            new List <string>()
        {
            "All Assistants", "Mesh Size Only", "Dimensions Only", "Disabled"
        },
            new List <int>()
        {
            (int)CCPreferences.ImportAssistantModes.All,
            (int)CCPreferences.ImportAssistantModes.MeshSizeOnly,
            (int)CCPreferences.ImportAssistantModes.PhysicalSizeOnly,
            (int)CCPreferences.ImportAssistantModes.Disabled
        });
        importAssistantMode.SetFromId((int)CCPreferences.ImportAssistantMode);


        largeMeshSizeInput = UnityUIUtil.FindInputAndAddIntHandlers(this.gameObject, "LargeMeshSizeInput",
                                                                    () => { return(CCPreferences.LargeMeshImportThreshold); },
                                                                    (intValue) => { CCPreferences.LargeMeshImportThreshold = intValue; },
                                                                    10000, 999999999);
        largeMeshSizeInput.text = CCPreferences.LargeMeshImportThreshold.ToString();


        unityPolicyButton = UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "PrivacyPolicyButton", on_unity_privacy_policy);


        // about dialog
        UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "GradientspaceWebButton", on_open_gradientspace_site);
        UnityUIUtil.FindButtonAndAddClickHandler(this.gameObject, "CotangentWebButton", on_open_cotangent_site);


        on_prefs_tab();
    }