Share

Script24_CreateAnyPrimitive.lua

-- Lua example for Autodesk Netfabb 2019.1

-- Generate a mesh from the part library

handler = system:createprimitivelist()
primitive = nil
dialog_list = nil
dialog_options = nil
dropdown_primitive = nil
settings = nil
primitive_name_map = nil

function DoCreate()
    if primitive ~= nil then
        for i, setting in pairs(settings) do
            primitive:setsettingvalue(i, setting.text)
        end
        local mesh = primitive:generatemesh()
        local root = tray.root
        root:addmeshsource(mesh, primitive.name, primitive.color)
    end
    DoCancel()
end

function DoCancel()
    system:log("canceled by user")
    if dialog_list ~= nil then
        dialog_list:close(false)
    end
    if dialog_options ~= nil then
        dialog_options:close(false)
    end
end

function ShowOptions()
    system:log("show primitive options")
    if dialog_list ~= nil then
        dialog_list:close(false)
        dialog_list = nil
    end

    name = primitive_name_map[dropdown_primitive.selectedindex]
    primitive = handler:createprimitive(name)

    -- primitive index order can change for releases, better use name
    -- primitive = handler:createprimitivebyindex(dropdown_primitive.selectedindex);

    dialog_options = application:createdialog()
    dialog_options.caption = "Configure " .. name
    dialog_options.width = 350
    dialog_options.translatecaption = false

    local groupbox = dialog_options:addgroupbox()
    groupbox.caption = "Settings for " .. name
    groupbox.translate = false

    settings = {}
    for i = 0, primitive.settingcount - 1 do
        edit = groupbox:addedit()
        edit.caption = primitive:getsettingname(i)
        edit.captionwidth = 150
        edit.translate = false
        edit.text = primitive:getsettingvalue(i)
        settings[i] = edit
    end

    local splitter = groupbox:addsplitter()
    splitter:settoleft()
    local button = splitter:addbutton()
    button.caption = "Create"
    button.translate = false
    button.onclick = "DoCreate"

    splitter:settoright()
    button = splitter:addbutton()
    button.caption = "Cancel"
    button.translate = false
    button.onclick = "DoCancel"

    if dialog_options:show() then
        return true
    end
    return false
end

function ShowList()
    system:log("show primitive list")

    dialog_list = application:createdialog()
    dialog_list.caption = "Primitive list"
    dialog_list.width = 300
    dialog_list.translatecaption = false

    local groupbox = dialog_list:addgroupbox()
    groupbox.caption = ""
    groupbox.translate = false

    primitive_name_map = {}
    dropdown_primitive = groupbox:adddropdown()
    dropdown_primitive.caption = "Primitive"
    dropdown_primitive.captionwidth = 100
    dropdown_primitive.translate = false
    for i = 0, handler.count - 1 do
        dropdown_primitive:additem(handler:getname(i), i, i, false)
        primitive_name_map[i] = handler:getname(i)
    end

    local splitter = groupbox:addsplitter()
    splitter:settoleft()
    local button = splitter:addbutton()
    button.caption = "Next"
    button.translate = false
    button.onclick = "ShowOptions"

    splitter:settoright()
    button = splitter:addbutton()
    button.caption = "Cancel"
    button.translate = false
    button.onclick = "DoCancel"

    if dialog_list:show() then
        return true
    end
    return false
end

ShowList()

Was this information helpful?