Script27_ColorMeshWithAnalysisResults.lua
-- Lua example for Autodesk Netfabb 2021.1
-- Runs physics packing
PhysicsTimestep = {
[0] = 0.005,
[1] = 0.010,
[2] = 0.015,
[3] = 0.025,
[4] = 0.040,
[5] = 0.075,
[6] = 0.100
}
PhysicsVoxels = {
[0] = 200000,
[1] = 150000,
[2] = 100000,
[3] = 75000,
[4] = 50000,
[5] = 25000,
[6] = 10000
}
PhysicsDistance = {
[0] = 0.0,
[1] = 0.5,
[2] = 1.0,
[3] = 1.5,
[4] = 2.0,
[5] = 2.5,
[6] = 3.0,
[7] = 3.5,
[8] = 4.0,
[9] = 4.5,
[10] = 5.0
}
dialog_arrangeparts = application:createdialog()
dialog_arrangeparts.caption = "Physics packing"
dialog_arrangeparts.translatecaption = false
dialog_arrangeparts_timestep = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_timestep.captionwidth = 150
dialog_arrangeparts_timestep.caption = "Time step"
dialog_arrangeparts_timestep.translatecaption = false
for i = 0, table.getn(PhysicsTimestep) do
dialog_arrangeparts_timestep:additem(tostring(PhysicsTimestep[i]), i, i, false)
end
dialog_arrangeparts_voxels = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_voxels.captionwidth = 150
dialog_arrangeparts_voxels.caption = "Voxels"
dialog_arrangeparts_voxels.translatecaption = false
for i = 0, table.getn(PhysicsVoxels) do
dialog_arrangeparts_voxels:additem(tostring(PhysicsVoxels[i]), i, i, false)
end
dialog_arrangeparts_partdistance = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_partdistance.captionwidth = 150
dialog_arrangeparts_partdistance.caption = "FORM_DEFAULT_PHYSICSPACKING_PARTDISTANCE"
for i = 0, table.getn(PhysicsDistance) do
dialog_arrangeparts_partdistance:additem(string.format("%.1f", PhysicsDistance[i]) .. " mm", i, i, false)
end
dialog_arrangeparts_itemrotation = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_itemrotation.captionwidth = 150
dialog_arrangeparts_itemrotation.caption = "FORM_DEFAULT_PHYSICSPACKING_ROTATION"
dialog_arrangeparts_itemrotation:additem("FORM_DEFAULT_PHYSICSPACKING_ROTATION_ARBITRARY", 0, 0)
dialog_arrangeparts_itemrotation:additem("FORM_DEFAULT_PHYSICSPACKING_ROTATION_ZONLY", 1, 1)
dialog_arrangeparts_itemrotation:additem("FORM_DEFAULT_PHYSICSPACKING_ROTATION_NONE", 2, 2)
dialog_arrangeparts_walldistancexy = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_walldistancexy.caption = "FORM_DEFAULT_PHYSICSPACKING_BORDERSPACINGXY"
dialog_arrangeparts_walldistancexy.captionwidth = 150
for i = 0, table.getn(PhysicsDistance) do
dialog_arrangeparts_walldistancexy:additem(string.format("%.1f", PhysicsDistance[i]) .. " mm", i, i, false)
end
dialog_arrangeparts_walldistancez = dialog_arrangeparts:adddropdown()
dialog_arrangeparts_walldistancez.caption = "FORM_DEFAULT_PHYSICSPACKING_BORDERSPACINGZ"
dialog_arrangeparts_walldistancez.captionwidth = 150
for i = 0, table.getn(PhysicsDistance) do
dialog_arrangeparts_walldistancez:additem(string.format("%.1f", PhysicsDistance[i]) .. " mm", i, i, false)
end
dialog_arrangeparts_onlyselected = dialog_arrangeparts:addcheckbox()
dialog_arrangeparts_onlyselected.caption = "FORM_DEFAULT_MODELINFO_SELECTEDPARTS"
function dialog_partarrange_onokclick()
local TimeStep = PhysicsTimestep[tonumber(dialog_arrangeparts_timestep.selecteditem)]
local Voxels = PhysicsVoxels[tonumber(dialog_arrangeparts_voxels.selecteditem)]
local PartDistance = PhysicsDistance[dialog_arrangeparts_partdistance.selecteditem]
local BorderSpaceXY = PhysicsDistance[dialog_arrangeparts_walldistancexy.selecteditem]
local BorderSpaceZ = PhysicsDistance[dialog_arrangeparts_walldistancez.selecteditem]
local ItemRotation = dialog_arrangeparts_itemrotation.selecteditem
local Packer = netfabbtrayhandler:gettray(0):createpacker(netfabbtrayhandler:gettray(0).packingid_physics)
Packer.timestep = TimeStep
Packer.minimaldistance = PartDistance
Packer.itemrotation = ItemRotation
Packer.onlyselected = false
Packer.onlyselected = dialog_arrangeparts_onlyselected.checked
Packer.borderspacingxy = BorderSpaceXY
Packer.borderspacingz = BorderSpaceZ
Packer:pack()
Packer:release()
dialog_arrangeparts:close(true)
end
function dialog_partarrange_oncancelclick()
dialog_arrangeparts:close(false)
end
splitter = dialog_arrangeparts:addsplitter()
splitter:settoleft()
button = splitter:addbutton()
button.caption = "GENERAL_OK"
button.onclick = "dialog_partarrange_onokclick"
splitter:settoright()
button = splitter:addbutton()
button.caption = "GENERAL_CANCEL"
button.onclick = "dialog_partarrange_oncancelclick"
dialog_arrangeparts:show()