скриптом создать массив боксов |
Home· Статьи · Вакансии · Чертежи · 3D Галерея · 2D Галерея · Форум · Форум Realtime | Реклама |  Конкурсы | RAR Award | Правила |
Здравствуйте, гость ( Вход | Регистрация )
скриптом создать массив боксов |
04/05/2017, 09:19
Сообщение
#1
|
|
Ученик Группа: Пользователи Сообщений: 30 Регистрация: 04/05/2017 Пользователь №: 134 636 |
добрый день. не могли бы поправить код скрипта. необходимо создать 81 куб с расположением как, незнаю, в тетрадке в клетку без каких либо сдвигов.сейчас скрипт по иксу выполняет правильно, а по игрику неправильно. должно получиться как будто один куб скопирован по иксу восемь копий, после выделив все девять кубов скопировано по игрику восемь копий. в итоге 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 ) |
|
|
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 |
|
|
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д максом с месяца три-четыре. |
|
|
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]
|
|
|
04/05/2017, 13:08
Сообщение
#5
|
|
Ученик Группа: Пользователи Сообщений: 30 Регистрация: 04/05/2017 Пользователь №: 134 636 |
значит, после строки
source = ChamferBox() -- я могу обработать этот чамфербокс, назначить материал и только после размножать? если так, то вопросов пока нет. только проверить смогу часа через два. спасибо за помощь. |
|
|
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, не получаю выполнение всех действий, хотя материал назначается. не подскажете в чем ошибка? |
|
|
05/05/2017, 09:27
Сообщение
#7
|
|
Эксперт Группа: Участник Сообщений: 712 Регистрация: 28/02/2003 Из: Минск, Беларусь Пользователь №: 1 555 |
А зачем в коде убирать выделение нужного объекта т.е.
Код --select source ?
Сообщение отредактировал GoodMan_ - 05/05/2017, 09:28 |
|
|
05/05/2017, 10:19
Сообщение
#8
|
|
Ученик Группа: Пользователи Сообщений: 30 Регистрация: 04/05/2017 Пользователь №: 134 636 |
сейчас так и пользуюсь, выделяя source. я думал что есть вариант и без выделения объекта.
смысл сначала создавать объект, потом выделять его, а затем уже работать с выделением? не подскажете ли вариант работы с объектом, не выделяя его. |
|
|
05/05/2017, 10:23
Сообщение
#9
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 01/06/2005 Из: z3л3№гр@d Пользователь №: 13 838 |
затем, внеся изменения в код и заменив знак доллара на source, не получаю выполнение всех действий В максе много таких моментов, когда логика подсказывает, что нет никакой разницы, но разница есть. С модификатором без выделения нужного объекта подобного не сделать. А просто с поли объектом запросто |
|
|
05/05/2017, 10:32
Сообщение
#10
|
|
Эксперт Группа: Участник Сообщений: 712 Регистрация: 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]) Хотя это не очень красивый вариант. ) |
|
|
05/05/2017, 10:38
Сообщение
#11
|
|
Ученик Группа: Пользователи Сообщений: 30 Регистрация: 04/05/2017 Пользователь №: 134 636 |
спасибо за ответы. буду работать с объектами, выделяя их. так и код мне понятнее. вопросов больше нет.
|
|
|
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 на форум. вместо этого прикрепил еще рисунок с разложенными боксами и боксом фиолетового цвета, по периметру которого нужно обрезать разложенные боксы.
Прикрепленные изображения
|
|
|
06/05/2017, 19:27
Сообщение
#13
|
|
Ученик Группа: Пользователи Сообщений: 30 Регистрация: 04/05/2017 Пользователь №: 134 636 |
|
|
|
06/05/2017, 19:49
Сообщение
#14
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 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 ) ) |
|
|
06/05/2017, 20:00
Сообщение
#15
|
|
уже всё сделал Группа: Пользователи Сообщений: 2 456 Регистрация: 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 ) ) for o in objects do rotate o (eulerangles 0 0 (random -3.0 3.0) as quat) |
|
|
Bots |
Системное сообщение
|
|
|
|
|
Текстовая версия | Сейчас: 25/04/2024 - 09:37 |