|
92 | 92 | BIN_HAS_SCOOP_INPUT_ID = 'bin_has_scoop' |
93 | 93 | BIN_SCOOP_MAX_RADIUS_INPUT_ID = 'bin_scoop_max_radius' |
94 | 94 | BIN_HAS_TAB_INPUT_ID = 'bin_has_tab' |
| 95 | +BIN_TAB_IS_HOLLOW_INPUT_ID = 'tab_is_hollow' |
95 | 96 | BIN_TAB_LENGTH_INPUT_ID = 'bin_tab_length' |
96 | 97 | BIN_TAB_WIDTH_INPUT_ID = 'bin_tab_width' |
97 | 98 | BIN_TAB_POSITION_INPUT_ID = 'bin_tab_position' |
| 99 | +BIN_TAB_LABEL_ANGLE_INPUT_ID = 'bin_tab_label_angle' |
98 | 100 | BIN_TAB_ANGLE_INPUT_ID = 'bin_tab_angle' |
99 | 101 | BIN_WITH_LIP_INPUT_ID = 'with_lip' |
100 | 102 | BIN_WITH_LIP_NOTCHES_INPUT_ID = 'with_lip_notches' |
@@ -177,10 +179,12 @@ def initDefaultUiState(): |
177 | 179 | commandUIState.initValue(BIN_SCOOP_MAX_RADIUS_INPUT_ID, const.BIN_SCOOP_MAX_RADIUS, adsk.core.ValueCommandInput.classType()) |
178 | 180 |
|
179 | 181 | commandUIState.initValue(BIN_HAS_TAB_INPUT_ID, False, adsk.core.BoolValueCommandInput.classType()) |
| 182 | + commandUIState.initValue(BIN_TAB_IS_HOLLOW_INPUT_ID, False, adsk.core.BoolValueCommandInput.classType()) |
180 | 183 | commandUIState.initValue(BIN_TAB_LENGTH_INPUT_ID, 1, adsk.core.ValueCommandInput.classType()) |
181 | 184 | commandUIState.initValue(BIN_TAB_WIDTH_INPUT_ID, const.BIN_TAB_WIDTH, adsk.core.ValueCommandInput.classType()) |
182 | 185 | commandUIState.initValue(BIN_TAB_POSITION_INPUT_ID, 0, adsk.core.ValueCommandInput.classType()) |
183 | | - commandUIState.initValue(BIN_TAB_ANGLE_INPUT_ID, '45 deg', adsk.core.ValueCommandInput.classType()) |
| 186 | + commandUIState.initValue(BIN_TAB_LABEL_ANGLE_INPUT_ID, f'{const.BIN_TAB_LABEL_ANGLE} DEG', adsk.core.ValueCommandInput.classType()) |
| 187 | + commandUIState.initValue(BIN_TAB_ANGLE_INPUT_ID, f'{const.BIN_TAB_OVERHANG_ANGLE} DEG', adsk.core.ValueCommandInput.classType()) |
184 | 188 |
|
185 | 189 | commandUIState.initValue(BIN_GENERATE_BASE_INPUT_ID, True, adsk.core.BoolValueCommandInput.classType()) |
186 | 190 | commandUIState.initValue(BIN_SCREW_HOLES_INPUT_ID, False, adsk.core.BoolValueCommandInput.classType()) |
@@ -449,6 +453,7 @@ def is_all_input_valid(inputs: adsk.core.CommandInputs): |
449 | 453 | binTabLength: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_LENGTH_INPUT_ID) |
450 | 454 | binTabWidth: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_WIDTH_INPUT_ID) |
451 | 455 | binTabPosition: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_POSITION_INPUT_ID) |
| 456 | + binTabLabelAngle: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_LABEL_ANGLE_INPUT_ID) |
452 | 457 | binTabAngle: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_ANGLE_INPUT_ID) |
453 | 458 | binTypeDropdownInput: adsk.core.DropDownCommandInput = inputs.itemById(BIN_TYPE_DROPDOWN_ID) |
454 | 459 | binCompartmentGridTypeDropdownInput: adsk.core.DropDownCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_TYPE_ID) |
@@ -603,12 +608,20 @@ def command_created(args: adsk.core.CommandCreatedEventArgs): |
603 | 608 | commandUIState.registerCommandInput(binTabFeaturesGroup) |
604 | 609 | generateTabCheckboxinput = binTabFeaturesGroup.children.addBoolValueInput(BIN_HAS_TAB_INPUT_ID, 'Add label tab (along bin width)', True, '', commandUIState.getState(BIN_HAS_TAB_INPUT_ID)) |
605 | 610 | commandUIState.registerCommandInput(generateTabCheckboxinput) |
| 611 | + binTabIsHollowInput = binTabFeaturesGroup.children.addBoolValueInput(BIN_TAB_IS_HOLLOW_INPUT_ID, 'Hollow tab', True, '', commandUIState.getState(BIN_TAB_IS_HOLLOW_INPUT_ID)) |
| 612 | + commandUIState.registerCommandInput(binTabIsHollowInput) |
606 | 613 | binTabLengthInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_LENGTH_INPUT_ID, 'Tab length (u)', '', adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_TAB_LENGTH_INPUT_ID))) |
607 | 614 | commandUIState.registerCommandInput(binTabLengthInput) |
608 | 615 | binTabWidthInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_WIDTH_INPUT_ID, 'Tab width (mm)', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_TAB_WIDTH_INPUT_ID))) |
609 | 616 | commandUIState.registerCommandInput(binTabWidthInput) |
610 | 617 | binTabPostionInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_POSITION_INPUT_ID, 'Tab offset (u)', '', adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_TAB_POSITION_INPUT_ID))) |
611 | 618 | commandUIState.registerCommandInput(binTabPostionInput) |
| 619 | + binTabLabelAngleInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_LABEL_ANGLE_INPUT_ID, 'Tab label angle', 'deg', adsk.core.ValueInput.createByString(str(commandUIState.getState(BIN_TAB_LABEL_ANGLE_INPUT_ID)))) |
| 620 | + binTabLabelAngleInput.minimumValue = math.radians(0) |
| 621 | + binTabLabelAngleInput.isMinimumInclusive = True |
| 622 | + binTabLabelAngleInput.maximumValue = math.radians(90) |
| 623 | + binTabLabelAngleInput.isMaximumInclusive = True |
| 624 | + commandUIState.registerCommandInput(binTabLabelAngleInput) |
612 | 625 | tabObverhangAngleInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_ANGLE_INPUT_ID, 'Tab overhang angle', 'deg', adsk.core.ValueInput.createByString(str(commandUIState.getState(BIN_TAB_ANGLE_INPUT_ID)))) |
613 | 626 | tabObverhangAngleInput.minimumValue = math.radians(30) |
614 | 627 | tabObverhangAngleInput.isMinimumInclusive = True |
@@ -821,8 +834,10 @@ def onChangeValidate(): |
821 | 834 | commandUIState.getInput(BIN_SCOOP_MAX_RADIUS_INPUT_ID).isEnabled = generateScoop |
822 | 835 |
|
823 | 836 | generateTab: bool = commandUIState.getState(BIN_HAS_TAB_INPUT_ID) |
| 837 | + commandUIState.getInput(BIN_TAB_IS_HOLLOW_INPUT_ID).isEnabled = generateTab |
824 | 838 | commandUIState.getInput(BIN_TAB_LENGTH_INPUT_ID).isEnabled = generateTab |
825 | 839 | commandUIState.getInput(BIN_TAB_WIDTH_INPUT_ID).isEnabled = generateTab |
| 840 | + commandUIState.getInput(BIN_TAB_LABEL_ANGLE_INPUT_ID).isEnabled = generateTab |
826 | 841 | commandUIState.getInput(BIN_TAB_ANGLE_INPUT_ID).isEnabled = generateTab |
827 | 842 | commandUIState.getInput(BIN_TAB_POSITION_INPUT_ID).isEnabled = generateTab |
828 | 843 |
|
@@ -866,9 +881,11 @@ def generateBin(args: adsk.core.CommandEventArgs): |
866 | 881 | has_scoop: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_SCOOP_INPUT_ID) |
867 | 882 | binScoopMaxRadius: adsk.core.ValueCommandInput = inputs.itemById(BIN_SCOOP_MAX_RADIUS_INPUT_ID) |
868 | 883 | hasTabInput: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_TAB_INPUT_ID) |
| 884 | + binTabIsHollow: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_TAB_IS_HOLLOW_INPUT_ID) |
869 | 885 | binTabLength: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_LENGTH_INPUT_ID) |
870 | 886 | binTabWidth: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_WIDTH_INPUT_ID) |
871 | 887 | binTabPosition: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_POSITION_INPUT_ID) |
| 888 | + binTabLabelAngle: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_LABEL_ANGLE_INPUT_ID) |
872 | 889 | binTabAngle: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_ANGLE_INPUT_ID) |
873 | 890 | binTypeDropdownInput: adsk.core.DropDownCommandInput = inputs.itemById(BIN_TYPE_DROPDOWN_ID) |
874 | 891 | binCompartmentGridTypeDropdownInput: adsk.core.DropDownCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_TYPE_ID) |
@@ -938,9 +955,11 @@ def generateBin(args: adsk.core.CommandEventArgs): |
938 | 955 | binBodyInput.hasScoop = has_scoop.value and isHollow |
939 | 956 | binBodyInput.scoopMaxRadius = binScoopMaxRadius.value |
940 | 957 | binBodyInput.hasTab = hasTabInput.value and isHollow |
| 958 | + binBodyInput.isTabHollow = binTabIsHollow.value |
941 | 959 | binBodyInput.tabLength = binTabLength.value |
942 | 960 | binBodyInput.tabWidth = binTabWidth.value |
943 | 961 | binBodyInput.tabPosition = binTabPosition.value |
| 962 | + binBodyInput.tabLabelAngle = binTabLabelAngle.value |
944 | 963 | binBodyInput.tabOverhangAngle = binTabAngle.value |
945 | 964 | binBodyInput.compartmentsByX = compartmentsX.value |
946 | 965 | binBodyInput.compartmentsByY = compartmentsY.value |
@@ -1017,9 +1036,11 @@ def generateBin(args: adsk.core.CommandEventArgs): |
1017 | 1036 | compartmentTabInput.origin = tabOriginPoint |
1018 | 1037 | compartmentTabInput.length = max(0, min(binBodyInput.tabLength, binBodyInput.binWidth)) * binBodyInput.baseWidth - binBodyInput.wallThickness * 2 - binBodyInput.xyClearance * 2 |
1019 | 1038 | compartmentTabInput.width = binBodyInput.tabWidth |
| 1039 | + compartmentTabInput.isTabHollow = binBodyInput.isTabHollow |
| 1040 | + compartmentTabInput.labelAngle = binBodyInput.tabLabelAngle |
1020 | 1041 | compartmentTabInput.overhangAngle = binBodyInput.tabOverhangAngle |
1021 | 1042 | compartmentTabInput.topClearance = const.BIN_TAB_TOP_CLEARANCE |
1022 | | - tabBody = createGridfinityBinBodyTab(compartmentTabInput, gridfinityBinComponent) |
| 1043 | + tabBody, tabBodiesToSubtract = createGridfinityBinBodyTab(compartmentTabInput, gridfinityBinComponent) |
1023 | 1044 | combineInput = combineFeatures.createInput(tabBody, commonUtils.objectCollectionFromList([binBody])) |
1024 | 1045 | combineInput.operation = adsk.fusion.FeatureOperations.CutFeatureOperation |
1025 | 1046 | combineInput.isKeepToolBodies = True |
|
0 commit comments