3DCenter.ru

Здравствуйте, гость ( Вход | Регистрация )

82 страниц V  « < 80 81 82  
Reply to this topicStart new topic
> Я только начинаю изучать Maxscript
vinigor
сообщение 15/06/2020, 18:50
Сообщение #1216


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 11
Регистрация: 19/05/2007
Пользователь №: 52 191



Цитата(igorznag2 @ 15/06/2020, 16:52) *
Цитата(vinigor @ 12/06/2020, 19:40) *
Как можно получить массив имен всех слоев до родительского?

Попробуйте такой вариант. Выделяем один объект и запускаем скрипт:

Ага, работает, спасибо!
Go to the top of the page
 
+Quote Post
Mr_dd
сообщение 31/05/2021, 04:00
Сообщение #1217


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 2
Регистрация: 31/05/2021
Пользователь №: 145 712



Доброго времени суток!
Решил опробовать свои силы в Maxscript'e.
Чего хотелось: скрипт, который выделяет все рёбра, прилегающие грани к которым лежат в одной плоскости.
Что получилось
Код
baseobject=selection[1]

edge_selection = #{}
base_obj = $.baseobject
num_edges = polyop.getNumEdges base_obj

for e = 1 to num_edges do
(
local face_index = (polyop.getedgefaces base_obj e) as array
if face_index.count >= 2 do
(
local n1 = polyop.getFaceNormal base_obj face_index[1]
local n2 = polyop.getFaceNormal base_obj face_index[2]
if n1 == n2 do edge_selection[e] = true
)
)

polyop.setEdgeSelection base_obj edge_selection
max modify mode
modPanel.setCurrentObject base_obj
subobjectlevel = 2


Практически то, что нужно. Но на таких местах (см. картинку) рёбра остаются нетронутыми. В чём может быть дело?
Прикрепленные изображения
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
igorznag2
сообщение 31/05/2021, 09:36
Сообщение #1218


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 153
Регистрация: 14/08/2015
Пользователь №: 109 394



Цитата(Mr_dd @ 31/05/2021, 04:00) *
Практически то, что нужно. Но на таких местах (см. картинку) рёбра остаются нетронутыми. В чём может быть дело?

Попробуйте такой вариант:
Код
baseobject=selection[1]

edge_selection = #{}
base_obj = $.baseobject
num_edges = polyop.getNumEdges base_obj

for e = 1 to num_edges do
(
local face_index = (polyop.getedgefaces base_obj e) as array
if face_index.count >= 2 do
(
local n1 = polyop.getFaceNormal base_obj face_index[1]
local n2 = polyop.getFaceNormal base_obj face_index[2]
z=cross n1 n2;  lz = length z; a=atan2 lz (dot n1 n2)
if a<5 do edge_selection[e] = true
)
)

polyop.setEdgeSelection base_obj edge_selection
max modify mode
modPanel.setCurrentObject base_obj
subobjectlevel = 2
Go to the top of the page
 
+Quote Post
Jahman
сообщение 31/05/2021, 10:48
Сообщение #1219


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



QUOTE (Mr_dd @ 31/05/2021, 04:00) *
Чего хотелось: скрипт, который выделяет все рёбра, прилегающие грани к которым лежат в одной плоскости.

QUOTE
all_edges_bitarray - hard_edges_bitarray

остается только найти хард эджи
Go to the top of the page
 
+Quote Post
Mr_dd
сообщение 07/06/2021, 20:09
Сообщение #1220


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 2
Регистрация: 31/05/2021
Пользователь №: 145 712



Цитата(igorznag2 @ 31/05/2021, 09:36) *


Цитата(Jahman @ 31/05/2021, 10:48) *


Господа, спасибо!
Извините за то, что пропал, небольшой завальчик

igorznag2, то, что нужно!
Что я, как мне кажется, понял:
z - находим векторное произведение векторов n1 n2
lz - соответственно, длина
dot - скалярное произведение n1 n2
а - угол в градусах треугольника, где lz и dot - катеты
if... - если угол а меньше 5 градусов
Верно?
Если не трудно, могли бы вы объяснить, почему без этих дополнительных условий не работает?

Jahman
Спасибо! Так проще, но довести свой вариант до ума милее =) Хотя на досуге попробую.

И, да, знаю, глупый вопрос: какой язык программирования наиболее близок к Maxscript?
Go to the top of the page
 
+Quote Post
Jahman
сообщение 07/06/2021, 23:07
Сообщение #1221


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



Ближе всего, наверное, python
К тому же в последних версиях макса им вполне можно пользоваться.
https://github.com/ADN-DevTech/3dsMax-Python-HowTos
Go to the top of the page
 
+Quote Post
kuirp
сообщение 09/11/2021, 06:17
Сообщение #1222


Уже не новичок
Иконка группы

Группа: Пользователи
Сообщений: 22
Регистрация: 20/04/2013
Пользователь №: 89 988



Ребята, а поведайте тайну:
Имеется около 20 тыс. файлов с разной нумерацией
(клик по ссылке для демонстрации)

Как в макскрипте выдать имя последнего файла в папке?
(в моём случае это - файл с именем Mesh_235889)

