diff --git a/commands/commandCreateBin/entry.py b/commands/commandCreateBin/entry.py index 927f5e2..e48e9db 100644 --- a/commands/commandCreateBin/entry.py +++ b/commands/commandCreateBin/entry.py @@ -92,6 +92,16 @@ BIN_HAS_SCOOP_INPUT_ID = 'bin_has_scoop' BIN_SCOOP_MAX_RADIUS_INPUT_ID = 'bin_scoop_max_radius' BIN_HAS_TAB_INPUT_ID = 'bin_has_tab' +BIN_TAB_COMPARTMETS_INPUT_ID = 'bin_tab_compartments' +BIN_TAB_COMPARTMETS_ALL = 'All compartments' +BIN_TAB_COMPARTMETS_TOP_LEFT = 'Top left compartment' +BIN_TAB_COMPARTMETS_TOP_RIGHT = 'Top right compartment' +BIN_TAB_COMPARTMETS_BOTTOM_LEFT = 'Bottom left compartment' +BIN_TAB_COMPARTMETS_BOTTOM_RIGHT = 'Bottom right compartment' +BIN_TAB_COMPARTMETS_TOP = 'Top compartments' +BIN_TAB_COMPARTMETS_BOTTOM = 'Bottom compartments' +BIN_TAB_COMPARTMETS_LEFT = 'Left compartments' +BIN_TAB_COMPARTMETS_RIGHT = 'Right compartments' BIN_TAB_LENGTH_INPUT_ID = 'bin_tab_length' BIN_TAB_WIDTH_INPUT_ID = 'bin_tab_width' BIN_TAB_POSITION_INPUT_ID = 'bin_tab_position' @@ -177,6 +187,7 @@ def initDefaultUiState(): commandUIState.initValue(BIN_SCOOP_MAX_RADIUS_INPUT_ID, const.BIN_SCOOP_MAX_RADIUS, adsk.core.ValueCommandInput.classType()) commandUIState.initValue(BIN_HAS_TAB_INPUT_ID, False, adsk.core.BoolValueCommandInput.classType()) + commandUIState.initValue(BIN_TAB_COMPARTMETS_INPUT_ID, BIN_TAB_COMPARTMETS_ALL, adsk.core.DropDownCommandInput.classType()) commandUIState.initValue(BIN_TAB_LENGTH_INPUT_ID, 1, adsk.core.ValueCommandInput.classType()) commandUIState.initValue(BIN_TAB_WIDTH_INPUT_ID, const.BIN_TAB_WIDTH, adsk.core.ValueCommandInput.classType()) commandUIState.initValue(BIN_TAB_POSITION_INPUT_ID, 0, adsk.core.ValueCommandInput.classType()) @@ -603,6 +614,18 @@ def command_created(args: adsk.core.CommandCreatedEventArgs): commandUIState.registerCommandInput(binTabFeaturesGroup) generateTabCheckboxinput = binTabFeaturesGroup.children.addBoolValueInput(BIN_HAS_TAB_INPUT_ID, 'Add label tab (along bin width)', True, '', commandUIState.getState(BIN_HAS_TAB_INPUT_ID)) commandUIState.registerCommandInput(generateTabCheckboxinput) + tabCompartmentsDropdown = binTabFeaturesGroup.children.addDropDownCommandInput(BIN_TAB_COMPARTMETS_INPUT_ID, "Tab Position", adsk.core.DropDownStyles.LabeledIconDropDownStyle) + tabCompartmentsDropdownDefaultValue = commandUIState.getState(BIN_TAB_COMPARTMETS_INPUT_ID) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_ALL, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_ALL) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_TOP_LEFT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_TOP_LEFT) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_TOP_RIGHT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_TOP_RIGHT) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_BOTTOM_LEFT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_BOTTOM_LEFT) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_BOTTOM_RIGHT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_BOTTOM_RIGHT) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_TOP, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_TOP) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_BOTTOM, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_BOTTOM) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_LEFT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_LEFT) + tabCompartmentsDropdown.listItems.add(BIN_TAB_COMPARTMETS_RIGHT, tabCompartmentsDropdownDefaultValue == BIN_TAB_COMPARTMETS_RIGHT) + commandUIState.registerCommandInput(tabCompartmentsDropdown) binTabLengthInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_LENGTH_INPUT_ID, 'Tab length (u)', '', adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_TAB_LENGTH_INPUT_ID))) commandUIState.registerCommandInput(binTabLengthInput) binTabWidthInput = binTabFeaturesGroup.children.addValueInput(BIN_TAB_WIDTH_INPUT_ID, 'Tab width (mm)', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_TAB_WIDTH_INPUT_ID))) @@ -821,6 +844,7 @@ def onChangeValidate(): commandUIState.getInput(BIN_SCOOP_MAX_RADIUS_INPUT_ID).isEnabled = generateScoop generateTab: bool = commandUIState.getState(BIN_HAS_TAB_INPUT_ID) + commandUIState.getInput(BIN_TAB_COMPARTMETS_INPUT_ID).isEnabled = generateTab commandUIState.getInput(BIN_TAB_LENGTH_INPUT_ID).isEnabled = generateTab commandUIState.getInput(BIN_TAB_WIDTH_INPUT_ID).isEnabled = generateTab commandUIState.getInput(BIN_TAB_ANGLE_INPUT_ID).isEnabled = generateTab @@ -866,6 +890,7 @@ def generateBin(args: adsk.core.CommandEventArgs): has_scoop: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_SCOOP_INPUT_ID) binScoopMaxRadius: adsk.core.ValueCommandInput = inputs.itemById(BIN_SCOOP_MAX_RADIUS_INPUT_ID) hasTabInput: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_TAB_INPUT_ID) + tabCompartmentsInput: adsk.core.DropDownCommandInput = inputs.itemById(BIN_TAB_COMPARTMETS_INPUT_ID) binTabLength: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_LENGTH_INPUT_ID) binTabWidth: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_WIDTH_INPUT_ID) binTabPosition: adsk.core.ValueCommandInput = inputs.itemById(BIN_TAB_POSITION_INPUT_ID) @@ -938,6 +963,7 @@ def generateBin(args: adsk.core.CommandEventArgs): binBodyInput.hasScoop = has_scoop.value and isHollow binBodyInput.scoopMaxRadius = binScoopMaxRadius.value binBodyInput.hasTab = hasTabInput.value and isHollow + binBodyInput.tabCompartments = tabCompartmentsInput.selectedItem.index binBodyInput.tabLength = binTabLength.value binBodyInput.tabWidth = binTabWidth.value binBodyInput.tabPosition = binTabPosition.value diff --git a/lib/gridfinityUtils/binBodyCutoutGeneratorInput.py b/lib/gridfinityUtils/binBodyCutoutGeneratorInput.py index 254a63a..6482533 100644 --- a/lib/gridfinityUtils/binBodyCutoutGeneratorInput.py +++ b/lib/gridfinityUtils/binBodyCutoutGeneratorInput.py @@ -85,6 +85,14 @@ def hasTab(self) -> bool: def hasTab(self, value: bool): self._hasTab = value + @property + def tabCompartments(self) -> int: + return self._tabCompartments + + @tabCompartments.setter + def tabCompartments(self, value: int): + self._tabCompartments = value + @property def tabWidth(self) -> float: return self._tabWidth diff --git a/lib/gridfinityUtils/binBodyGenerator.py b/lib/gridfinityUtils/binBodyGenerator.py index fa13ecc..032d040 100644 --- a/lib/gridfinityUtils/binBodyGenerator.py +++ b/lib/gridfinityUtils/binBodyGenerator.py @@ -145,6 +145,26 @@ def createGridfinityBinBody( compartmentTabInput.overhangAngle = input.tabOverhangAngle compartmentTabInput.topClearance = const.BIN_TAB_TOP_CLEARANCE + hasTab = False + if input.hasTab: + if input.tabCompartments == 0: + hasTab = True + elif input.tabCompartments == 1 and compartment.positionX == 0 and compartment.positionY == (input.compartmentsByY - 1): + hasTab = True + elif input.tabCompartments == 2 and compartment.positionX == (input.compartmentsByX - 1) and compartment.positionY == (input.compartmentsByY - 1): + hasTab = True + elif input.tabCompartments == 3 and compartment.positionX == 0 and compartment.positionY == 0: + hasTab = True + elif input.tabCompartments == 4 and compartment.positionX == (input.compartmentsByX - 1) and compartment.positionY == 0: + hasTab = True + elif input.tabCompartments == 5 and compartment.positionY == (input.compartmentsByY - 1): + hasTab = True + elif input.tabCompartments == 6 and compartment.positionY == 0: + hasTab = True + elif input.tabCompartments == 7 and compartment.positionX == 0: + hasTab = True + elif input.tabCompartments == 8 and compartment.positionX == (input.compartmentsByX - 1): + hasTab = True [compartmentMerges, compartmentCuts] = createCompartment( input.wallThickness, compartmentOriginPoint, @@ -154,7 +174,7 @@ def createGridfinityBinBody( input.binCornerFilletRadius - input.wallThickness, input.hasScoop, input.scoopMaxRadius, - input.hasTab, + hasTab, compartmentTabInput, targetComponent, ) diff --git a/lib/gridfinityUtils/binBodyGeneratorInput.py b/lib/gridfinityUtils/binBodyGeneratorInput.py index 40eed7c..4642664 100644 --- a/lib/gridfinityUtils/binBodyGeneratorInput.py +++ b/lib/gridfinityUtils/binBodyGeneratorInput.py @@ -188,6 +188,14 @@ def hasTab(self) -> bool: def hasTab(self, value: bool): self._hasTab = value + @property + def tabCompartments(self) -> int: + return self._tabCompartments + + @tabCompartments.setter + def tabCompartments(self, value: int): + self._tabCompartments = value + @property def tabWidth(self) -> float: return self._tabWidth