////////////////////////////////////////////////////// // // // ZScript "ZRectangularA" for ZBrush 2.0 by RVy // // VRubantsev@t-online.de // // // ////////////////////////////////////////////////////// ////////////////////////////////////////////////////// // Variables // ////////////////////////////////////////////////////// [VarDef, FALSE,bool(0)] //- константа FALSE [VarDef, TRUE, bool(1)] //- константа TRUE [VarDef, flgNewLayer, TRUE] [VarDef, Depth, 0] [VarDef, LineWidth, 1] [VarDef, SliderWidth,128] [VarDef, ButtonWidth,128] [VarDef, SliderOffsetX,8] [VarDef, nGridLayer,1] [VarDef, iGridDepth,0] [VarDef, flgDotsGrid,FALSE] [VarDef, Width, [IGet,Document:Modifiers:Width]] [VarDef, Height, [IGet,Document:Modifiers:Height]] ////////////////////////////////////////////////////// // Window & Title // ////////////////////////////////////////////////////// [PageSetWidth, 401] // - ширина окна вывода визуальной информации [PaintBackground, 40, 28, 70] // - цвет фона Окна скриптов [PaintBackSliver,600,19,124,118] // - выделить цветом область скрипта [PaintPageBreak] // - отметить начало скрипта [PropertySet, Title, 0, 3] // - крупный размер шрифта в Title [PropertySet, Title, 1, 0] // - выравнивание строки Title по центру окна скриптов [PropertySet, Title, 2, 1] // - увеличить яркость символов в строке Title [PropertySet, Title, 3, [RGB,255, 255,0]] // - цвет символов в строке Title [PropertySet, Title, 4, 10] // - размеры рамки вокруг строки Title [PropertySet, Title, 6, 4] // - тип заливки рамки - двойной вертикальный градиент [PropertySet, Title, 5, [RGB,255, 0,0]] // - центральный цвет градиента [PropertySet, Title, 7, [RGB,0,0,255]] // - периферийный цвет градиента [pd] // - немного отступить от верхнего края окна [Title, " zRectangularA "] // - название скрипта [IUnPress, ZScript: Show Actions] //[Randomize] [FontSetSizeSmall] /////////////////////////////////////////////////////// // DRAW // /////////////////////////////////////////////////////// [pd][PenMove,,12] //УСТАНОBИТЬ ГЛУБИНУ СЛОЯ С УЗОРОМ [ISlider,"GridDepth",0,200,-4096, 4096, "Depth of Grid", [VarSet, Depth, [IGet,0]] ,,SliderWidth] //УСТАНОВИТЬ ТОЛЩИНУ ЛИНИЙ [PenMove,SliderOffsetX] [ISlider,"LinesWidth",4,2,2,4, "Lines Width", [VarSet, LineWidth, [IGet,0]] ,,SliderWidth] //ИЗМЕНИТЬ ГЛУБИНУ СЕТКИ [PenMove,SliderOffsetX] [ISlider,"NewGridDepth",0,200,-4096, 4096, "New Depth of Grid", //сделать текущим слой с узором: [VarSet, iTmp, nGridLayer+1][If, iTmp > 16, [Exit]] [VarSet, strtmp, [strmerge,"Layer: Layer ",[var,iTmp]]] [IPress,strtmp] [VarSet, iTmp, iGridDepth] [VarSet, iGridDepth, [IGet, 0]] [ISet, Layer: Displace Z, iGridDepth-iTmp] ,,SliderWidth] // [PD] //СОЗДАТЬ НОВЫЙ СЛОЙ ДЛЯ УЗОРА [ISwitch,"NewLayer",0,"Bake RectLayer & Create New Layer", ,,,SliderWidth] // [PenMove,SliderOffsetX] //Выбрать вид узора - линии/точки [ISwitch,"DotsRect",0,"Type of Rect", [VarSet,flgDotsGrid,TRUE] [IEnable,2] [Iset, 2,1] [IEnable,3] [Iset, 3,0] [IEnable,4] [Iset, 4,0] //материал по умолчанию: [IPress,MATERIAL:ToyPlastic] //по умолчанию инструмент - сфера: [IPress,Tool:Sphere3D] //толщина линий по умолчанию: [Iset,ZScript:LinesWidth,4] , [VarSet,flgDotsGrid,FALSE] [IDisable,2] [IDisable,3] [IDisable,4] ,,SliderWidth] // [PenMove,SliderOffsetX] [IButton,"CreateNewLayer", "Create New Layer", [If,[IGetStatus, Layer:Create], [IPress, Layer: Create] , [MessageOK, "No more Layers!","ZGrid"] [Exit] ] //сделать текущим слой с узором: [VarSet, iTmp, nGridLayer] [VarSEt, strtmp, [strmerge,"Layer: Layer ",[var,iTmp]]] [IPress,strtmp] ,,ButtonWidth] // [PD] //РИСОВАТЬ СФЕРАМИ [ISwitch,"DrawSphere",1,"DrawSphere", //материал: [IPress,MATERIAL:ToyPlastic] //выбираем инструмент сферу: [IPress,Tool:Sphere3D] //выключаем другие флажки: [Iset, 1,0] [Iset, 2,0] //толщина линий по умолчанию: [Iset,ZScript:LinesWidth,4] ,,1,SliderWidth] // [PenMove,SliderOffsetX] //РИСОВАТЬ ТОРАМИ [ISwitch,"DrawRing",0,"DrawRing", [IPress,MATERIAL:QuadShaders] [IPress,Tool:Ring3D] [Iset, 1,0] [Iset, -1,0] [Iset,ZScript:LinesWidth,4] ,,1,SliderWidth] // [PenMove,SliderOffsetX] //РИСОВАТЬ ТЕРРАЙНАМИ [ISwitch,"DrawTerrain",0,"DrawTerrain", [IPress,MATERIAL:Doubleshade1] [IPress,Tool:Terrain3D] [Iset, -1,0] [Iset, -2,0] [Iset,ZScript:LinesWidth,4] ,,1,SliderWidth] // // [PenMove,SliderOffsetX] [PD][PenMove,,3] //НАРИСОВАТЬ СЕТКУ [IButton," Draw Rects", "Draw Rects!", //скопировать значение Depth в движок NewGridDepth [Iset, ZScript:NewGridDepth,Depth] //найти номер следующего свободного слоя: [RoutineCall, FindNextLayer] //--> nGridLayer //если нужно, создать новый слой для узора: [If, [IGet, ZScript: NewLayer] = 1, [If,[IGetStatus, Layer:Create], [IPress, Layer: Create] , [MessageOK, "No more Layers!","ZGrid"] [Exit] ] , ] [IPress, Stroke: DragRect] //установить новые размеры документа (узора): [ISet, Document: Pro, 0] [ISet, Document: Width, 600*2] [ISet, Document: Height, 500*2] [IPress, Document: Resize] [IPress, Zoom: AAHalf] //установить белый цвет фона: [IColorSet,233, 233, 233] [IPress, Document: Back] [IPress, Layer: Clear] //выключить текстуры: [IPress, Texture: Txtr00] //нарисовать узор: [RoutineCall, PaintRects] //сделать текущим слой c узором: [VarSet, strtmp, [strmerge,"Layer: Layer ",[var,nGridLayer]]] [IPress,strtmp] [IPress,LAYER:Bake] [ISet,Transform:Info:ZComponent,0] ,,400] //Draw Rects ////////////////////////////////////////////////////////// // ROUTINES // ////////////////////////////////////////////////////////// //НАРИСОВАТЬ СЕТКУ ЛИНИЯМИ [RoutineDef, PaintRects, //устанавливаем размеры узора: [VarSet, Height, [IGet,Document:Modifiers:Height]] [VarSet, Width, [IGet,Document:Modifiers:Width]] //толщина линий: [VarSet, LineWidth, [IGet,ZScript:LinesWidth]] [If, flgDotsGrid = TRUE, [VarMul,LineWidth,5]] [VarSet, Xmin, LineWidth/2] [VarSet, Ymin, LineWidth/2] [VarSet, Xmax, Width-(LineWidth/2)] [VarSet, Ymax, Height-(LineWidth/2)] [Loop,9999, [VarSet,iTmp, Rand(1)] [Loop, 6, [Loop, 6, [VarSet, X1, Xmin] [VarSet, Y1, Ymin] [VarSet, X2, Xmax] [VarSet, Y2, Ymax] //выбрать случайный цвет линий: //[IColorSet, 128+Rand(128), 128+Rand(128),128+Rand(128)] [IColorSet, Rand(255), Rand(255),Rand(255)] [Loop,999, [if, (X1 <= Xmax) && (Y1 <= Ymax), [If, flgDotsGrid = FALSE, [RoutineCall,DrawRect,X1,Y1,X2,Y2] , [RoutineCall,DrawDotRect,X1,Y1,X2,Y2] ] , [LoopExit] ] [VarAdd, X1, (6-i)*LineWidth] [VarAdd, Y1, j*LineWidth] [VarSub, X2, (6-i)*LineWidth] [VarSub, Y2, j*LineWidth] ] ,j] ,i] ] ]//PaintGrid //НАРИСОВАТЬ ПРЯМОУГОЛЬНИК ИЗ ЛИНИЙ ПО КООРДИНАТАМ ВЕРШИН [RoutineDef,DrawRect, //выбираем материал для линий: [IPress,MATERIAL:ToyPlastic] //выбираем инструмент куб - линии будут из кубов: [IPress,Tool:Cube3D] [VarSet, wLine, xRB-xLT] [VarSet, hLine, yRB-yLT] //Горизонтальные линии --> [CanvasClick,0,0,0,-1] [TransformSet,Width/2, yLT, Depth, wLine/2+LineWidth, LineWidth, LineWidth, 0, 0, 0] [CanvasClick,0,0,0,-1] [TransformSet,Width/2, yRB, Depth, wLine/2+LineWidth, LineWidth, LineWidth, 0, 0, 0] //Вертикальные линии --> [CanvasClick,0,0,0,-1] [TransformSet, XLT, Height/2, Depth, LineWidth, hLine/2, LineWidth, 0, 0, 0] [CanvasClick,0,0,0,-1] [TransformSet, XRB, Height/2, Depth, LineWidth, hLine/2, LineWidth, 0, 0, 0] ,xLT,yLT,xRB,yRB] //НАРИСОВАТЬ ПРЯМОУГОЛЬНИК ИЗ ТОЧЕК ПО КООРДИНАТАМ ВЕРШИН [RoutineDef,DrawDotRect, [VarSet, wLine, xRB-xLT] [VarSet, hLine, yRB-yLT] //Горизонтальные линии --> //число точек по горизонтали: [VarSet, Columns, int(wLine/LineWidth/2+1)] [VarSet, XPosition, xLT] [Loop, Columns, [CanvasClick,0,0,0,-1] [TransformSet,XPosition+(LineWidth/2), yLT+(LineWidth/2), Depth, LineWidth, LineWidth, LineWidth, 0, 0, 0] [CanvasClick,0,0,0,-1] [TransformSet,XPosition+(LineWidth/2), yRB-(LineWidth/2), Depth, LineWidth, LineWidth, LineWidth, 0, 0, 0] [VarAdd, XPosition, LineWidth*2] ,i] //Вертикальные линии --> //число точек по вертикали: [VarSet, Rows, int(hLine/ LineWidth/2 + 1)] [VarSet, yPosition, yLT] [Loop, Rows, [CanvasClick,0,0,0,-1] [TransformSet,XLT+(LineWidth/2), yPosition+(LineWidth/2), Depth, LineWidth, LineWidth, LineWidth, 0, 0, 0] [CanvasClick,0,0,0,-1] [TransformSet,XRB-(LineWidth/2), yPosition+(LineWidth/2), Depth, LineWidth, LineWidth, LineWidth, 0, 0, 0] [VarAdd, yPosition, LineWidth*2] ,i] ,xLT,yLT,xRB,yRB] //НАЙТИ НОМЕР СВОБОДНОГО СЛОЯ --> nGridLayer [RoutineDef,FindNextLayer, [Loop,16, [varset,nGridLayer,i+1] [VarSEt, strtmp, [strmerge,"Layer: Layer",[var,nGridLayer]]] [If, ![IsEnabled,strtmp], [LoopExit] ] ,i] ]//FindNextLayer