Пробовал методом getfiles собрать массив и тупо прописать индекс нужного файла:
Код
fpath = "D:\\Projects\\maxscript"
files = getFiles (fpath + "*.rip")

last = files[19958]


Listener выдал
"D:\Projects\maxscript\Mesh_99963.rip"
В моём списке следующий за этим файл имеет название Mesh_100030

Неужели через 100К в имени перескочить нельзя?

Сообщение отредактировал kuirp - 09/11/2021, 06:21
Go to the top of the page
 
+Quote Post
ProcXel.A
сообщение 09/11/2021, 11:48
Сообщение #1223


Мастер
Иконка группы

Группа: Пользователи
Сообщений: 1 466
Регистрация: 03/01/2012
Из: Воронеж
Пользователь №: 85 109



kuirp, getFiles не сортирует имена файлов. Пробежись циклом по всем именам и найди имя с самым большим числом.

Код
fn getFileNumber file_path    = (
    file_number = (filterstring (getfilenamefile file_path) "_")[2] as integer
    return file_number
)

files = getfiles "C:\\tmp\\*.txt"

max_file = files[1]
file_number_1 = getFileNumber max_file



for f in files do (
    file_number_2 = getFileNumber f
    if file_number_2 > file_number_1 do (
        file_number_1 = file_number_2
        max_file = f
    )
)

print (max_file)


Сообщение отредактировал ProcXel.A - 09/11/2021, 12:14
Go to the top of the page
 
+Quote Post
Ded_
сообщение 09/12/2021, 10:27
Сообщение #1224


MaxMan
Иконка группы

Группа: Пользователи
Сообщений: 180
Регистрация: 04/05/2006
Из: Ryazan
Пользователь №: 30 816



Добрый день подскажите,
Есть 3 сплайна, надо к $Shape01 сплайну присоединить $Shape02 и $Shape03
используя splineOps.startAttach.

Как записать скрипт для автоматического присоединения этих сплайнов?
Спасибо.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 10/12/2021, 23:54
Сообщение #1225


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



хз надо ли апдейт после первого аттача делать, не проверял
CODE
addAndWeld $Shape01 $Shape02 -1
addAndWeld $Shape01 $Shape03 -1
updateShape $Shape01

Go to the top of the page
 
+Quote Post
qwerdemnb
сообщение 01/05/2022, 09:44
Сообщение #1226


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 01/05/2022
Пользователь №: 145 832



При создании источника освещения, в центре координат на доли секунды создается объект по предыдущим настройкам и на позиции курсора. Помоги исправить.
Код
fn lightShape n =
(
    n.shape = 0
    n.intensityUnits = 1
    n.colorMode = 1
    
)
startObjectCreation CoronaLight returnNewNodes:#first newNodeCallback:lightShape


Прикрепленное изображение
Go to the top of the page
 
+Quote Post
Jahman
сообщение 01/05/2022, 11:37
Сообщение #1227


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



startObjectCreation тут явно лишний

CODE
CoronaLight shape:0 intensityUnits:1 colorMode:1

Go to the top of the page
 
+Quote Post
qwerdemnb
сообщение 02/05/2022, 17:56
Сообщение #1228


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 01/05/2022
Пользователь №: 145 832



Цитата(Jahman @ 01/05/2022, 12:37) *
startObjectCreation тут явно лишний

Код
CoronaLight shape:0 intensityUnits:1 colorMode:1


Без нее объект же создается сразу в центре координат, я хочу с startObjectCreation но со своими параметрами
Go to the top of the page
 
+Quote Post
Jahman
сообщение 02/05/2022, 22:55
Сообщение #1229


уже всё сделал
Иконка группы

Группа: Пользователи
Сообщений: 2 456
Регистрация: 01/06/2005
Из: z3л3№гр@d
Пользователь №: 13 838



Если речь только про позицию, то в конструктор её можно передать
CODE
pt = pickpoint()
if iskindof pt point3 do CoronaLight shape:0 intensityUnits:1 colorMode:1 pos:pt


если кроме позиции допустим еще нужен поворот, то можно сделать через mouseTool (с его помощью можно сделать создание через N количество кликов) и передавать в конструктор не позицию, а трансформ (матрицу трансформации)
CODE
tm = matrix3 1 -- identity matrix
CoronaLight shape:0 intensityUnits:1 colorMode:1 transform:tm


а вообще в последних максах что-то обновляли насчет дефолтных параметров объектов/модификаторов, может быть имеет смысл в ту сторону поглядеть и как-то перед startObjectCreation'ом задать их, чтоб объект создавался в нужном виде
давно макс не открывал, поэтому тут не подскажу

имеет смысл тут спросить
https://forums.cgsociety.org/c/autodesk/3ds...k-and-maxscript
maxscript discord

Сообщение отредактировал Jahman - 02/05/2022, 23:01
Go to the top of the page
 
+Quote Post
qwerdemnb
сообщение 03/05/2022, 05:04
Сообщение #1230


Новичок
Иконка группы

Группа: Пользователи
Сообщений: 3
Регистрация: 01/05/2022
Пользователь №: 145 832



Спасибо за развернутый ответ!)
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






82 страниц V  « < 80 81 82
Reply to this topicStart new topic

1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 19/03/2024 - 14:22