Populate terrain как пользоваться
Перейти к содержимому

Populate terrain как пользоваться

  • автор:

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

  • 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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *