3DCenter.ru

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

4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> скриптом создать массив боксов
v79italya
сообщение 04/05/2017, 09:19
Сообщение #1


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



добрый день. не могли бы поправить код скрипта. необходимо создать 81 куб с расположением как, незнаю, в тетрадке в клетку smile.gif без каких либо сдвигов.сейчас скрипт по иксу выполняет правильно, а по игрику неправильно. должно получиться как будто один куб скопирован по иксу восемь копий, после выделив все девять кубов скопировано по игрику восемь копий. в итоге 81 куб. как сделать циклом, задавая количество переменными h=8 и a=8?

)
CODE
max select all
max delete
box()
max select all
h=8
a=8
d=$
for i=1 to h do (
k=50

p=[0,0+k*i,0]
dum=instance d
d.pos=p
)

max select all

d=$
--p=$.position


for i=1 to a do (
k=50

p=[0+k*i,0+k*i,0]
dum=instance d
d.pos=p
)
Go to the top of the page
 
+Quote Post
Kif
сообщение 04/05/2017, 11:35
Сообщение #2


Учитель
Иконка группы

Группа: Пользователи
Сообщений: 330
Регистрация: 12/03/2011
Из: Voronezh
Пользователь №: 83 453



Код
hCount = 9
vCount = 9
offset = 5.0

source = box name:"box_0_0"  pos:[.0, .0, .0]

for i = 1 to hCount do (
    for j = 1 to vCount do (
        newBox = instance source
        newBox.name = "box_" + i as string + "_" + j as string
        newBox.pos = [i * offset, j * offset, 0.0]
    )
)

delete source
Go to the top of the page
 
+Quote Post
v79italya
сообщение 04/05/2017, 12:20
Сообщение #3


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



Kif, спасибо за Ваше решение. возможно ли в строке
source = box name:"box_0_0" pos:[.0, .0, .0] --- назначить уже имеющийся бокс? пробую так:
CODE
ChamferBox()
select $ChamferBox01
$.name:"box_0_0" pos:[.0, .0, .0]
hCount = 9
vCount = 9
offset = 50
source = $
--source = $.name:"box_0_0" pos:[.0, .0, .0]

for i = 1 to hCount do (
for j = 1 to vCount do (
newBox = instance source
newBox.name = "box_" + i as string + "_" + j as string
newBox.pos = [i * offset, j * offset, 0.0]
)
)


и не получается. с max scriptom знаком меньше недели. с 3д максом с месяца три-четыре.
Go to the top of the page
 
+Quote Post
Kif
сообщение 04/05/2017, 12:56
Сообщение #4


Учитель
Иконка группы

Группа: Пользователи
Сообщений: 330
Регистрация: 12/03/2011
Из: Voronezh
Пользователь №: 83 453



Читайте внимательно, что написано в MaxScript Listener при ошибке. Там есть указание и на саму ошибку, и на место, где она произошла.

Во-первых, смысл сначала создавать объект, потом выделять его, а затем уже работать с выделением? Т.е. лучше сразу так:
Код
source = ChamferBox()


Во-вторых, третья строка некорректна в плане синтаксиса, должно быть примерно так:
Код
$.name = "box_0_0"  
$.pos = [.0, .0, .0]


Также имя объекта и его положение можно задать при создание, т.е.:
Код
source = ChamferBox name:"box_0_0" pos:[.0, .0, .0]
Go to the top of the page
 
+Quote Post
v79italya
сообщение 04/05/2017, 13:08
Сообщение #5


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



значит, после строки
source = ChamferBox() -- я могу обработать этот чамфербокс, назначить материал и только после размножать? если так, то вопросов пока нет. только проверить смогу часа через два.
спасибо за помощь.
Go to the top of the page
 
+Quote Post
v79italya
сообщение 05/05/2017, 07:09
Сообщение #6


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



можно еще побеспокою жителей форума. вот код:
CODE
source = ChamferBox name:"box_0_0" Length_Segments:1 Width_Segments:1 Height_Segments:2 Fillet_Segments:4 length:v width:d height:10 Fillet:6 smooth:0 mapcoords:1 pos:[.0, .0, .0]

--select source
modPanel.addModToSelection (Edit_Poly ()) ui:on
subobjectLevel = 1

