Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion GridfinityGenerator.manifest
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"description": {
"": ""
},
"version": "1.4.2.0",
"version": "1.4.4.0",
"runOnStartup": true,
"supportedOS": "windows|mac",
"editEnabled": true
Expand Down
52 changes: 51 additions & 1 deletion commands/commandCreateBaseplate/entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
CMD_Description = 'Create gridfinity baseplate'

uiState = CommandUiState(CMD_NAME)
actualPlateDimensionsTableUiState = CommandUiState(CMD_NAME)
# Specify that the command will be promoted to the panel.
IS_PROMOTED = True

Expand Down Expand Up @@ -64,6 +65,10 @@
BASEPLATE_LENGTH_INPUT = 'plate_length'
BASEPLATE_TYPE_DROPDOWN = 'plate_type_dropdown'

BASEPLATE_REAL_DIMENSIONS_TABLE = "plate_real_dimensions"
BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_WIDTH = "plate_total_real_width"
BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_LENGTH = "plate_total_real_length"

BASEPLATE_TYPE_LIGHT = 'Light'
BASEPLATE_TYPE_FULL = 'Full'
BASEPLATE_TYPE_SKELETONIZED = 'Skeletonized'
Expand Down Expand Up @@ -164,6 +169,45 @@ def stop():
command_definition.deleteMe()


def render_actual_plate_dimensions_table(inputs: adsk.core.CommandInputs):
global actualPlateDimensionsTableUiState
actualPlateDimensionsTable = inputs.addTableCommandInput(BASEPLATE_REAL_DIMENSIONS_TABLE, "Actual dimensions (mm)", 3, "1:1:1")
totalWidth = actualPlateDimensionsTable.commandInputs.addStringValueInput(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_WIDTH, "", "Width")
totalWidth.isReadOnly = True
actualPlateDimensionsTableUiState.registerCommandInput(totalWidth)
actualPlateDimensionsTableUiState.initValue(totalWidth.id, "", totalWidth.objectType)
totalLength = actualPlateDimensionsTable.commandInputs.addStringValueInput(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_LENGTH, "", "Length")
totalLength.isReadOnly = True
actualPlateDimensionsTableUiState.registerCommandInput(totalLength)
actualPlateDimensionsTableUiState.initValue(totalLength.id, "", totalLength.objectType)
actualPlateDimensionsTable.addCommandInput(totalWidth, 0, 0)
actualPlateDimensionsTable.addCommandInput(totalLength, 0, 1)
actualPlateDimensionsTable.tooltip = 'Actual baseplate dimensions'
actualPlateDimensionsTable.tablePresentationStyle = adsk.core.TablePresentationStyles.transparentBackgroundTablePresentationStyle
actualPlateDimensionsTable.hasGrid = False
actualPlateDimensionsTable.minimumVisibleRows = 1
actualPlateDimensionsTable.maximumVisibleRows = 1
return actualPlateDimensionsTable

def update_actual_plate_dimensions():
global actualPlateDimensionsTableUiState
try:
actualWidth = uiState.getState(BASEPLATE_BASE_UNIT_WIDTH_INPUT) * uiState.getState(BASEPLATE_WIDTH_INPUT) - uiState.getState(BIN_XY_CLEARANCE_INPUT_ID) * 2
actualLength = uiState.getState(BASEPLATE_BASE_UNIT_LENGTH_INPUT) * uiState.getState(BASEPLATE_LENGTH_INPUT) - uiState.getState(BIN_XY_CLEARANCE_INPUT_ID) * 2
if uiState.getState(BASEPLATE_WITH_SIDE_PADDING_INPUT):
actualWidth += uiState.getState(BASEPLATE_SIDE_PADDING_LEFT_INPUT) + uiState.getState(BASEPLATE_SIDE_PADDING_RIGHT_INPUT)
actualLength += uiState.getState(BASEPLATE_SIDE_PADDING_TOP_INPUT) + uiState.getState(BASEPLATE_SIDE_PADDING_BOTTOM_INPUT)

