Populate:Terrain
Populate:Terrain assists in creating and optimizing terrain surfaces from contour lines or from existing meshes. The quad based output allows for easier later remodeling, for example using push/pull painting. The regular face size reduces rendering issues (GI, displacement) and you can use Turbosmooth on it.
Populate:Terrain is a scripted plugin for Autodesk 3ds max. It assists in creating and optimizing terrain surfaces for architectural visualization applications. Populate:Terrain fixes imported meshed CAD models or directly converts contour lines. The result is a clean quad based poly surface with user definable grid size.
1: Spline Shape 2: Converted to mesh with 3ds max 3: Converted with Populate:Terrain
1: Contour lines 2: Converted using the 3ds max Terrain Compound 3: Converted with Populate:Terrain
New feature in 1.8, trimming with a spline shape:
Populate:Terrain
Программы / Графические приложения / CAD / Populate:Terrain
Скачать Populate:Terrain |
Для скачивания будет предоставлена ссылка на дистрибутив программы на сайте компании-разработчика.
Обзор Populate:Terrain (автоматический перевод)
Populate:Terrain является плагином в виде сценария для Autodesk 3ds максимальный, Это помогает в создании и оптимизации поверхностей ландшафта от линий контура или от существующих сеток.
Четверка базировалась, вывод допускает проще позже модернизация, например с помощью рисования нажатия/получения по запросу. Регулярный размер поверхности уменьшает проблемы рендеринга (GI, смещение), и Вы можете использовать Turbosmooth на нем. Также намного более хорошо посмотреть на.
- Chaos Corona Forum
- General Category
- General CG Discussion
- Populate Terrain script?
Pages: [1]
Author Topic: Populate Terrain script? (Read 3929 times)
Pages: [1]
- Chaos Corona Forum
- General Category
- General CG Discussion
- Populate Terrain script?
Populate terrain как пользоваться
(
for i=1 to 10 do (
n1 = getNodeByName name1
n2 = getNodeByName name2
if n1 != undefined and n2 != undefined do n1.transform = n2.transform
03/07/2017, 11:41
Цитата(Jahman @ 30/06/2017, 23:15)
вообще нумерация от настроек зависит. у меня например именование с тремя цифрами
(
for i=1 to 10 do (
n1 = getNodeByName name1
n2 = getNodeByName name2
if n1 != undefined and n2 != undefined do n1.transform = n2.transform
Спасибо!
Не зная этого, приходилось пользоваться Exel как промежуточным редактором текста, с автозаменой потом знаков табуляции от «колонок».
харумскарум
14/09/2017, 00:18
а нет ли такого скрипта — две кнопки на тулбар — instance и copy, и ежели одна из них нажата, то при копировании объекта не появляется диалоговое окно.
здорово бы экономило время при многократном копировании
харумскарум
14/09/2017, 12:42
супер! спасибо большое..
думаю две кнопки (copy и instance) будет даже удобнее так как видна индикация нажатия
а можно еще такой же но для Copy? )
14/09/2017, 15:37
не тестировал
macroScript forceInstanceCopyMode
category:»Jahman»
tooltip:»Force Instance mode in Clone Dialog»
buttonText:»I»
(
local isCheckedMode = false
local hwnd = DialogMonitorOPS.GetWindowHandle()
if (UIAccessor.GetWindowText hwnd) == «Clone Options» do (
UIAccessor.PressButtonByName hwnd «Instance»
UIAccessor.PressButtonByName hwnd «OK»
on isChecked do isCheckedMode
isCheckedMode = not isCheckedMode
DialogMonitorOPS.Enabled = false
DialogMonitorOPS.UnRegisterNotification id:#onCopyDialogHandler
if isCheckedMode do (
DialogMonitorOPS.RegisterNotification onCopyDialog id:#onCopyDialogHandler
DialogMonitorOPS.Enabled = true
macroScript forceCopyCopyMode
category:»Jahman»
tooltip:»Force Copy mode in Clone Dialog»
buttonText:»C»
(
local isCheckedMode = false
local hwnd = DialogMonitorOPS.GetWindowHandle()
if (UIAccessor.GetWindowText hwnd) == «Clone Options» do (
UIAccessor.PressButtonByName hwnd «Copy»
UIAccessor.PressButtonByName hwnd «OK»
on isChecked do isCheckedMode
isCheckedMode = not isCheckedMode
DialogMonitorOPS.Enabled = false
DialogMonitorOPS.UnRegisterNotification id:#onCopyDialogHandler
if isCheckedMode do (
DialogMonitorOPS.RegisterNotification onCopyDialog id:#onCopyDialogHandler
DialogMonitorOPS.Enabled = true
07/11/2017, 12:32
Ни у кого не завалялся populate:terrain версии 1.86 (последняя, по моему?) А то сайт разрабов в дауне (уже давно) а у Автодесков только 1.2 (
07/11/2017, 13:39
Цитата(BorisK @ 07/11/2017, 12:32)
Ни у кого не завалялся populate:terrain версии 1.86 (последняя, по моему?) А то сайт разрабов в дауне (уже давно) а у Автодесков только 1.2 (
07/11/2017, 13:44
Цитата(RGhost @ 07/11/2017, 13:39)
Цитата(BorisK @ 07/11/2017, 12:32)
Ни у кого не завалялся populate:terrain версии 1.86 (последняя, по моему?) А то сайт разрабов в дауне (уже давно) а у Автодесков только 1.2 (
харумскарум
09/11/2017, 00:51
Цитата(Jahman @ 14/09/2017, 15:37)
не тестировал
все работает, то что доктор прописал. спасибо огромное
а нет ли скрипта=модификатора для масштабирования текстур на объекте на который накинут real-world-size мэппинг?
09/11/2017, 10:29
Масштабировать не проблема, вот вопрос только как выяснить точный первоначальный размер развертки.
харумскарум
09/11/2017, 13:02
первоначальный размер указываю в свойствах текстур и как правило в 90% подходит дефолтный размер, но иногда требуется масштабировать по-быстрому.
сейчас для этого пользуюсь UVWXform модификатором, но там неудобно каждый раз перебивать три цифры.
было бы классно чтобы просто крутить один параметр GlobalScale где 100% это дефолтный размер текстур для мата. еще как опция параметр MaterialID если используется мультимат (масштабирование применяется только к указанному ID)
09/11/2017, 13:23
как объект выделить или подобъекты по айди думаю понятно
(
uvwXform = UVW_Xform()
paramWire.connect2Way uvwXform[#U_Tile] uvwXform[#V_Tile] «V_Tile» «U_Tile»
paramWire.connect2Way uvwXform[#W_Tile] uvwXform[#V_Tile] «V_Tile» «W_Tile»
max modify mode
modPanel.addModToSelection uvwXform
)
харумскарум
09/11/2017, 13:38
спасибо!!
очень удобно теперь
10/11/2017, 18:33
Цитата(BorisK @ 07/11/2017, 13:44)
Цитата(RGhost @ 07/11/2017, 13:39)
Цитата(BorisK @ 07/11/2017, 12:32)
Ни у кого не завалялся populate:terrain версии 1.86 (последняя, по моему?) А то сайт разрабов в дауне (уже давно) а у Автодесков только 1.2 (
Хм, в 2018 АД действительно что-то сделал со сплайнами — плаг вешается, причем конкретно — делает вид что что-то происходит, при этом макс закрывается ). Так и висит «progress. «. В 2017 работает прекрасно.
11/11/2017, 13:33
Здравствуйте, будьте добры , подскажите скрип, как выровнять все объекты с одинаковым именем в сцене по всем параметрам (orient=orient) местоположение по первому попавшемуся (из одинаковых)
например есть :
объект a с именем a_primer,
объект b с именем a_primer,
объект c с именем a_primer,
объект d с именем b_primer,
объект e с именем b_primer,
объект f с именем c_primer,
объект g с именем c_primer. и так далее (много)
нужно, что бы скрипт обнаружив в сцене первый с одинаковым именем (например a_primer), выровнял все остальные с таким именем (a_primer,a_primer) с тем первым (a_primer) по всем параметрам. Потом также с остальными (b_primer, c_primer. )
Объектов с одинаковыми именами может быть от двух до 5.
Я исправил имена в своем примере, а то сначала написал белиберду, теперь норм.
11/11/2017, 14:08
fn selectNodesByName name = (
select (for s in (execute («$» + name + «*»)) where s.name == name collect s)
fn getNodesByName name = (
for s in (execute («$» + name + «*»)) where s.name == name collect s
for s in #( «red», «green», «yellow» ) do (
b = box pos:(random [-100,-100,0] [100,100,0]) wirecolor:clr name:(s + «Box»)
rotate b (AngleAxis (random 0.0 180.0) [0,0,1])
max tool zoomextents all
sleep 1
select objects
for s in selection do (
nodes = getNodesByName s.name
if nodes.count > 1 do (
for j=2 to nodes.count do (
redrawViews()
sleep 0.1
11/11/2017, 18:29
первый вариант был лучше
11/11/2017, 19:49
а чем конкретно лучше? по функционалу всё ровно то же самое должно быть
этот вариант для всех объектов сцены, что вроде и требовалось
а для конкретного имени все то же самое:
selectNodesByName «somename»
if selection.count > 1 do selection.transform = selection[1].transform
12/11/2017, 13:10
Цитата(Jahman @ 09/11/2017, 13:23)
как объект выделить или подобъекты по айди думаю понятно
(
uvwXform = UVW_Xform()
paramWire.connect2Way uvwXform[#U_Tile] uvwXform[#V_Tile] «V_Tile» «U_Tile»
paramWire.connect2Way uvwXform[#W_Tile] uvwXform[#V_Tile] «V_Tile» «W_Tile»
max modify mode
modPanel.addModToSelection uvwXform
)
Пытаюсь сделать аналогично скрипт, чтобы назначал модификатор Slice первому объекту, находил модификатор Slice у второго объекта, и связывал их Позишн и Ротэйшн через Wire Parameters, однако чтото ругается и не выходит. что не так непойму ? :
(
s = selection as array
local M
for i=1 to s[2].modifiers.count where classof s[2].modifiers[i] == SliceModifier and s[2].modifiers[i].enabled == true and s[2].modifiers[i].enabledInRenders == true do M = i
select s[1]
SM = SliceModifier()
paramWire.connect2Way SM.Slice_Plane.position s[2].modifiers[M].Slice_Plane.position «Position» «Position»
paramWire.connect2Way SM.Slice_Plane.rotation s[2].modifiers[M].Slice_Plane.rotation «Rotation» «Rotation»
modPanel.addModToSelection SM
)
12/11/2017, 16:36
так вроде все как белый день в листенере написано, не?
— Runtime error: connect requires subAnims
к свойству надо через квадратые скобки обращаться как в моем примере выше
12/11/2017, 17:03
Ага — спасибо за подсказку . Вот так вот уже работает
paramWire.connect2Way SM.Slice_Plane[#position] s[2].modifiers[M].Slice_Plane[#position] «Position» «Position»
14/11/2017, 14:43
добрый день
подскажите со сриптом (кодом), (частью кода)
к выделенным вершинам обьекта применяем команду (например мув или релакс. ) которая смещает вершини,
требуеться наити «старые» координаты вершин, и «новые» координаты вершин и в конечном итиге разместить каждую из выделенных вершин на 50% пути етого смешения
14/11/2017, 15:02
может изначально стоит смещать лишь на нужное расстояние? в чем смысл скрипта вцелом?
а так.
делаете snapshotasmesh объекта перед сдвигом вершин
смещаете вершины
теперь между текущим и прошлым положением несложно найти искомое положение (середину): (стараяПозиция + новаяПозиция)/2.0
14/11/2017, 16:12
вот жеж век учись. rtfm как грится
getNodeByName exact: ignoreCase: all:
15/11/2017, 14:05
а можете в код оформить? (не имею достачоно знаний чтоб в код оформить самостоятельно)
интересно понять как етот скрипт выглядит, а вместо релакса можно будет использовать любую команду,
смещать на заданное растояние изначально не вариант т.к. тотже релакс смешает вершины не на заданное число а в зависимости от конкретного расположения вершин
п.с. скрипт должен работать без сворачивания стека, и с модификатором Edit Ploy, быть применим к сабобжектам
15/11/2017, 14:23
сделайте копию объекта, модифицируйте
а потом через morpher модификтор интерполируйте как душе угодно между двумя состояниями
16/11/2017, 12:20
нужно именно чтоб как релакс, и к вертексам был применим, чтоб не выходить из сабобджектов
ето ведь возможно реализовать?
может подскажите где можно информацию найти? , конкретные ресурсы, для моего уровня «новичка»), чтоб я мог разобраться с кодом
16/11/2017, 12:59
я не могу смысла написанного расшифровать, сорри.
картинка как было — как есть — как нужно снимет все вопросы
27/11/2017, 18:03
Здравствуйте
Jahman.
Прошу вашей помощи, этот будет полезно не только мне , все у кого есть Laseraxes , производитель почему-то прекратил в этом году поддержку, не отвечает на форуме. Его все пользователи просили сделать поддержку импорта DXF файлов. Он вроде написал новую версию программы с индексом C но там DXF все равно не открывается.
Я уже больше года делаю сам из DXF код для ЧПУ Laseraxes так: рисую что мне надо в CorelDrive, а потом открываю в 3ds Max, или в 3ds Max сразу если позволяет информация, ведь в 3ds Max сплайны оптимизированы и меньше по весу, далее сопоставляю все размеры как надо в миллиметрах что были, Laseraxes понимает только миллиметры в коде.
Все сплайны располагаю на виде с верху, не задействую ось Z вообще. все только двухмерные (x-y), все сплайны надо размещать так чтобы они были справа вверху оц центра координат на виде сверху, тоесть не должно быть минусовых значений, желательно всю сцену с сплайнами ориентировать нижним левым углом габаритного контейнера в нулевой точке, что бы потом не было холостого хода вправо и вверх.
Экспортирую из 3ds Max в формах DXF (Autocad 2004 версия), потом открываю в специальной программе с графической оболочкой для 3 д принтеров, там 3 оси генерируется для кода с другими командами на действия, но с схожими командами на перемещение. с осью Z , так как мне для плоттера не нужна полностью ось Z, а только одна актив а ция (лазера-ножа) я делаю так:
Эта программка «Ace Converter» из DXF делает такой вот код, на примере прямоугольна и одной линии :
http://www.dakeng.com/ace.htm (сайт программы)
G00 Z0.1000 —подъем ножа(экструдера)
G00 X50.0000 Y50.0000 — точка начала очередного сегмента (прямоугольника) х =50 мм, н тоже 50 мм
G01 Z0.0000 —опускание ножа (экструдера), активация
G01 X0.0000 Y50.0000 Z0.0000 —координата к которой стремится (нож, экструдер..) это движение влево
G01 X0.0000 Y0.0000 Z0.0000 —координата к которой стремится (нож, экструдер..) это движение вниз
G01 X50.0000 Y0.0000 Z0.0000 —координата к которой стремится (нож, экструдер..) это движение вправо
G01 X50.0000 Y50.0000 Z0.0000 —координата к которой стремится (нож, экструдер..) это движение вверх
G00 Z0.1000 — это код подъема ножа(экструдера), прекращения реза
G00 X40.0000 Y80.0000 — точка начала следующего сегмента (линии)
G01 Z0.0000 —опускание ножа (экструдера), активация
G01 X70.0000 Y20.0000 Z0.0000 —координата к которой стремится (нож, экструдер..
G00 Z0.1000 — это код подъема ножа(экструдера), прекращения реза
Программа у меня Laseraxes использует команду M5 (laser stop) и команду M3 (laser start)
я в блокноте заменяю все ( G00 Z0.1000 на M5 ) и ( G01 Z0.0000 на M3 )
Получается у меня вот такой код:
M5
G00 X50.0000 Y50.0000
M3
G01 X0.0000 Y50.0000 Z0.0000
G01 X0.0000 Y0.0000 Z0.0000
G01 X50.0000 Y0.0000 Z0.0000
G01 X50.0000 Y50.0000 Z0.0000
M5
G00 X40.0000 Y80.0000
M3
G01 X70.0000 Y20.0000 Z0.0000
M5
я еще добавляю от себя иногда скорость, если надо где-то помедленней пройтись для большего прожига в код строчку «Fxxx», но это не всегда, обычно все на одной скорости делаю и иногда строчку пишу для возврата головки в парковочные координаты , это команда G2
Jahman. Как этот G- код (движения по двухмерному сплайну) c такими как надо мне командами генерировать сразу в 3ds Max?
Мне достаточно кода без изменения скорости и без прочих атрибутов, только:
27/11/2017, 20:09
Вопрос на миллион, конечно.
Я бы начал с разбиения всех криволинейных участков сплайна на отрезки некоторой длины (какой-то минимальный шаг для сохранения кривизны, возможно как-раз зависимый от кривизны). Затем по всем этим координатам для каждого сплайна по отдельности генерить код команд для резака и форматом его писать в файл.
for p in pts do (
format «% X% Y% Z%\n» cmd p.x p.y p.z to:ss