_______________________________________________________________
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)