totalWidthValue = round(actualWidth * 10, 2)
totalLengthValue = round(actualLength * 10, 2)
actualPlateDimensionsTableUiState.updateValue(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_WIDTH, f'Width: {totalWidthValue}mm')
actualPlateDimensionsTableUiState.getInput(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_WIDTH).tooltip = f'Total bin height: {totalWidthValue}mm'
actualPlateDimensionsTableUiState.updateValue(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_LENGTH, f'Length: {totalLengthValue}mm')
actualPlateDimensionsTableUiState.getInput(BASEPLATE_REAL_DIMENSIONS_TABLE_TOTAL_LENGTH).tooltip = f'Total bin length: {totalLengthValue}mm'
except:
showErrorInMessageBox()


# Function that is called when a user clicks the corresponding button in the UI.
# This defines the contents of the command dialog and connects to the command related events.
def command_created(args: adsk.core.CommandCreatedEventArgs):
Expand Down Expand Up @@ -211,6 +255,8 @@ def command_created(args: adsk.core.CommandCreatedEventArgs):
baseplateLengthInput = mainDimensionsGroup.children.addIntegerSpinnerCommandInput(BASEPLATE_LENGTH_INPUT, 'Plate length, Y (u)', 1, 100, 1, uiState.getState(BASEPLATE_LENGTH_INPUT))
uiState.registerCommandInput(baseplateLengthInput)

render_actual_plate_dimensions_table(mainDimensionsGroup.children)

plateFeaturesGroup = inputs.addGroupCommandInput(PLATE_FEATURES_GROUP, 'Features')
plateFeaturesGroup.isExpanded = uiState.getState(PLATE_FEATURES_GROUP)
uiState.registerCommandInput(plateFeaturesGroup)
Expand Down Expand Up @@ -254,7 +300,7 @@ def command_created(args: adsk.core.CommandCreatedEventArgs):
sidePaddingGroup = plateFeaturesGroup.children.addGroupCommandInput(SIDE_PADDING_GROUP, 'Side padding')
sidePaddingGroup.isExpanded = uiState.getState(SIDE_PADDING_GROUP)
uiState.registerCommandInput(sidePaddingGroup)
generateSidePaddingInput = sidePaddingGroup.children.addBoolValueInput(BASEPLATE_WITH_SIDE_PADDING_INPUT, 'Add side padding', True, '', uiState.getState(BASEPLATE_WITH_SIDE_PADDING_INPUT))
generateSidePaddingInput = sidePaddingGroup.children.addBoolValueInput(BASEPLATE_WITH_SIDE_PADDING_INPUT, 'Add padding', True, '', uiState.getState(BASEPLATE_WITH_SIDE_PADDING_INPUT))
uiState.registerCommandInput(generateSidePaddingInput)

sidePaddingLeftInput = sidePaddingGroup.children.addValueInput(BASEPLATE_SIDE_PADDING_LEFT_INPUT, 'Padding left', defaultLengthUnits, adsk.core.ValueInput.createByReal(uiState.getState(BASEPLATE_SIDE_PADDING_LEFT_INPUT)))
Expand Down Expand Up @@ -321,6 +367,8 @@ def command_created(args: adsk.core.CommandCreatedEventArgs):
showLivePreview = previewGroup.children.addBoolValueInput(SHOW_PREVIEW_INPUT, 'Show preview (slow)', True, '', uiState.getState(SHOW_PREVIEW_INPUT))
uiState.registerCommandInput(showLivePreview)

update_actual_plate_dimensions()

futil.add_handler(args.command.execute, command_execute, local_handlers=local_handlers)
futil.add_handler(args.command.inputChanged, command_input_changed, local_handlers=local_handlers)
futil.add_handler(args.command.executePreview, command_preview, local_handlers=local_handlers)
Expand Down Expand Up @@ -374,6 +422,7 @@ def command_input_changed(args: adsk.core.InputChangedEventArgs):
uiState.forceUIRefresh()

