3DCoatScripting  4.8.31β
С помощью скриптинга можно управлять возможностями Коута и расширять его функционал.
🌀 Автоматическое создание скриптов в примитивах

Добавлен генератор скриптов в 3DCoat для инструмента примитивов в скульпт та ретопо комнатах. Вы можете сохранять свои действия в скрипт файл, изменять параметры в файле и повторно выполнять его.

Запись скрипта в скульпт комнате

Для просмотра видео записи скрипта в скульпт комнате, нажмите здесь Скопируй этот скрипт себе на комп и запусти из меню 3DCoat: "Скрипты / Запустить скрипт". Если не знаешь, как создавать скрипты, загляни сюда.

// Файл, созданный после записи скрипта в скульпт-комнате.
void main() {
Coat coat;
UI ui;
// перейти в скульпт комнату
coat.room("Sculpt");
Symmetry symm;
// разрешить симметрию
symm.Enable(true);
symm.ShowPlane(true);
symm.Type(0);
// зеркальное отображение "ложь"
symm.SetMirror(false,0);
symm.SetMirror(false,1);
symm.SetMirror(false,2);
symm.CoordSystemXYZ(0);
symm.StartPoint(Vec3(0.00,0.00,0.00));
SculptRoom sculpt;
// очистить комнату
sculpt.clear();
sculpt.toVoxel();
// воксельный объект
Vox vox1;
vox1.clearScene();
vox1.rename("Volume5");
// подготавливаем инструмент примитивов
PrimitivesTool tool;
// перейти к примитивам
coat.room("Sculpt");
ui("$SCULP_PRIM");
// создать начальную сферу
SpherePrim sphere1;
sphere1 = tool.sphere();
// параметры сферы
sphere1.useDiameter(false);
sphere1.Position(Vec3(0.00,0.00,0.00));
sphere1.Radius(15.00);
// перйти в сурфейсный режим
vox1.toSurface();
ui("$SCULP_PRIM");
// создать куб
CubPrim cube2;
cube2 = tool.cube();
// параметры куба
cube2.AxisX(Vec3(1.00,0.00,0.00));
cube2.AxisY(Vec3(0.00,1.00,0.00));
cube2.AxisZ(Vec3(0.00,0.00,1.00));
cube2.useFillet(true);
cube2.Position(Vec3(0.00,0.00,0.00));
cube2.SideA(30.00);
cube2.SideB(30.00);
cube2.SideC(30.00);
cube2.details(0.36);
// изменить позицию и размеры сторон
cube2.Position(Vec3(0.00,0.00,-191.27));
cube2.SideA(434.41);
cube2.SideB(12.88);
cube2.SideC(896.92);
// добавить куб в сцену
tool.Apply(0);
// перейти к примитивам
ui("$SCULP_PRIM");
Step(1);
// создать цилиндр
CylinderPrim cylinder4;
cylinder4 = tool.cylinder();
// параметры цилиндра
cylinder4.useDiameter(false);
cylinder4.useFillet(false);
cylinder4.useSector(false);
cylinder4.startPoint(Vec3(0.00,0.00,0.00));
cylinder4.endPoint(Vec3(0.00,20.00,0.00));
cylinder4.height(20.00);
cylinder4.radius(10.00);
cylinder4.topRadius(10.00);
cylinder4.bottomRadius(10.00);
cylinder4.scalex(1.00);
cylinder4.scaley(1.00);
cylinder4.details(0.36);
// изменить позицию
cylinder4.startPoint(Vec3(153.52,-6.44,194.20));
cylinder4.endPoint(Vec3(153.52,-126.74,194.20));
// высота, радиус
cylinder4.height(120.30);
cylinder4.radius(31.52);
cylinder4.topRadius(31.52);
cylinder4.bottomRadius(31.52);
// добавить цилиндр в сцену
tool.Apply(0);
// новая позиция
cylinder4.startPoint(Vec3(-147.54,-6.44,191.79));
cylinder4.endPoint(Vec3(-147.54,-126.74,191.79));
// добавить цилиндр в сцену
tool.Apply(0);
// новая позиция
cylinder4.startPoint(Vec3(150.98,-6.44,-577.69));
cylinder4.endPoint(Vec3(150.98,-126.74,-577.69));
// добавить цилиндр в сцену
tool.Apply(0);
// новая позиция
cylinder4.startPoint(Vec3(-149.89,-6.44,-568.62));
cylinder4.endPoint(Vec3(-149.89,-126.74,-568.62));
// добавить цилиндр в сцену
tool.Apply(0);
// перейти к примитивам
ui("$SCULP_PRIM");
// создать многогранник
NGonPrim ngon8;
ngon8 = tool.ngon();
// инициализация параметров
ngon8.useDiameter(false);
ngon8.useFillet(false);
ngon8.startPoint(Vec3(0.00,0.00,0.00));
ngon8.endPoint(Vec3(0.00,20.00,0.00));
ngon8.height(20.00);
ngon8.radius(10.00);
ngon8.topRadius(10.00);
ngon8.bottomRadius(10.00);
ngon8.Order(8);
ngon8.scalex(1.00);
ngon8.scaley(1.00);
// уровень детализации
ngon8.details(0.36);
// изменить позицию
ngon8.startPoint(Vec3(-75.14,6.44,99.46));
ngon8.endPoint(Vec3(-75.14,356.44,99.46));
// изменить радиус
ngon8.radius(65.01);
ngon8.topRadius(65.01);
ngon8.bottomRadius(65.01);
// добавить в сцену
tool.Apply(0);
// перейти к примитивам
ui("$SCULP_PRIM");
Step(1);
// создать шестеренку
GearPrim gear9;
gear9 = tool.gear();
// инициализация параметров
gear9.useDiameter(false);
gear9.startPoint(Vec3(0.00,0.00,0.00));
gear9.endPoint(Vec3(0.00,20.00,0.00));
gear9.height(20.00);
gear9.radius(10.00);
gear9.topRadius(10.00);
gear9.bottomRadius(10.00);
gear9.Depth(0.20);
gear9.Sharpness(0.50);
gear9.Order(16);
gear9.scalex(1.00);
gear9.scaley(1.00);
gear9.details(0.36);
// изменить позицию
gear9.startPoint(Vec3(-64.67,6.44,-410.43));
gear9.endPoint(Vec3(-64.67,300.44,-410.43));
// изменить радиус
gear9.radius(55.01);
gear9.topRadius(55.01);
gear9.bottomRadius(55.01);
// добавить в сцену
tool.Apply(0);
// перейти к примитивам
ui("$SCULP_PRIM");
Step(1);
// создать шрифт
Font font;
font.Name("Arial");
font.Size(384);
font.Weight(0);
font.Style(0);
font.OutPrecision(0);
font.ClipPrecision(0);
font.CharSet(0);
font.Quality(0);
font.Family(0);
// создать текстовый объект
TextPrim text11;
text11 = tool.text();
// текст
text11.SetText("Hello world");
text11.AxisX(Vec3(1.00,0.00,0.00));
text11.AxisY(Vec3(0.00,1.00,0.00));
text11.AxisZ(Vec3(0.00,0.00,1.00));
text11.Position(Vec3(0.00,0.00,0.00));
// размеры
text11.SideA(50.00);
text11.SideB(50.00);
text11.SideC(5.00);
text11.ExtraRotation(0.00);
// кривизна выкл.
text11.Bend(false);
// оси
text11.AxisX(Vec3(-0.03,0.00,-1.00));
text11.AxisY(Vec3(0.00,1.00,0.00));
text11.AxisZ(Vec3(1.00,-0.00,-0.03));
// позиция и размеры сторон
text11.Position(Vec3(72.97,68.81,-207.88));
text11.SideA(380.69);
text11.SideB(380.69);
text11.SideC(38.07);
// добавить текст в сцену
tool.Apply(0);
}