source.modifiers[#Edit_Poly].SetSelection #Vertex #{}
source.modifiers[#Edit_Poly].Select #Vertex #{105..188}
actionMan.executeAction 0 "40020" -- Edit: Delete Objects
source.modifiers[#Edit_Poly].ButtonOp #DeleteVertex
source.material = meditMaterials[10]

ранее, макро рекордер записал действия с выделеным объектом. затем, внеся изменения в код и заменив знак доллара на source, не получаю выполнение всех действий, хотя материал назначается. не подскажете в чем ошибка?
Go to the top of the page
 
+Quote Post
GoodMan_
сообщение 05/05/2017, 09:27
Сообщение #7


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

Группа: Участник
Сообщений: 711
Регистрация: 28/02/2003
Из: Минск, Беларусь
Пользователь №: 1 555



А зачем в коде убирать выделение нужного объекта т.е.
Код
--select source
?

Сообщение отредактировал GoodMan_ - 05/05/2017, 09:28
Go to the top of the page
 
+Quote Post
v79italya
сообщение 05/05/2017, 10:19
Сообщение #8


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



сейчас так и пользуюсь, выделяя source. я думал что есть вариант и без выделения объекта.
смысл сначала создавать объект, потом выделять его, а затем уже работать с выделением? не подскажете ли вариант работы с объектом, не выделяя его.
Go to the top of the page
 
+Quote Post
Jahman
сообщение 05/05/2017, 10:23
Сообщение #9


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

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



QUOTE (v79italya @ 05/05/2017, 07:09) *
затем, внеся изменения в код и заменив знак доллара на source, не получаю выполнение всех действий

В максе много таких моментов, когда логика подсказывает, что нет никакой разницы, но разница есть.
С модификатором без выделения нужного объекта подобного не сделать. А просто с поли объектом запросто
Go to the top of the page
 
+Quote Post
GoodMan_
сообщение 05/05/2017, 10:32
Сообщение #10


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

Группа: Участник
Сообщений: 711
Регистрация: 28/02/2003
Из: Минск, Беларусь
Пользователь №: 1 555



На сколько я знаю, для работы с модификаторами объектов через maxscript - они (объекты) должны быть выделены. По другому никак. и это связано в т.ч. с тем, как обрабатываются данные в сцене МАХ-а. С базовым объектом в этом плане гораздо проще.

Если "парит" доп. строка для выделения объекта, можно написать так:
Код
select (source = ChamferBox name:"box_0_0" Length_Segments:1 Width_Segments:1 Height_Segments:2 Fillet_Segments:4 length:v width:d height:10 Fillet:6 smooth:0 mapcoords:1 pos:[.0, .0, .0])

Хотя это не очень красивый вариант. )
Go to the top of the page
 
+Quote Post
v79italya
сообщение 05/05/2017, 10:38
Сообщение #11


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



спасибо за ответы. буду работать с объектами, выделяя их. так и код мне понятнее. вопросов больше нет.
Go to the top of the page
 
+Quote Post
v79italya
сообщение 06/05/2017, 18:12
Сообщение #12


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



приветствую. позвольте еще пару вопросов решить с Вашей помощью. мне необходимо скриптом собрать боксы как на рисунке 1. макро рекордер по неизвестной мне причине не записывает действия инструмента Array... также нужно обрезать собранный массив по размерам бокса 51 так, чтобы сохранилась геометрия рисунка наложенного материала. не могли бы показать каким кодом это можно сделать? сам пытался разложить циклом массив, но не получилось. прикладываю код в нерабочем виде и доп. материалы для решения вопроса.
CODE

max select all
max delete




Box lengthsegs:1 widthsegs:1 heightsegs:1 length:100 width:100 height:10 mapcoords:on pos:[0,0,0] isSelected:on
Box lengthsegs:1 widthsegs:1 heightsegs:1 length:25 width:25 height:10 mapcoords:on pos:[37.5,-63.5,0] isSelected:on
select #($Box02, $Box01)

source=selection



hCount = 5
vCount = 5
offset1 = 5.0
offset2 = 35.0
--source = box name:"box_0_0" pos:[.0, .0, .0]

for i = 1 to hCount do (
for j = 1 to vCount do (
newBox = instance source
newBox.name = "box_" + i as string + "_" + j as string
newBox.pos = [i * offset1, j * offset2, 0.0]
)
)

--delete source



ps не нашел возможности загрузить файл 3d max на форум. вместо этого прикрепил еще рисунок с разложенными боксами и боксом фиолетового цвета, по периметру которого нужно обрезать разложенные боксы.
Эскизы прикрепленных изображений
Прикрепленное изображение
 

Прикрепленные изображения
Прикрепленное изображение Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
v79italya
сообщение 06/05/2017, 19:27
Сообщение #13


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

Группа: Пользователи
Сообщений: 30
Регистрация: 04/05/2017
Пользователь №: 134 636



как оказалось, архивы принимает.
Прикрепленные файлы
Прикрепленный файл  1.rar ( 16,09 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
Jahman
сообщение 06/05/2017, 19:49
Сообщение #14


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

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



CODE
delete objects

b1 = plane width:10 length:10 widthsegments:1 lengthsegments:1
b2 = plane width:4 length:4 widthsegments:1 lengthsegments:1
offset = 0.2

hide b1
hide b2

for y=1 to 10 do (
    
    for x=1 to 10 do (
        
        b = instance b1
        b.pos = [x * (b1.width + offset) + (b2.width + offset)* y , y*(b1.length + offset) - x * (b2.length + offset) , 0 ]
        bb = instance b2
        bb.pos.x = b.pos.x + b1.width/2.0  + b2.width/2.0 + offset
        bb.pos.y = b.pos.y + b1.length/2.0 - b2.length/2.0
        
        b.wirecolor  = brown
        bb.wirecolor = brown * 0.25
        
    )    
    
)
Go to the top of the page
 
+Quote Post
Jahman
сообщение 06/05/2017, 20:00
Сообщение #15


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

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



ну и южно-азиатский режим 37[1].gif

CODE
delete objects

b1 = plane width:10 length:10 widthsegments:1 lengthsegments:1
b2 = plane width:4 length:4 widthsegments:1 lengthsegments:1
offset = 0.2

hide b1
hide b2

for y=1 to 10 do (
    
    for x=1 to 10 do (
        
        b = instance b1
        b.pos = [x * (b1.width + offset) + (b2.width + offset)* y , y*(b1.length + offset) - x * (b2.length + offset) , 0 ]
        bb = instance b2
        bb.pos.x = b.pos.x + b1.width/2.0  + b2.width/2.0 + offset
        bb.pos.y = b.pos.y + b1.length/2.0 - b2.length/2.0
        
        b.wirecolor  = brown
        bb.wirecolor = brown * 0.25
        
    )    
    
)
for o in objects do rotate o (eulerangles 0 0 (random -3.0 3.0) as quat)
Go to the top of the page
 
+Quote Post
Bots
сообщение Системное сообщение






4 страниц V   1 2 3 > » 
Reply to this topicStart new topic

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

 



RSS Текстовая версия Сейчас: 23/11/2017 - 21:36