inputs = args.inputs
update_actual_plate_dimensions()

# General logging for debug.
futil.log(f'{CMD_NAME} Input Changed Event fired from a change to {changed_input.id}')
Expand Down Expand Up @@ -473,6 +522,7 @@ def generateBaseplate(args: adsk.core.CommandEventArgs):

def initUiState():
global uiState
global actualPlateDimensionsTableUiState
uiState.initValue(INFO_GROUP, True, adsk.core.GroupCommandInput.classType())
uiState.initValue(BASIC_SIZES_GROUP, True, adsk.core.GroupCommandInput.classType())
uiState.initValue(XY_DIMENSIONS_GROUP, True, adsk.core.GroupCommandInput.classType())
Expand Down
71 changes: 68 additions & 3 deletions commands/commandCreateBin/entry.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
BIN_SCOOP_GROUP_ID = 'bin_scoop_group'
BIN_TAB_FEATURES_GROUP_ID = 'bin_tab_features_group'
BIN_BASE_FEATURES_GROUP_ID = 'bin_base_features_group'
BIN_PADDING_GROUP_ID = 'bin_padding_group'
USER_CHANGES_GROUP_ID = 'user_changes_group'
PREVIEW_GROUP_ID = 'preview_group'
INFO_GROUP = 'info_group'
Expand Down Expand Up @@ -117,6 +118,11 @@
BIN_TYPE_HOLLOW = 'Hollow'
BIN_TYPE_SHELLED = 'Shelled'
BIN_TYPE_SOLID = 'Solid'
BIN_HAS_PADDING_INPUT_ID = 'bin_has_padding'
BIN_PADDING_LEFT_INPUT_ID = 'bin_padding_left'
BIN_PADDING_TOP_INPUT_ID = 'bin_padding_top'
BIN_PADDING_RIGHT_INPUT_ID = 'bin_padding_right'
BIN_PADDING_BOTTOM_INPUT_ID = 'bin_padding_bottom'

INPUT_CHANGES_SAVE_DEFAULTS = 'input_changes_buttons_save_new_defaults'
INPUT_CHANGES_RESET_TO_DEFAULTS = 'input_changes_button_reset_to_defaults'
Expand Down Expand Up @@ -152,6 +158,7 @@ def initDefaultUiState():
commandUIState.initValue(BIN_SCOOP_GROUP_ID, True, adsk.core.GroupCommandInput.classType())
commandUIState.initValue(BIN_TAB_FEATURES_GROUP_ID, True, adsk.core.GroupCommandInput.classType())
commandUIState.initValue(BIN_BASE_FEATURES_GROUP_ID, True, adsk.core.GroupCommandInput.classType())
commandUIState.initValue(BIN_PADDING_GROUP_ID, True, adsk.core.GroupCommandInput.classType())
commandUIState.initValue(USER_CHANGES_GROUP_ID, True, adsk.core.GroupCommandInput.classType())
commandUIState.initValue(PREVIEW_GROUP_ID, True, adsk.core.GroupCommandInput.classType())

Expand Down Expand Up @@ -191,6 +198,12 @@ def initDefaultUiState():
commandUIState.initValue(BIN_MAGNET_DIAMETER_INPUT, const.DIMENSION_MAGNET_CUTOUT_DIAMETER, adsk.core.ValueCommandInput.classType())
commandUIState.initValue(BIN_MAGNET_HEIGHT_INPUT, const.DIMENSION_MAGNET_CUTOUT_DEPTH, adsk.core.ValueCommandInput.classType())

commandUIState.initValue(BIN_HAS_PADDING_INPUT_ID, False, adsk.core.BoolValueCommandInput.classType())
commandUIState.initValue(BIN_PADDING_LEFT_INPUT_ID, 0, adsk.core.ValueCommandInput.classType())
commandUIState.initValue(BIN_PADDING_TOP_INPUT_ID, 0, adsk.core.ValueCommandInput.classType())
commandUIState.initValue(BIN_PADDING_RIGHT_INPUT_ID, 0, adsk.core.ValueCommandInput.classType())
commandUIState.initValue(BIN_PADDING_BOTTOM_INPUT_ID, 0, adsk.core.ValueCommandInput.classType())

commandCompartmentsTableUIState = []
recordedDefaults = configUtils.readJsonConfig(UI_INPUT_DEFAULTS_CONFIG_PATH)
if recordedDefaults is not None and 'static_ui' in recordedDefaults and 'compartments_table' in recordedDefaults:
Expand Down Expand Up @@ -332,15 +345,19 @@ def update_actual_compartment_unit_dimensions():
baseLength: float = commandUIState.getState(BIN_BASE_LENGTH_UNIT_INPUT_ID)
binWidth: float = commandUIState.getState(BIN_WIDTH_INPUT_ID)
binLength: float = commandUIState.getState(BIN_LENGTH_INPUT_ID)
binPaddingLeft: float = commandUIState.getState(BIN_PADDING_LEFT_INPUT_ID) if commandUIState.getState(BIN_HAS_PADDING_INPUT_ID) else 0
binPaddingTop: float = commandUIState.getState(BIN_PADDING_TOP_INPUT_ID) if commandUIState.getState(BIN_HAS_PADDING_INPUT_ID) else 0
binPaddingRight: float = commandUIState.getState(BIN_PADDING_RIGHT_INPUT_ID) if commandUIState.getState(BIN_HAS_PADDING_INPUT_ID) else 0
binPaddingBottom: float = commandUIState.getState(BIN_PADDING_BOTTOM_INPUT_ID) if commandUIState.getState(BIN_HAS_PADDING_INPUT_ID) else 0
gridWidth: int = commandUIState.getState(BIN_COMPARTMENTS_GRID_BASE_WIDTH_ID)
gridLength: int = commandUIState.getState(BIN_COMPARTMENTS_GRID_BASE_LENGTH_ID)
wallThickness: float = commandUIState.getState(BIN_WALL_THICKNESS_INPUT_ID)
xyClearance: float = commandUIState.getState(BIN_WITH_LIP_INPUT_ID)
try:
minCompartmentDimensionLimit = (const.BIN_CORNER_FILLET_RADIUS - wallThickness) * 2 * 10
cellWidth = round((baseWidth * binWidth - wallThickness * 2 - xyClearance * 2 - wallThickness * (gridWidth - 1)) / gridWidth * 10, 2)
cellWidth = round((baseWidth * binWidth + binPaddingLeft + binPaddingRight - wallThickness * 2 - xyClearance * 2 - wallThickness * (gridWidth - 1)) / gridWidth * 10, 2)
actualCompartmentDimensionsUiState.updateValue(BIN_COMPARTMENT_REAL_DIMENSIONS_WIDTH, formatString(f'Grid cell width: {cellWidth}mm', '' if cellWidth >= minCompartmentDimensionLimit else 'red'))
cellLength = round((baseLength * binLength - wallThickness * 2 - xyClearance * 2 - wallThickness * (gridLength - 1)) / gridLength * 10, 2)
cellLength = round((baseLength * binLength + binPaddingTop + binPaddingBottom - wallThickness * 2 - xyClearance * 2 - wallThickness * (gridLength - 1)) / gridLength * 10, 2)
actualCompartmentDimensionsUiState.updateValue(BIN_COMPARTMENT_REAL_DIMENSIONS_LENGTH, formatString(f'Grid cell length: {cellLength}mm', '' if cellLength >= minCompartmentDimensionLimit else 'red'))
except:
showErrorInMessageBox()
Expand All @@ -350,7 +367,11 @@ def update_actual_bin_dimensions():
try:
actualWidth = commandUIState.getState(BIN_BASE_WIDTH_UNIT_INPUT_ID) * commandUIState.getState(BIN_WIDTH_INPUT_ID) - const.BIN_XY_CLEARANCE * 2
actualLength = commandUIState.getState(BIN_BASE_LENGTH_UNIT_INPUT_ID) * commandUIState.getState(BIN_LENGTH_INPUT_ID) - const.BIN_XY_CLEARANCE * 2
actualHeight = commandUIState.getState(BIN_HEIGHT_UNIT_INPUT_ID) * commandUIState.getState(BIN_HEIGHT_INPUT_ID) + ((const.BIN_LIP_EXTRA_HEIGHT - const.BIN_LIP_TOP_RECESS_HEIGHT) if commandUIState.getState(BIN_WITH_LIP_INPUT_ID) else 0)
actualHeight = commandUIState.getState(BIN_HEIGHT_UNIT_INPUT_ID) * commandUIState.getState(BIN_HEIGHT_INPUT_ID) + ((const.BIN_LIP_EXTRA_HEIGHT - const.BIN_LIP_TOP_RECESS_HEIGHT) if commandUIState.getState(BIN_WITH_LIP_INPUT_ID) else 0)
if commandUIState.getState(BIN_HAS_PADDING_INPUT_ID):
actualWidth += commandUIState.getState(BIN_PADDING_LEFT_INPUT_ID) + commandUIState.getState(BIN_PADDING_RIGHT_INPUT_ID)
actualLength += commandUIState.getState(BIN_PADDING_TOP_INPUT_ID) + commandUIState.getState(BIN_PADDING_BOTTOM_INPUT_ID)

