3D entity filled
Moderators: SDS, support, admin
3D entity filled
-I need to fill 3D entity, how can i do? for example cube or square with the vertexes on different plans
-Can I fill the thickness?
-Can I fill the thickness?
Re: 3D entity filled
Hello.
You can fill 3D entity but with some restrictions. CADHatch object that represents filling in CADImage is a 2D object. Because of this you can fill only 2D planes. For example, to fill cube you will need to create 6 CAD3DFace (or just 3D closed PolyLine) objects and fill every of them separately. If you want to fill rectangle that has vertexes on different planes, it must belong to 2D plane. CADHatch.Extrusion property specifies 3D orientation of the Hatch.
CADHatch.LineWeight specifies thickness of the hatch lines.
Alexander.
You can fill 3D entity but with some restrictions. CADHatch object that represents filling in CADImage is a 2D object. Because of this you can fill only 2D planes. For example, to fill cube you will need to create 6 CAD3DFace (or just 3D closed PolyLine) objects and fill every of them separately. If you want to fill rectangle that has vertexes on different planes, it must belong to 2D plane. CADHatch.Extrusion property specifies 3D orientation of the Hatch.
CADHatch.LineWeight specifies thickness of the hatch lines.
Alexander.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: 3D entity filled
tank you.
new question: i have created a Hatch e with CADHatch.Extrusion i have specified 3d orientation of the hatch, but when i save us dxf no file is created
new question: i have created a Hatch e with CADHatch.Extrusion i have specified 3d orientation of the hatch, but when i save us dxf no file is created
Re: 3D entity filled
Please pay attention. You need to create object that encloses your hatch. If you created such object and hatch within it and don't receive file when saving to dxf, then please post your code with your next question.
Alexander.
Alexander.
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support
Re: 3D entity filled
this is the function to create hatch on line :
private void AddHatchLinea(object sender, EventArgs e)
{
if (this.cadImage == null)
{
this.cadImage = new CADImage();
this.cadImage.InitialNewImage();
this.cadImage.UseDoubleBuffering = false;
}
this.cadImage.UseDoubleBuffering = false;
int entCount = this.cadImage.Converter.GetCounts(CADImport.FaceModule.ConvSection.Entities);
for (int i = 0; i < entCount; i++)
{
if (this.cadImage.Converter.GetSection(CADImport.FaceModule.ConvSection.Entities).Entities is
CADLine)
{
CADLine entLine =
(CADLine)this.cadImage.Converter.GetSection(CADImport.FaceModule.ConvSection.Entities).Entities;
CADCurvePolygon Hatch = new CADCurvePolygon();
Hatch.Color = Color.Blue;
CAD2DBoundaryList Lista = new CAD2DBoundaryList();
Lista.BoundaryType = 7;// Polyline type
Hatch.BoundaryData.Add(Lista);
CAD2DPolyline Poly = new CAD2DPolyline();
Lista.Add(Poly);
CAD2DPoint ent2DPoint;
double l,h,v,cos,acos;
DPoint A,B,C;
B = (DPoint)entLine.Point;
A = (DPoint)entLine.Point1;
C.X = 0;
C.Y = 0;
acos = (Math.PI) / 2 + (Math.PI) / 4;
l = Math.Sqrt(Math.Pow(A.X - B.X,2) + Math.Pow(A.Y - B.Y,2));
h = 30;
//Primo caso
if (B.X > A.X && B.Y > A.Y)
{
cos = (B.X-A.X) / l;
acos = (Math.PI)/2 + Math.Acos(cos);
C.X = B.X;
C.Y = B.Y;
}
//Secondo caso
if (B.X > A.X && A.Y > B.Y)
{
cos = (B.X - A.X) / l;
acos = (Math.PI)/2 - Math.Acos(cos);
C.X = B.X;
C.Y = B.Y;
}
//Terzo caso
if (A.X > B.X && A.Y > B.Y)
{
cos = (A.X - B.X) / l;
acos = (Math.PI)/2 + Math.Acos(cos) + Math.PI;
C.X = B.X;
C.Y = B.Y;
}
//Quarto caso
if (A.X > B.X && B.Y > A.Y)
{
cos = (A.X - B.X) / l;
acos = (Math.PI)/2- Math.Acos(cos);
C.X = A.X;
C.Y = A.Y;
}
//Quinto caso
if (A.X == B.X && A.Y != B.Y)
{
acos = 0;
if (A.Y > B.Y)
{
C.X = B.X;
C.Y = B.Y;
}
else
{
C.X = A.X;
C.Y = A.Y;
}
}
//Sesto caso
if (A.Y == B.Y && A.X != B.X)
{
acos = (Math.PI)/2;
if (A.X > B.X)
{
C.X = A.X;
C.Y = A.Y;
}
else
{
C.X = B.X;
C.Y = B.Y;
}
}
if (A.Y == B.Y && A.X == B.X)
{
return;
}
v = Math.Sqrt(Math.Pow(Math.Cos(acos),2) + Math.Pow(Math.Sin(acos), 2));
ent2DPoint = new CAD2DPoint(0, 0);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(l, 0);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(l, h);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(0, h);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(0, 0);
Poly.Vertexes.Add(ent2DPoint);
Poly.Closed = true;
Hatch.Elevation = new DPoint((C.Y * Math.Cos(acos) - C.X * Math.Sin(acos)) * v, 0, (C.Y * Math.Sin(acos) + C.X * Math.Cos(acos)) * v);
Hatch.Extrusion = new DPoint(Math.Cos(acos), Math.Sin(acos), 0);
Hatch.Loaded(this.cadImage.Converter);
this.cadImage.CurrentLayout.Entities.Add(Hatch);
this.cadImage.Converter.OnCreate(Hatch);
}
}
CADImportFace.LoadTreeNodes(trvEntity.Nodes, cadImage);
SetCADImageOptions();
this.ResizeLayout();
}
this is the function to save us dxf :
private void miSaveAsDXF_Click(object sender, System.EventArgs e)
{
if (this.cadImage == null)
return;
if (this.saveDXFDlg.ShowDialog() != DialogResult.OK)
return;
SaveAsDXF(this.saveDXFDlg.FileName);
}
private void SaveAsDXF(string fName)
{
if(cadImage == null) return;
if(cadImage is CADRasterImage)
{
return;
}
this.cadImage.GetExtents();
this.DoResize();
CADImport.Export.DirectCADtoDXF.CADtoDXF vExp = new CADImport.Export.DirectCADtoDXF.CADtoDXF(cadImage);
vExp.SaveToFile(fName);
}
private void AddHatchLinea(object sender, EventArgs e)
{
if (this.cadImage == null)
{
this.cadImage = new CADImage();
this.cadImage.InitialNewImage();
this.cadImage.UseDoubleBuffering = false;
}
this.cadImage.UseDoubleBuffering = false;
int entCount = this.cadImage.Converter.GetCounts(CADImport.FaceModule.ConvSection.Entities);
for (int i = 0; i < entCount; i++)
{
if (this.cadImage.Converter.GetSection(CADImport.FaceModule.ConvSection.Entities).Entities is
CADLine)
{
CADLine entLine =
(CADLine)this.cadImage.Converter.GetSection(CADImport.FaceModule.ConvSection.Entities).Entities;
CADCurvePolygon Hatch = new CADCurvePolygon();
Hatch.Color = Color.Blue;
CAD2DBoundaryList Lista = new CAD2DBoundaryList();
Lista.BoundaryType = 7;// Polyline type
Hatch.BoundaryData.Add(Lista);
CAD2DPolyline Poly = new CAD2DPolyline();
Lista.Add(Poly);
CAD2DPoint ent2DPoint;
double l,h,v,cos,acos;
DPoint A,B,C;
B = (DPoint)entLine.Point;
A = (DPoint)entLine.Point1;
C.X = 0;
C.Y = 0;
acos = (Math.PI) / 2 + (Math.PI) / 4;
l = Math.Sqrt(Math.Pow(A.X - B.X,2) + Math.Pow(A.Y - B.Y,2));
h = 30;
//Primo caso
if (B.X > A.X && B.Y > A.Y)
{
cos = (B.X-A.X) / l;
acos = (Math.PI)/2 + Math.Acos(cos);
C.X = B.X;
C.Y = B.Y;
}
//Secondo caso
if (B.X > A.X && A.Y > B.Y)
{
cos = (B.X - A.X) / l;
acos = (Math.PI)/2 - Math.Acos(cos);
C.X = B.X;
C.Y = B.Y;
}
//Terzo caso
if (A.X > B.X && A.Y > B.Y)
{
cos = (A.X - B.X) / l;
acos = (Math.PI)/2 + Math.Acos(cos) + Math.PI;
C.X = B.X;
C.Y = B.Y;
}
//Quarto caso
if (A.X > B.X && B.Y > A.Y)
{
cos = (A.X - B.X) / l;
acos = (Math.PI)/2- Math.Acos(cos);
C.X = A.X;
C.Y = A.Y;
}
//Quinto caso
if (A.X == B.X && A.Y != B.Y)
{
acos = 0;
if (A.Y > B.Y)
{
C.X = B.X;
C.Y = B.Y;
}
else
{
C.X = A.X;
C.Y = A.Y;
}
}
//Sesto caso
if (A.Y == B.Y && A.X != B.X)
{
acos = (Math.PI)/2;
if (A.X > B.X)
{
C.X = A.X;
C.Y = A.Y;
}
else
{
C.X = B.X;
C.Y = B.Y;
}
}
if (A.Y == B.Y && A.X == B.X)
{
return;
}
v = Math.Sqrt(Math.Pow(Math.Cos(acos),2) + Math.Pow(Math.Sin(acos), 2));
ent2DPoint = new CAD2DPoint(0, 0);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(l, 0);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(l, h);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(0, h);
Poly.Vertexes.Add(ent2DPoint);
ent2DPoint = new CAD2DPoint(0, 0);
Poly.Vertexes.Add(ent2DPoint);
Poly.Closed = true;
Hatch.Elevation = new DPoint((C.Y * Math.Cos(acos) - C.X * Math.Sin(acos)) * v, 0, (C.Y * Math.Sin(acos) + C.X * Math.Cos(acos)) * v);
Hatch.Extrusion = new DPoint(Math.Cos(acos), Math.Sin(acos), 0);
Hatch.Loaded(this.cadImage.Converter);
this.cadImage.CurrentLayout.Entities.Add(Hatch);
this.cadImage.Converter.OnCreate(Hatch);
}
}
CADImportFace.LoadTreeNodes(trvEntity.Nodes, cadImage);
SetCADImageOptions();
this.ResizeLayout();
}
this is the function to save us dxf :
private void miSaveAsDXF_Click(object sender, System.EventArgs e)
{
if (this.cadImage == null)
return;
if (this.saveDXFDlg.ShowDialog() != DialogResult.OK)
return;
SaveAsDXF(this.saveDXFDlg.FileName);
}
private void SaveAsDXF(string fName)
{
if(cadImage == null) return;
if(cadImage is CADRasterImage)
{
return;
}
this.cadImage.GetExtents();
this.DoResize();
CADImport.Export.DirectCADtoDXF.CADtoDXF vExp = new CADImport.Export.DirectCADtoDXF.CADtoDXF(cadImage);
vExp.SaveToFile(fName);
}
Re: 3D entity filled
Hello.
I checked saving to DXF - it works correctly.
You can try following code - it's a simple example of creating 3D oriented hatch enclosed by a circle and saving into DXF file:
Alexander.
I checked saving to DXF - it works correctly.
You can try following code - it's a simple example of creating 3D oriented hatch enclosed by a circle and saving into DXF file:
Code: Select all
if (this.cadImage == null)
{
this.cadImage = new CADImage();
this.cadImage.InitialNewImage();
}
this.cadImage.UseDoubleBuffering = false;
CADHatch hatch = new CADHatch();
CAD2DBoundaryList v2DBList = new CAD2DBoundaryList();
hatch.BoundaryData.Add(v2DBList);
HatchPatternData vHPData;
v2DBList.BoundaryType = 1;
CAD2DArc vCircle = new CAD2DArc();
vCircle.CenterPoint = new CAD2DPoint(10, 10);
vCircle.Radius = 20;
vCircle.StartParam = 0;
vCircle.EndParam = 360;
vCircle.CounterClockWise = true;
v2DBList.Add(vCircle);
((CADHatch)hatch).HatchName = "USER";
vHPData = new HatchPatternData();
vHPData.baseP = new DPoint(0, 0, 0);
vHPData.offset = new DPoint(1, 1, 0);
vHPData.lineAngle = 10.0f;
vHPData.isDash = false;
vHPData.lines = null;
vHPData.dashNum = 1;
((CADHatch)hatch).HatchPatternData.Add(vHPData);
hatch.Color = Color.Red;
hatch.Extrusion = new DPoint(10, 20, 15);
hatch.Loaded(this.cadImage.Converter);
this.AddEnt(hatch);
this.DoResize();
this.cadPictBox.Invalidate();
// this is saving method lightly modified for adding to creation method
if (this.cadImage == null)
return;
if (this.dlgSaveDXF.ShowDialog() != DialogResult.OK)
return;
if (cadImage is CADRasterImage)
{
return;
}
this.cadImage.GetExtents();
this.DoResize();
CADImport.Export.DirectCADtoDXF.CADtoDXF vExp = new CADImport.Export.DirectCADtoDXF.CADtoDXF(cadImage);
vExp.SaveToFile(this.dlgSaveDXF.FileName);
Technical Support E-mail: support@cadsofttools.com
Chat support on Skype: cadsofttools.support
Chat support on Skype: cadsofttools.support