![]() |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1216
|
|
Уже не новичок ![]() Группа: Пользователи Сообщений: 11 Регистрация: 19/05/2007 Пользователь №: 52 191 ![]() |
|
|
|
![]()
Сообщение
#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 Практически то, что нужно. Но на таких местах (см. картинку) рёбра остаются нетронутыми. В чём может быть дело?
Прикрепленные изображения
![]() |
|
|
![]()
Сообщение
#1218
|
|
MaxMan ![]() Группа: Пользователи Сообщений: 153 Регистрация: 14/08/2015 Пользователь №: 109 394 ![]() |
Практически то, что нужно. Но на таких местах (см. картинку) рёбра остаются нетронутыми. В чём может быть дело? Попробуйте такой вариант: Код 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 |
|
|
![]()
Сообщение
#1219
|
|
уже всё сделал ![]() Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 ![]() |
Чего хотелось: скрипт, который выделяет все рёбра, прилегающие грани к которым лежат в одной плоскости. QUOTE all_edges_bitarray - hard_edges_bitarray остается только найти |
|
|
![]()
Сообщение
#1220
|
|
Новичок ![]() Группа: Пользователи Сообщений: 2 Регистрация: 31/05/2021 Пользователь №: 145 712 ![]() |
Господа, спасибо! Извините за то, что пропал, небольшой завальчик igorznag2, то, что нужно! Что я, как мне кажется, понял: z - находим векторное произведение векторов n1 n2 lz - соответственно, длина dot - скалярное произведение n1 n2 а - угол в градусах треугольника, где lz и dot - катеты if... - если угол а меньше 5 градусов Верно? Если не трудно, могли бы вы объяснить, почему без этих дополнительных условий не работает? Jahman Спасибо! Так проще, но довести свой вариант до ума милее =) Хотя на досуге попробую. И, да, знаю, глупый вопрос: какой язык программирования наиболее близок к Maxscript? |
|
|
![]()
Сообщение
#1221
|
|
уже всё сделал ![]() Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 ![]() |
Ближе всего, наверное, python
К тому же в последних версиях макса им вполне можно пользоваться. |
|
|
![]() ![]()
Сообщение
#1222
|
|
Уже не новичок ![]() Группа: Пользователи Сообщений: 22 Регистрация: 20/04/2013 Пользователь №: 89 988 ![]() |
Ребята, а поведайте тайну:
Имеется около (клик по ссылке для демонстрации) Как в макскрипте выдать имя последнего файла в папке? (в моём случае это - файл с именем 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 |
|
|
![]()
Сообщение
#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 |
|
|
![]()
Сообщение
#1224
|
|
MaxMan ![]() Группа: Пользователи Сообщений: 180 Регистрация: 04/05/2006 Из: Ryazan Пользователь №: 30 816 ![]() |
Добрый день подскажите,
Есть 3 сплайна, надо к $Shape01 сплайну присоединить $Shape02 и $Shape03 используя splineOps.startAttach. Как записать скрипт для автоматического присоединения этих сплайнов? Спасибо. |
|
|
![]()
Сообщение
#1225
|
|
уже всё сделал ![]() Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 ![]() |
хз надо ли апдейт после первого аттача делать, не проверял
CODE addAndWeld $Shape01 $Shape02 -1 addAndWeld $Shape01 $Shape03 -1 updateShape $Shape01 |
|
|
![]()
Сообщение
#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 |
|
|
||
![]()
Сообщение
#1227
|
|
уже всё сделал ![]() Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 ![]() |
startObjectCreation тут явно лишний
CODE CoronaLight shape:0 intensityUnits:1 colorMode:1 |
|
|
![]()
Сообщение
#1228
|
|
Новичок ![]() Группа: Пользователи Сообщений: 3 Регистрация: 01/05/2022 Пользователь №: 145 832 ![]() |
|
|
|
![]()
Сообщение
#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 если кроме позиции допустим еще нужен поворот, то можно сделать через CODE tm = matrix3 1 -- identity matrix CoronaLight shape:0 intensityUnits:1 colorMode:1 transform:tm а вообще в последних максах что-то обновляли насчет дефолтных параметров объектов/модификаторов, может быть имеет смысл в ту сторону поглядеть и как-то перед startObjectCreation'ом задать их, чтоб объект создавался в нужном виде давно макс не открывал, поэтому тут не подскажу имеет смысл тут спросить Сообщение отредактировал Jahman - 02/05/2022, 23:01 |
|
|
![]()
Сообщение
#1230
|
|
Новичок ![]() Группа: Пользователи Сообщений: 3 Регистрация: 01/05/2022 Пользователь №: 145 832 ![]() |
Спасибо за развернутый ответ!)
|
|
|
Bots |
![]() |
![]() |
|
|
|
![]() ![]() |
![]() |
Текстовая версия | Сейчас: 28/03/2024 - 15:21 |