totalWidthValue = round(actualWidth * 10, 2)
totalLengthValue = round(actualLength * 10, 2)
totalHeightValue = round(actualHeight * 10, 2)
Expand Down Expand Up @@ -463,6 +484,11 @@ def is_all_input_valid(inputs: adsk.core.CommandInputs):
binCompartmentsTable: adsk.core.TableCommandInput = inputs.itemById(BIN_COMPARTMENTS_TABLE_ID)
compartmentsX: adsk.core.IntegerSpinnerCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_BASE_WIDTH_ID)
compartmentsY: adsk.core.IntegerSpinnerCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_BASE_LENGTH_ID)
has_padding: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_PADDING_INPUT_ID)
padding_left: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_LEFT_INPUT_ID)
padding_top: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_TOP_INPUT_ID)
padding_right: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_RIGHT_INPUT_ID)
padding_bottom: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_BOTTOM_INPUT_ID)

result = result and base_width_unit.value > 1
result = result and base_length_unit.value > 1
Expand Down Expand Up @@ -655,6 +681,28 @@ def command_created(args: adsk.core.CommandCreatedEventArgs):
magnetHeightInput.isMinimumInclusive = True
commandUIState.registerCommandInput(magnetHeightInput)

paddingGroup = inputs.addGroupCommandInput(BIN_PADDING_GROUP_ID, 'Side padding')
paddingGroup.isExpanded = commandUIState.getState(BIN_PADDING_GROUP_ID)
commandUIState.registerCommandInput(paddingGroup)
hasPaddingCheckboxInput = paddingGroup.children.addBoolValueInput(BIN_HAS_PADDING_INPUT_ID, 'Add padding', True, '', commandUIState.getState(BIN_HAS_PADDING_INPUT_ID))
commandUIState.registerCommandInput(hasPaddingCheckboxInput)
paddingLeftInput = paddingGroup.children.addValueInput(BIN_PADDING_LEFT_INPUT_ID, 'Padding left', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_PADDING_LEFT_INPUT_ID)))
paddingLeftInput.minimumValue = 0
paddingLeftInput.isMinimumInclusive = True
commandUIState.registerCommandInput(paddingLeftInput)
paddingTopInput = paddingGroup.children.addValueInput(BIN_PADDING_TOP_INPUT_ID, 'Padding top', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_PADDING_TOP_INPUT_ID)))
paddingTopInput.minimumValue = 0
paddingTopInput.isMinimumInclusive = True
commandUIState.registerCommandInput(paddingTopInput)
paddingRightInput = paddingGroup.children.addValueInput(BIN_PADDING_RIGHT_INPUT_ID, 'Padding right', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_PADDING_RIGHT_INPUT_ID)))
paddingRightInput.minimumValue = 0
paddingRightInput.isMinimumInclusive = True
commandUIState.registerCommandInput(paddingRightInput)
paddingBottomInput = paddingGroup.children.addValueInput(BIN_PADDING_BOTTOM_INPUT_ID, 'Padding bottom', defaultLengthUnits, adsk.core.ValueInput.createByReal(commandUIState.getState(BIN_PADDING_BOTTOM_INPUT_ID)))
paddingBottomInput.minimumValue = 0
paddingBottomInput.isMinimumInclusive = True
commandUIState.registerCommandInput(paddingBottomInput)

