1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

menuMan, отражение файловой структуры в виде меню

Тема в разделе "MAXScript", создана пользователем ASK'R, 1 авг 2012.

Модераторы: Savin Denis
  1. ASK'R

    ASK'R Активный участник

    С нами с:
    18.03.2008
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    5
    Список файлов в нужной папке и вложенных получить могу, обрезать лишнее тоже, но неясно как это вывести при произвольном количестве вложенности и файлов.
    Вручную вложенные меню успешно делаются:
    Код:
    ------------------ deleting previous menu
    if ((menuMan.findMenu "MyScripts") != undefined) then 
    (
    	menuMan.unRegisterMenu (menuMan.findMenu "MyScripts")
    	menuMan.updateMenuBar()
    )
    
    --------------------creating menu
    mainMenuBar = menuMan.getMainMenuBar()
    subMenu = menuMan.createMenu "MyScripts"
    
    	str = "macroscript smartmenu" + "51" /*(ii as string)*/ + " category:\"smartmenu\" buttontext:\"" + "(getFilenameFile i)" + "\" (execute (print \"hello\" /*openFile \"" + "i" + "\"*/))"
    	execute str	
    --					menuMan.createActionItem "macroScriptName" "macroScriptCategory"
    	testItem = menuMan.createActionItem ("smartmenu51"/* + "(ii as string)"*/) "smartmenu"
    	subMenu.addItem testItem -1	
    
    	separator = menuMan.createSeparatorItem()
    	subMenu.addItem separator -1
    
    	subSubMenu = menuMan.createMenu "test submenu"
    	testSubItem = menuMan.createSubMenuItem "name" subSubMenu
    	subMenu.addItem testSubItem -1
    
    	subSubSubMenu = menuMan.createMenu "test subsubmenu"
    	testSubSubItem = menuMan.createSubMenuItem "subname" subSubSubMenu
    	subSubMenu.addItem testSubSubItem -1
    	
    	testItem = menuMan.createActionItem ("smartmenu51"/* + "(ii as string)"*/) "smartmenu"
    	subSubSubMenu.addItem testItem -1	
    	
    -----------------------updating menu
    subMenuItem = menuMan.createSubMenuItem "Test Menu" subMenu
    subMenuIndex = mainMenuBar.numItems() - 1
    mainMenuBar.addItem subMenuItem subMenuIndex
    
    menuMan.updateMenuBar()
    
    (взято из SmartMenu http://www.scriptspot.com/3ds-max/scripts/smart-menu и хелпа)
    Список файла в виде массива, разобрать filterString'ом можно.
     
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    Код:
    (
    fn recursive_menu subMenu subPath =
    (
    files=getFiles (subPath+"/*.ms"); sort files
    -------------------- creating run-maroscripts and populating menu
    for i in files do 
    (
    	ii = ii + 1
    	str = "macroscript smartmenu" + (ii as string) + " category:\"smartmenu\" buttontext:\"" + (getFilenameFile i) + "\" (execute (openFile \"" + i + "\"))"
    	execute str	
    
    	testItem = menuMan.createActionItem ("smartmenu" + (ii as string)) "smartmenu"
    	subMenu.addItem testItem -1	
    )
    --get dirs
    dirArr = GetDirectories (subPath+"/*"); sort dirArr
    if(dirArr.count>0)then
    (
    if(files.count>0)then
    (
    separator = menuMan.createSeparatorItem() 
    subMenu.addItem separator -1 
    )--if(files.count>0)then
    --creating subMenu
    for i in dirArr do
    (
    subSubPath=substring i 1 (i.count-1)
    subSubMenu = menuMan.createMenu (getFilenameFile subSubPath) 
    subSubItem = menuMan.createSubMenuItem "name" subSubMenu 
    subMenu.addItem subSubItem -1
    recursive_menu subSubMenu subSubPath
    )--for i in dirArr do
    )--if(dirArr.count>0)then
    )--fn recursive_menu my_menu
    -----------------------------------------------------
    ------------------ deleting previous menu
    if ((menuMan.findMenu "MyScripts") != undefined) then 
    (
    	menuMan.unRegisterMenu (menuMan.findMenu "MyScripts")
    	menuMan.updateMenuBar()
    )
    -----------
    global ii=0
    --------------------creating menu
    subMenu = menuMan.createMenu "MyScripts"
    subPath=(GetDir #scripts)+"/myscripts"
    recursive_menu subMenu subPath
    -----------------------updating menu
    mainMenuBar = menuMan.getMainMenuBar()
    subMenuItem = menuMan.createSubMenuItem "Test Menu" subMenu
    subMenuIndex = mainMenuBar.numItems() - 1
    mainMenuBar.addItem subMenuItem subMenuIndex
    menuMan.updateMenuBar()
    ---------------------
    print ii
    )
     
  3. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.256
    Симпатии:
    173
    Баллы:
    65
    global ii=0 нужно написать в самом начале скрипта.
     
  4. ASK'R

    ASK'R Активный участник

    С нами с:
    18.03.2008
    Сообщения:
    94
    Симпатии:
    0
    Баллы:
    5
    Спасибо, работает, так как надо! буду теперь читать внимательно и разбираться как работает, ведь чтобы понять рекурсию надо понять рекурсию ;)
     
Модераторы: Savin Denis

Поделиться этой страницей