////////////////////////////////////////////////////// // // // ZScript "ZGrid" 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, iRed,0] [VarDef, iGreen,0] [VarDef, iBlue,0] //цвет не выделенных линий: [VarDef, iRed1, 0] [VarDef, iGreen1, 128] [VarDef, iBlue1, 0] //цвет выделенных линий: [VarDef, iRed2, 255] [VarDef, iGreen2, 0] [VarDef, iBlue2, 0] [VarDef, Depth, 0] [VarDef, DeltaX, 40] [VarDef, DeltaY, 40] [VarDef, LineWidth, 1] [VarDef, SliderWidth,128] [VarDef, ButtonWidth,128] [VarDef, SliderOffsetX,8] [VarDef, #xPos,0] [VarDef, #yPos,0] [VarDef, #zPos,0] [VarDef, #xScale,0] [VarDef, #yScale,0] [VarDef, #zScale,0] [VarDef, #xAngle,0] [VarDef, #yAngle,0] [VarDef, #zAngle,0] [VarDef, nGridLayer,1] [VarDef, iGridDepth,0] [VarDef, flgDotsGrid,FALSE] ////////////////////////////////////////////////////// // 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]] // - периферийный цвет градиента [FontSetSizeSmall] [PD] // - немного отступить от верхнего края окна [Title, " ZGrid for ZBrush 2.0 "] // - название скрипта [IUnPress, ZScript: Show Actions] /////////////////////////////////////////////////////// // Document // /////////////////////////////////////////////////////// [PD][PenMove,,12][PenMoveCenter] [FontSetSizeMedium] [SectionBegin,"<<<<<<<<<<<<<<<< DOCUMENT >>>>>>>>>>>>>>>>>>",0, "DocumentWindow"] [PropertySet,Caption,6,4] //- двойной вертикальный градиент [PropertySet,Caption,0,2] //- средний размер шрифта [PropertySet,Caption,1,1] //- выравнивание по левому краю [PropertySet, Caption, 3, [RGB, 0,0,0]] //- цвет символов - чёрный [PropertySet, Caption, 5, [RGB, 0,255,0]]//- цвет градиента - зелёный [PenMoveLeft] //-------------------- //Цвет фона документа //-------------------- [iSet, Color: Maincolor, [iGet,Document:Back]] [FontSetColor, 255, 255, 0] [FontSetSizeMedium] Document Background Color > //Установить значение красной составляющей цвета: [ISlider,Red, [IGet,Color:R], 1, 0, 255,"Set Red Component", [VarSet,iRed,[IGet,0]] [IColorSet,iRed, iGreen, iBlue] [IPress, Document: Back] ,,SliderWidth] // [PenMove,SliderOffsetX] //Установить значение зелёной составляющей цвета [ISlider,Green, [IGet,Color:G], 1, 0, 255,"Set Green Component", [VarSet,iGreen,[IGet,0]] [IColorSet,iRed, iGreen, iBlue] [IPress, Document: Back] ,,SliderWidth] // [PenMove,SliderOffsetX] //Установить значение синей составляющей цвета [ISlider,Blue, [IGet,Color:B], 1, 0, 255,"Set Blue Component", [VarSet,iBlue,[IGet,0]] [IColorSet,iRed, iGreen, iBlue] [IPress, Document: Back] ,,SliderWidth] // [PD] [IButton,"WhiteColor","Set White Color", [Iset, ZScript:Red, 255] [Iset, ZScript:Green, 255] [Iset, ZScript:Blue, 255] ,,ButtonWidth] [PenMove,SliderOffsetX] [IButton,"MainColor","Set Main Color", [VarSet,iGreen,[IGet,Color:G]] [VarSet,iBlue,[IGet,Color:B]] [Iset, ZScript:Red, [IGet,Color:R]] [Iset, ZScript:Green, [IGet,Color:G]] [Iset, ZScript:Blue, [IGet,Color:B]] ,,ButtonWidth] [PenMove,SliderOffsetX] [IButton,"BlackColor","Set Black Color", [Iset, ZScript:Red, 0] [Iset, ZScript:Green, 0] [Iset, ZScript:Blue, 0] ,,ButtonWidth] // [PD] Document Properties > [PD] [ISwitch, NewPro, 1, "Constrain Proportions", [ISet, Document: Pro, [IGet, 0]], [ISet, Document: Pro, [IGet, 0]] ,, ButtonWidth] [PenMove,SliderOffsetX] [ISlider,"NewWidth",640,10,100, 4096, "New Width of Grid (Document)", [ISet, Document: Pro, [IGet, -1]] [ISet, Document: Width, [IGet, 0]] [ISet, 1, [IGet, Document: Height]] ,,ButtonWidth] [PenMove,SliderOffsetX] [ISlider,"NewHeight",480,10,100, 4096, "New Height of Grid (Document)", [ISet, Document: Pro, [IGet, -2]] [ISet, Document: Height, [IGet, 0]] [ISet, -1, [IGet, Document: Width]] ,,ButtonWidth] [PenMove,SliderOffsetX] // [IButton,"CropDoc", "Crop Document", [IPress, Document: Crop] ,,ButtonWidth] [PenMove,SliderOffsetX] [IButton,"ResizeDoc", "Resize Document", [IPress, Document: Resize] ,,ButtonWidth] [PenMove,SliderOffsetX] [IButton,"CreateNewDoc", "Create New Document", [IPress, Document: New Document] [Iset, ZScript:NewWidth, 640] [Iset, ZScript:NewHeight, 480] [Iset, ZScript:Red, 128] [Iset, ZScript:Green, 128] [Iset, ZScript:Blue, 128] ,,ButtonWidth] [sectionEnd] //DocumentWindow [PD][PD] [SectionBegin,"<<<<<<<<<<<<<<<<<< GRID >>>>>>>>>>>>>>>>>>>>",1, "GridWindow"] [FontSetColor, 255, 255, 0] [FontSetSizeMedium] Color1 > [PaintRect, 399,16,iRed1, iGreen1, iBlue1] //Установить значение красной составляющей цвета: [ISlider,Red1, 0, 1, 0, 255,"Set Red1 Component", [VarSet,iRed1,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] [PenMove,SliderOffsetX] //Установить значение зелёной составляющей цвета: [ISlider,Green1, 128, 1, 0, 255,"Set Green1 Component", [VarSet,iGreen1,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] [PenMove,SliderOffsetX] //Установить значение синей составляющей цвета: [ISlider,Blue1, 0, 1, 0, 255,"Set Blue1 Component", [VarSet,iBlue1,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] // [PD] Color2 > [PD] [PaintRect, 399,16,iRed2, iGreen2, iBlue2] //Установить значение красной составляющей цвета: [ISlider,Red2, 255, 1, 0, 255,"Set Red2 Component", [VarSet,iRed2,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] [PenMove,SliderOffsetX] //Установить значение зелёной составляющей цвета: [ISlider,Green2, 0, 1, 0, 255,"Set Green2 Component", [VarSet,iGreen2,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] [PenMove,SliderOffsetX] //Установить значение синей составляющей цвета: [ISlider,Blue2, 0, 1, 0, 255,"Set Blue2 Component", [VarSet,iBlue2,[IGet,0]] [RoutineCall,ShowDocumentWindow] ,,SliderWidth] [PD] Grid Properties >[PD] [ISwitch, dX = dY, 1, "Equal Distance", [Iset, 2,[IGet,1]] ,,, ButtonWidth] [PenMove,SliderOffsetX] //Установить расстояние между линиями сетки вдоль оси X [ISlider,"xDistance",40,1,1,100, "Distance between the Grid Lines along X-axis", [If, [IGet, -1]= TRUE, [Iset, 1,[IGet,0]]] [VarSet, DeltaX, [IGet,0]] ,,SliderWidth] [PenMove,SliderOffsetX] //Установить расстояние между линиями сетки вдоль оси Y [ISlider,"yDistance",40,1,1,100, "Distance between the Grid Lines along Y-axis", [If, [IGet, -2]= TRUE, [Iset, -1,[IGet,0]]] [VarSet, DeltaY, [IGet,0]] ,,SliderWidth] // [PD] //УСТАНОBИТЬ ГЛУБИНУ СЕТКИ [ISlider,"GridDepth",0,200,-4096, 4096, "Depth of Grid", [VarSet, Depth, [IGet,0]] ,,SliderWidth] //УСТАНОВИТЬ ТОЛЩИНУ ЛИНИЙ [PenMove,SliderOffsetX] [ISlider,"LinesWidth",1,1,1,40, "Lines Width", [VarSet, LineWidth, [IGet,0]] ,,SliderWidth] //ИЗМЕНИТЬ ГЛУБИНУ СЕТКИ [PenMove,SliderOffsetX] [ISlider,"NewGridDepth",0,200,-4096, 4096, "New Depth of Grid", //сделать текущим слой с сеткой: [VarSet, iTmp, nGridLayer+1] [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",1,"Bake GridLayer & Create New Layer", ,,,SliderWidth] // [PenMove,SliderOffsetX] //Выбрать вид сетки - линии/точки [ISwitch,"DotsGrid",0,"Type of Grid", [VarSet,flgDotsGrid,TRUE], [VarSet,flgDotsGrid,FALSE] ,,SliderWidth] // [PenMove,SliderOffsetX] [IButton,"CreateNewLayer", "Create New Layer", //сделать текущим слой с сеткой: [VarSet, iTmp, nGridLayer] [VarSEt, strtmp, [strmerge,"Layer: Layer ",[var,iTmp]]] [IPress,strtmp] [If,[IGetStatus, Layer:Create], [IPress, Layer: Create] , [MessageOK, "No more Layers!","ZGrid"] [Exit] ] ,,ButtonWidth] // [PD][PenMove,,8] //НАРИСОВАТЬ СЕТКУ [IButton," Draw Grid", "Draw Grid!", //[IReset,,1.55] //скопировать значение Depth в движок NewGridDepth [Iset, ZScript:NewGridDepth,Depth] //найти номер следующего свободного слоя: [RoutineCall, FindNextLayer] //--> nGridLayer //если нужно, создать новый слой для сетки: [If, [IGet, ZScript: NewLayer] = 1, [If,[IGetStatus, Layer:Create], [IPress, Layer: Create] //[VarDec, nGridLayer] //- номер предыдущего слоя , [MessageOK, "No more Layers!","ZGrid"] [Exit] ] , ] [IPress, Stroke: DragRect] //нарисовать сетку: [If, flgDotsGrid = FALSE, [RoutineCall, PaintGrid] , [RoutineCall, PaintDotGrid] ] //сделать текущим слой c сеткой: [VarSet, strtmp, [strmerge,"Layer: Layer ",[var,nGridLayer]]] [IPress,strtmp] [IPress,LAYER:Bake] [ISet,Transform:Info:ZComponent,0] ,,400] //Draw Grid [sectionEnd] //GridWindow [PD][PD] [SectionBegin,"<<<<<<<<<<<<<<<< TRANSFORM >>>>>>>>>>>>>>>>>",0, "TransformWindow"] [PD] [IButton,"AlignTool","Alignment", [If,[IGetStatus, Transform: Move] = 0, [MessageOK, "No movable Object!","ZGrid"] [Exit] ] [IUnPress,Transform:EditObject] [IPress,Transform:Move] [CanvasGyroHide] //перемещение объекта за мышкой с привязкой к узлам сетки [Loop,99999, [VarSet,hPos,int([MouseHPos] / DeltaX)] [VarSet,vPos,int([MouseVPos] / DeltaY)] [ISet,Transform:Info:XComponent,hPos * DeltaX] [ISet,Transform:Info:YComponent,vPos * DeltaY] //нажать левую кнопку мыши - поместить объект на канву [If,[MouseLButton]=1, [If, ZScript:MarkObject, [IPress,Transform:Mark] ] //[IPress,Transform:Edit] [Exit] , ] ] ,,ButtonWidth]//Alignment // [PenMove,SliderOffsetX] //ПОЛУЧИТЬ ДАННЫЕ О ТЕКУЩЕЙ ПОЗИЦИИ ОБЪЕКТА [IButton,"GetPosition", "Get Current Position", [TransformGet, #xPos,#yPos,#zPos, #xScale,#yScale,#zScale, #xAngle,#yAngle,#zAngle] [ISet,ZScript:xPos, #xPos] [ISet,ZScript:yPos, #yPos] [ISet,ZScript:zPos, #zPos] [ISet,ZScript:xScale,#xScale][ISet,ZScript:yScale,#yScale][ISet,ZScript:zScale,#zScale] [ISet,ZScript:xAngle,#xAngle][ISet,ZScript:yAngle,#yAngle][ISet,ZScript:zAngle,#zAngle] ,,ButtonWidth] // [PenMove,SliderOffsetX] //МАРКИРОВАТЬ ОБЪЕКТ [ISwitch,"MarkObject",0,"Add a Marker", ,,,SliderWidth] // [PD] [ISlider,"XPos",0,10,0, 4096, "X Position", [VarSet,#xPos,[iGet,0]] [TransformSet, #xPos,#yPos,#zPos, #xScale,#yScale,#zScale, #xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"YPos",0,10,0, 4096, "Y Position", [VarSet,#yPos,[iGet,0]] [TransformSet, #xPos,#yPos,#zPos, #xScale,#yScale,#zScale, #xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"ZPos",0,100,-4096, 4096, "Z Position", [VarSet,#zPos,[iGet,0]] [TransformSet, #xPos,#yPos,#zPos, #xScale,#yScale,#zScale, #xAngle,#yAngle,#zAngle] ,,SliderWidth] [PD] [ISlider,"XScale",0,1, 1, 500, "X Scale", [VarSet,#xScale,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"YScale",0,1,1, 500, "Y Scale", [VarSet,#yScale,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"ZScale",0,1,1, 500, "Z Scale", [VarSet,#zScale,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [PD] [ISlider,"XAngle",0,1,-360, 360, "X Angle", [VarSet,#xAngle,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"YAngle",0,1,-360, 360, "Y Angle", [VarSet,#yAngle,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [PenMove,SliderOffsetX] [ISlider,"ZAngle",0,1,-360, 360, "Z Angle", [VarSet,#zAngle,[iGet,0]] [TransformSet, #xPos,#yPos ,#zPos,#xScale, #yScale, #zScale,#xAngle,#yAngle,#zAngle] ,,SliderWidth] [sectionEnd] //TransformWindow ////////////////////////////////////////////////////////// // ROUTINES // ////////////////////////////////////////////////////////// //НАРИСОВАТЬ СЕТКУ ТОЧКАМИ [RoutineDef, PaintDotGrid, //выбираем инструмент: [IPress,Tool:Sphere3D] //выбираем материал для линий: [IPress,MATERIAL:ToyPlastic] //устанавливаем размеры сетки: [VarSet, Height, [IGet,Document:Modifiers:Height]] [VarSet, Width, [IGet,Document:Modifiers:Width]] //число горизонтальных линий: [VarSet, Rows, int(Height / DeltaY + 1)] //число вертикальных линий: [VarSet, Columns, int(Width / DeltaX + 1)] [VarSet, YPosition, 0] [Loop, Rows, [VarSet, XPosition, 0] [Loop, Columns, //установить цвет линий: [If, (int(i / 5) * 5) = i, [IColorSet, iRed2, iGreen2, iBlue2] , [IColorSet, iRed1, iGreen1, iBlue1] ] [If, (int(j / 5) * 5) = j, [IColorSet, iRed2, iGreen2, iBlue2] ] [CanvasClick,0,0,0,1] [TransformSet,XPosition, YPosition, Depth, LineWidth, LineWidth, LineWidth, 0, 0, 0] [VarAdd, XPosition, DeltaX] ,i]//Columns [VarAdd, YPosition, DeltaY] ,j]//Rows ]//PaintDotGrid //НАРИСОВАТЬ СЕТКУ ЛИНИЯМИ [RoutineDef, PaintGrid, //выбираем материал для линий: [IPress,MATERIAL:ToyPlastic]//[IPress,MATERIAL:FlatColor] //выбираем инструмент куб - линии будут из кубов: [IPress,Tool:Cube3D] //устанавливаем размеры сетки: [VarSet, Height, [IGet,Document:Modifiers:Height]] [VarSet, Width, [IGet,Document:Modifiers:Width]] //Горизонтальные линии --> //число горизонтальных линий: [VarSet, Rows, int(Height / DeltaY + 1)] [VarSet, YPosition, 0] [Loop, Rows, //установить цвет линий: [If, (int(i / 5) * 5) = i, [IColorSet, iRed2, iGreen2, iBlue2] [VarSet, iTmp, Depth] , [IColorSet, iRed1, iGreen1, iBlue1] //[VarSet, iTmp, Depth+ LineWidth] [VarSet, iTmp, Depth + 1] ] [CanvasClick,0,0,0,1] [TransformSet,Width/2, YPosition, iTmp, Width/2 + LineWidth, LineWidth, 0, 0, 0, 0] [VarAdd, YPosition, DeltaY] ,i] //Вертикальные линии --> //число вертикальных линий: [VarSet, Columns, int(Width / DeltaX + 1)] [VarSet, XPosition, 0] [Loop, Columns, //установить цвет линий: [If, (int(i / 5) * 5) = i, [IColorSet, iRed2, iGreen2, iBlue2] [VarSet, iTmp, Depth] , [IColorSet, iRed1, iGreen1, iBlue1] //[VarSet, iTmp, Depth+ LineWidth] [VarSet, iTmp, Depth + 1] ] [CanvasClick,0,0,0,1] [TransformSet, XPosition, Height/2, iTmp, LineWidth, Height/2+ LineWidth, 0, 0, 0, 0] [VarAdd, XPosition, DeltaX] ,i] ]//PaintGrid //ОТКРЫТЬ-ЗАКРЫТЬ DocumentWindow [RoutineDef,ShowDocumentWindow, [if, [iget,ZScript: DocumentWindow] = 1, [IUnPress,ZScript: DocumentWindow] [IPress,ZScript: DocumentWindow] , [IPress,ZScript: DocumentWindow] [IUnPress,ZScript: DocumentWindow] ] ]//ShowDocumentWindow //НАЙТИ НОМЕР СВОБОДНОГО СЛОЯ --> nGridLayer [RoutineDef,FindNextLayer, [Loop,16, [varset,nGridLayer,i+1] [VarSEt, strtmp, [strmerge,"Layer: Layer",[var,nGridLayer]]] [If, ![IsEnabled,strtmp], //[MessageOK, [var,nGridLayer]] [MessageOK, [IsEnabled,strtmp]] [LoopExit] ] ,i] ]//FindNextLayer