userChangesGroup = inputs.addGroupCommandInput(USER_CHANGES_GROUP_ID, 'Changes')
userChangesGroup.isExpanded = commandUIState.getState(USER_CHANGES_GROUP_ID)
commandUIState.registerCommandInput(userChangesGroup)
Expand Down Expand Up @@ -883,6 +931,12 @@ def generateBin(args: adsk.core.CommandEventArgs):
binCompartmentsTable: adsk.core.TableCommandInput = inputs.itemById(BIN_COMPARTMENTS_TABLE_ID)
compartmentsX: adsk.core.IntegerSpinnerCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_BASE_WIDTH_ID)
compartmentsY: adsk.core.IntegerSpinnerCommandInput = inputs.itemById(BIN_COMPARTMENTS_GRID_BASE_LENGTH_ID)
bin_padding: adsk.core.BoolValueCommandInput = inputs.itemById(BIN_HAS_PADDING_INPUT_ID)
bin_padding_left: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_LEFT_INPUT_ID)
bin_padding_top: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_TOP_INPUT_ID)
bin_padding_right: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_RIGHT_INPUT_ID)
bin_padding_bottom: adsk.core.ValueCommandInput = inputs.itemById(BIN_PADDING_BOTTOM_INPUT_ID)


isHollow = binTypeDropdownInput.selectedItem.name == BIN_TYPE_HOLLOW
isSolid = binTypeDropdownInput.selectedItem.name == BIN_TYPE_SOLID
Expand Down Expand Up @@ -919,6 +973,12 @@ def generateBin(args: adsk.core.CommandEventArgs):
baseGeneratorInput.screwHolesDiameter = bin_screw_hole_diameter.value
baseGeneratorInput.magnetCutoutsDiameter = bin_magnet_cutout_diameter.value
baseGeneratorInput.magnetCutoutsDepth = bin_magnet_cutout_depth.value
# Needed to calculate base clearance
baseGeneratorInput.hasPadding = bin_padding.value
baseGeneratorInput.paddingLeft = bin_padding_left.value
baseGeneratorInput.paddingTop = bin_padding_top.value
baseGeneratorInput.paddingRight = bin_padding_right.value
baseGeneratorInput.paddingBottom = bin_padding_bottom.value

baseBodies: list[adsk.fusion.BRepBody]
if bin_generate_base.value:
Expand Down Expand Up @@ -952,6 +1012,11 @@ def generateBin(args: adsk.core.CommandEventArgs):
binBodyInput.tabOverhangAngle = binTabAngle.value
binBodyInput.compartmentsByX = compartmentsX.value
binBodyInput.compartmentsByY = compartmentsY.value
binBodyInput.hasPadding = bin_padding.value
binBodyInput.paddingLeft = bin_padding_left.value
binBodyInput.paddingTop = bin_padding_top.value
binBodyInput.paddingRight = bin_padding_right.value
binBodyInput.paddingBottom = bin_padding_bottom.value

if binCompartmentGridTypeDropdownInput.selectedItem.name == BIN_COMPARTMENTS_GRID_TYPE_UNIFORM:
binBodyInput.compartments = uniformCompartments(binBodyInput.compartmentsByX, binBodyInput.compartmentsByY)
Expand Down
Loading