Added a Script command generator in the 3DCoat for the Primitives tool, Sculpt and Retopo rooms. You can save your actions in a script file, change your primitive parameters in the script and run it again.
Primitives Tool Script Recording in the Sculpt Room
To demonstrate the script recording in the Sculpt room, check here
Copy this script to your local drive and run it from 3DCoat: "Script / Run Script". Don't know how to do that, check here.
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);
}
Primitives Tool Script Recording in the Retopo Room
To demonstrate the script recording in the Retopo room check here
void main() {
Coat coat;
coat.room("Retopo");
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));
RetopoRoom retopo;
retopo.clear();
PrimitivesTool tool;
coat.room("Retopo");
cmd("$RTP_PRIM");
rGeoSphere rsphere22;
rsphere22 = tool.rsphere();
rsphere22.useDiameter(false);
rsphere22.Position(Vec3(0.00,0.00,0.00));
rsphere22.Radius(10.00);
rsphere22.SubDivision(8);
cmd("$RTP_PRIM");
Step(1);
rGeoBox rbox23;
rbox23 = tool.rbox();
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);
rbox23.SideA(134.45);
rbox23.SideB(134.45);
rbox23.SideC(134.45);
tool.Apply();
cmd("$RTP_PRIM");
Step(1);
tool.SetPrim("rsphere");
rsphere22.Position(Vec3(-83.80,182.77,57.41));
rsphere22.Radius(60.48);
tool.Apply();
cmd("$RTP_PRIM");
Step(1);
rGeoCylinder rcylinder24;
rcylinder24 = tool.rcylinder();
rcylinder24.useDiameter(false);
rcylinder24.useFillet(false);
rcylinder24.RemoveCaps(false);
rcylinder24.useUniform(true);
rcylinder24.startPoint(Vec3(0.00,0.00,0.00));
rcylinder24.endPoint(Vec3(0.00,20.00,0.00));
rcylinder24.height(20.00);
rcylinder24.radius(0.00);
rcylinder24.topRadius(10.00);
rcylinder24.bottomRadius(10.00);
rcylinder24.scalex(1.00);
rcylinder24.scaley(1.00);
rcylinder24.DivY(1);
rcylinder24.DivX(1);
rcylinder24.DivZ(3);
rcylinder24.AverageDivision(16);
rcylinder24.startPoint(Vec3(60.54,134.45,61.37));
rcylinder24.endPoint(Vec3(60.54,163.89,61.37));
rcylinder24.height(129.44);
rcylinder24.radius(47.91);
rcylinder24.topRadius(47.91);
rcylinder24.bottomRadius(47.91);
rcylinder24.DivZ(7);
tool.Apply();
cmd("$RTP_PRIM");
Step(1);
rGeoCone rcone25;
rcone25 = tool.rcone();
rcone25.useDiameter(false);
rcone25.useFillet(false);
rcone25.useUniform(true);
rcone25.startPoint(Vec3(0.00,0.00,0.00));
rcone25.endPoint(Vec3(0.00,20.00,0.00));
rcone25.height(20.00);
rcone25.bottomRadius(10.00);
rcone25.scalex(1.00);
rcone25.scaley(1.00);
rcone25.DivY(1);
rcone25.DivX(1);
rcone25.DivZ(3);
rcone25.AverageDivision(12);
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);
tool.Apply();
cmd("$RTP_PRIM");
Step(1);
rGeoSpiral rspiral31;
rspiral31 = tool.rspiral();
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));
rspiral31.useUniform(true);
rspiral31.Position(Vec3(0.00,0.00,0.00));
rspiral31.Position2(Vec3(0.00,2.00,0.00));
rspiral31.UseRectProfile(false);
rspiral31.OuterDiameter(40.00);
rspiral31.Pitch(20.00);
rspiral31.ProfileDiameter(10.00);
rspiral31.ProfileRadiusRelation(0.50);
rspiral31.Turns(10);
rspiral31.ClockWise(true);
rspiral31.DivY(3);
rspiral31.DivX(3);
rspiral31.DivZ(3);
rspiral31.AverageDivision(3);
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));
rspiral31.Position(Vec3(-8.92,24.72,134.45));
rspiral31.Position2(Vec3(-8.92,24.72,136.45));
rspiral31.OuterDiameter(120);
rspiral31.Pitch(47.91);
rspiral31.ProfileDiameter(30);
rspiral31.DivY(8);
rspiral31.DivZ(1);
rspiral31.AverageDivision(16);
tool.Apply();
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));
tool.Apply();
}