Запись скрипта в ретопо комнате

Для просмотра видео записи скрипта в ретопо комнате, нажмите здесь Скопируй этот скрипт себе на комп и запусти из меню 3DCoat: "Скрипты / Запустить скрипт". Если не знаешь, как создавать скрипты, загляни сюда.

// This file generated after the script recording in the retopo room.
void main() {
Coat coat;
// goto retopo room
coat.room("Retopo");
// symmetry object
Symmetry symm;
// enable window
symm.Enable(true);
symm.ShowPlane(true);
symm.Type(0);
// mirror set to "false"
symm.SetMirror(false,0);
symm.SetMirror(false,1);
symm.SetMirror(false,2);
symm.CoordSystemXYZ(0);
symm.StartPoint(Vec3(0.00,0.00,0.00));
// clear the retopo
RetopoRoom retopo;
retopo.clear();
// prepare the primitives tool
PrimitivesTool tool;
// go to the retopo primitives
coat.room("Retopo");
cmd("$RTP_PRIM");
// get the retopo sphere
rGeoSphere rsphere22;
rsphere22 = tool.rsphere();
// init parameters
rsphere22.useDiameter(false);
rsphere22.Position(Vec3(0.00,0.00,0.00));
rsphere22.Radius(10.00);
rsphere22.SubDivision(8);
// go to the retopo primitives
cmd("$RTP_PRIM");
Step(1);
// get the retopo box
rGeoBox rbox23;
rbox23 = tool.rbox();
// init parameters
rbox23.AxisX(Vec3(1.00,0.00,0.00));
rbox23.AxisY(Vec3(0.00,1.00,0.00));
rbox23.AxisZ(Vec3(0.00,0.00,1.00));
rbox23.useFillet(false);
rbox23.useUniform(true);
rbox23.Position(Vec3(0.00,0.00,0.00));
rbox23.SideA(30.00);
rbox23.SideB(30.00);
rbox23.SideC(30.00);
rbox23.DivX(1);
rbox23.DivY(1);
rbox23.DivZ(1);
rbox23.AverageDivision(12);
// change the sides
rbox23.SideA(134.45);
rbox23.SideB(134.45);
rbox23.SideC(134.45);
// add the box in the scene
tool.Apply();
// go to the retopo primitives
cmd("$RTP_PRIM");
Step(1);
// go to a sphere
tool.SetPrim("rsphere");
rsphere22.Position(Vec3(-83.80,182.77,57.41));
rsphere22.Radius(60.48);
// add the sphere in the scene
tool.Apply();
// go to the retopo primitives
cmd("$RTP_PRIM");
Step(1);
// get the retopo cylinder
rGeoCylinder rcylinder24;
rcylinder24 = tool.rcylinder();
// init parameters ( diameter, fillet, removecaps )
rcylinder24.useDiameter(false);
rcylinder24.useFillet(false);
rcylinder24.RemoveCaps(false);
// uniform subdivision
rcylinder24.useUniform(true);
// positions (start,end points)
rcylinder24.startPoint(Vec3(0.00,0.00,0.00));
rcylinder24.endPoint(Vec3(0.00,20.00,0.00));
// height, radius, topRadius, bottomRadius
rcylinder24.height(20.00);
rcylinder24.radius(0.00);
rcylinder24.topRadius(10.00);
rcylinder24.bottomRadius(10.00);
// scales
rcylinder24.scalex(1.00);
rcylinder24.scaley(1.00);
// custom divisions
rcylinder24.DivY(1);
rcylinder24.DivX(1);
rcylinder24.DivZ(3);
// average division
rcylinder24.AverageDivision(16);
// set the new positions
rcylinder24.startPoint(Vec3(60.54,134.45,61.37));
rcylinder24.endPoint(Vec3(60.54,163.89,61.37));
// set the new height, radius, topRadius, bottomRadius
rcylinder24.height(129.44);
rcylinder24.radius(47.91);
rcylinder24.topRadius(47.91);
rcylinder24.bottomRadius(47.91);
rcylinder24.DivZ(7);
// add the cylinder in the scene
tool.Apply();
// go to the retopo primitives
cmd("$RTP_PRIM");
Step(1);
// get the retopo cone
rGeoCone rcone25;
rcone25 = tool.rcone();
// init parameters (diameters, fillet)
rcone25.useDiameter(false);
rcone25.useFillet(false);
// uniform subdivision
rcone25.useUniform(true);
// set the positions
rcone25.startPoint(Vec3(0.00,0.00,0.00));
rcone25.endPoint(Vec3(0.00,20.00,0.00));
// height & radius
rcone25.height(20.00);
rcone25.bottomRadius(10.00);
// scales
rcone25.scalex(1.00);
rcone25.scaley(1.00);
// custom divisions
rcone25.DivY(1);
rcone25.DivX(1);
rcone25.DivZ(3);
// average division
rcone25.AverageDivision(12);
// change the parameters
rcone25.startPoint(Vec3(-65.00,134.45,-69.28));
rcone25.endPoint(Vec3(-65.00,198.84,-69.28));
rcone25.height(164.39);
rcone25.bottomRadius(47.91);
rcone25.DivY(4);
rcone25.DivZ(4);
// add the cone in the scene
tool.Apply();
// go to the retopo primitives
cmd("$RTP_PRIM");
Step(1);
// get the retopo spiral
rGeoSpiral rspiral31;
rspiral31 = tool.rspiral();
// init parameters (axises)
rspiral31.AxisX(Vec3(0.00,0.00,-1.00));
rspiral31.AxisY(Vec3(1.00,-0.00,0.00));
rspiral31.AxisZ(Vec3(0.00,-1.00,-0.00));
// uniform subdivision
rspiral31.useUniform(true);
// positions
rspiral31.Position(Vec3(0.00,0.00,0.00));
rspiral31.Position2(Vec3(0.00,2.00,0.00));
// sphere profile
rspiral31.UseRectProfile(false);
// outer diameter
rspiral31.OuterDiameter(40.00);
// pitch
rspiral31.Pitch(20.00);
// profile params (d & r)
rspiral31.ProfileDiameter(10.00);
rspiral31.ProfileRadiusRelation(0.50);
// amount of turns
rspiral31.Turns(10);
// clockwise direction
rspiral31.ClockWise(true);
// custom subdivisions
rspiral31.DivY(3);
rspiral31.DivX(3);
rspiral31.DivZ(3);
// average division
rspiral31.AverageDivision(3);
// change the axises
rspiral31.AxisX(Vec3(-1.00,-0.07,0.00));
rspiral31.AxisY(Vec3(-0.07,1.00,0.00));
rspiral31.AxisZ(Vec3(-0.00,0.00,-1.00));
// set the new positions
rspiral31.Position(Vec3(-8.92,24.72,134.45));
rspiral31.Position2(Vec3(-8.92,24.72,136.45));
// set the new outer diameter
rspiral31.OuterDiameter(120);
// change the pitch
rspiral31.Pitch(47.91);
rspiral31.ProfileDiameter(30);
// change the divisions
rspiral31.DivY(8);
rspiral31.DivZ(1);
// change the average divisions
rspiral31.AverageDivision(16);
// add the spiral in the scene
tool.Apply();
// change locations (axes & positions)
rspiral31.AxisX(Vec3(-0.00,0.13,0.99));
rspiral31.AxisY(Vec3(0.00,0.99,-0.13));
rspiral31.AxisZ(Vec3(-1.00,0.00,-0.00));
rspiral31.Position(Vec3(134.45,29.35,-0.27));
rspiral31.Position2(Vec3(136.45,29.35,-0.27));
// add the spiral in the scene
tool.Apply();
}