Нажмите радиокнопку с Maxscript в командной панели

_______________________________________________________________

https://www.scriptspot.com/forums/3ds-max/general-scripting/press-radio-button-with-maxscript-in-command-panel

Если ошибка сравнения чисел и получается false. Maxscript иногда возвращает округлённое значение, а у себя держит это за дробное число с плавающей точкой.

_______________________________________________________________

Вот например

viewportTM = viewport.getTM()

vectViewport = -(inverse viewportTM).row3 -- z-axis of current viewport

 

Решение formattedprint vectViewport

 

 

Нажимаем на любую кнопку панели Modify

_______________________________________________________________

 

UIAccessor.PressButton (for i in windows.getChildrenHWND #max where i[5]=="Имя кнопки" do exit with i[1])

Помещаем в буфер обмена имя файла и дату в обратном порядке и расширение для архиватора

_______________________________________________________________

s1=selection[1] -- s1 - это первый объект из выделенных

ONameSTL=s1.name[1] -- строка с именем первого объекта

for i=2 to s1.name.count where -- цикл, фильтрующий символы в имени, где символ - это есть цифры и некоторые буквы

(

       s1.name[i]!="R" and

       s1.name[i]!="L" and

       s1.name[i]!="_" and

       s1.name[i]!="." and

       s1.name[i]!="-" and

       s1.name[i]!="0" and

       s1.name[i]!="1" and

       s1.name[i]!="2" and

       s1.name[i]!="3" and

       s1.name[i]!="4" and

       s1.name[i]!="5" and

       s1.name[i]!="6" and

       s1.name[i]!="7" and

       s1.name[i]!="8" and

       s1.name[i]!="9"

)

do ONameSTL+=s1.name[i] -- собрать строку

T=localTime; -- переменная T - это текущее время с датой

setclipboardText (print (ONameSTL+"_"+T[7]+T[8]+T[9]+T[10]+(substring T 3 4)+(substring T 1 2)+".zip")) -- поместить в буфер обмена имя объекта и дату в обратном порядке + расширение для архиватора

Запуск внешнего скрипта как функции

_______________________________________________________________

Запускается как функция вот такой код

(

 try (fileIn (scriptspath+"\\tools\\external_script.ms") quiet:true)

 catch messagebox "Please re-install scripts!" \

 title:"Can't find script"

)
Файл к которому обращается этот код лежит в папке Scripts каталога 3dmax

 


Отправляем нажатие клавиш и хоткеев в активное окно (в сам 3dsMax)

_______________________________________________________________

 

-- Создадим сцену, для которой будет работать функция отправки сообщения

select (convertToPoly (sphere())); subobjectlevel=2
$.EditablePoly.SetSelection #Edge #{34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64}

 

-- Следующей функцией создаётся и запускается внешний vbs файл, который посылает виртуальное сообщение нажатия клавиш клавиатуры.

Это сообщение будет посылать в макс нажатие Ctrl+Backspace при выделенных рёбрах и в результате будет происходить их удаление с вершинами

 

fn sendkeys_CtrlRemove_fn=(
vbs_Fpath = (GetDir #scripts) + " \\ sendkeys.vbs"
if not doesFileExist vbs_Fpath
then (
       f = createFile vbs_Fpath
       format "'*************************************** \n ' wscript shell sendkeys \n ' send.vbs \n '*************************************** \n Option Explicit \n Dim WshShell \n Set WshShell = WScript.CreateObject(\" WScript.Shell \") \n WshShell.SendKeys(\" ^{BS} \")" to:f
       close f
       shellLaunch "explorer.exe" vbs_Fpath)
else shellLaunch "explorer.exe" vbs_Fpath
)
sendkeys_CtrlRemove_fn() -- закуск функции отправки клавиш
 
--Функция активации окна 3dsMax если оно не активно и это требуется и закуск функции отправки клавиш
fn CtrlRemove_fn=(
       --for i in desktopChildren do format "%\n" i
       max_hwnd=for i in (windows.getChildrenHWND (windows.getDesktopHWND())) where (i[4] == "3DSMAX") do (exit with i[1])
       WM_ACTIVATE = 0x6

       Windows.sendMessage max_hwnd WM_ACTIVATE max_hwnd 0
       sendkeys_CtrlRemove_fn()
)

 

Таким образом в коде есть

^ - это Ctrl

{BS} - это Backspace

^{BS} = Ctrl+Backspace

И вместо этой комбинации можно подставить любое другое сообщение из тех, что предложены в источнике ниже, включая текст.

Источник: http://scriptcoding.ru/2013/06/25/wscript-shell-sendkeys/

 

 




















Универсальные единые функции подсчёта вершин и полигонов для любого количества и типов объектов.

_______________________________________________________________

 

--Количество вершин в объекте (объектах)
fn numvert_fn=(sum=0; for i in (for i in selection collect numPoints i) do sum=sum+i; sum)
--Количество полигонов в объекте (объектах)
fn numface_fn=(sum=0; for i in (for i in selection collect getNumFaces i.mesh) do sum=sum+i; sum)
--Количество выделенных полигонов в объекте (объектах)
fn selface_fn=(sum=0; for i in (for i in selection collect (getFaceSelection i.mesh).numberset) do sum=sum+i; sum)

 







Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: