![image]()
![image]()
![image]()
public class ExportPartShape : BaseModalCommand
{
public override void OnStart(int instanceId, object argument)
{
base.OnStart(instanceId, argument);
var symFile = @"C:\Program Files (x86)\Smart3D\Common2D\Symbol2D\Templates\template.sha";
var pp = ClientServiceProvider.SelectSet.SelectedObjects.FirstOrDefault();
if (pp == null) return;
if (pp is PlatePart)
{
var cp = pp as PlatePartBase;
Matrix4X4 bpmt = cp.Matrix;
var mt = new Matrix4X4(bpmt);
mt.Invert();
var ports = cp.GetPorts(TopologyGeometryType.Face, GeometryStage.Current);
var p = ports.OrderByDescending(c => c.Area).FirstOrDefault();
//ComplexString3d complexString3D;
System.Collections.ObjectModel.Collection<ComplexString3d> complexString3Ds;
p.GetBoundaries(out complexString3Ds);
if (complexString3Ds == null) return;
Ingr.RAD2D.Application oSketch2dApplication = (Ingr.RAD2D.Application)MiddleServiceProvider.Sketch2dApplication;
oSketch2dApplication.Visible = false;
var fn = MiddleUtilities.GetEquivalentProductPath(symFile);
var oDoc = oSketch2dApplication.Documents.Add(symFile, false);
var oActiveSheet = oDoc.ActiveSheet;
foreach (var complexString3D in complexString3Ds)
{
var ents = new System.Collections.ObjectModel.Collection<DrawingObjectBase>();
complexString3D.Transform(mt);
var curves1 = new System.Collections.ObjectModel.Collection<ICurve>();
complexString3D.GetCurves(out curves1);
foreach (var cur in curves1.OfType<Curve3d>())
{
if (cur is Line3d)
{
var l = cur as Line3d;
var ccur = oActiveSheet.Lines2d.AddBy2Points(l.StartPoint.X, l.StartPoint.Y, l.EndPoint.X, l.EndPoint.Y);
ents.Add(ccur);
}
else if (cur is Arc3d)
{
var arc = cur as Arc3d;
var iscw = arc.Normal.Z > 0;
var ccur = oActiveSheet.Arcs2d.AddByCenterStartEnd(arc.Center.X, arc.Center.Y,
iscw ? arc.StartPoint.X : arc.EndPoint.X, iscw ? arc.StartPoint.Y : arc.EndPoint.Y,
iscw ? arc.EndPoint.X : arc.StartPoint.X, iscw ? arc.EndPoint.Y : arc.StartPoint.Y);
ccur.LinearStyle.Color = System.Drawing.Color.Red;
ents.Add(ccur);
}
else if (cur is EllipticalArc3d)
{
var arc = cur as EllipticalArc3d;
var ccur = oActiveSheet.EllipticalArcs2d.AddByCenter(arc.Center.X, arc.Center.Y,
arc.MajorAxis.X, arc.MajorAxis.Y, arc.MinorMajorRatio,
Geom2dOrientationConstants.igGeom2dOrientClockwise, arc.StartAngle, arc.StartAngle + arc.SweepAngle);
ccur.LinearStyle.Color = System.Drawing.Color.Yellow;
ents.Add(ccur);
}
else if (cur is BSplineCurve3d)
{
var arc = cur as BSplineCurve3d;
int order;
int number;
System.Collections.ObjectModel.Collection<Position> colPoles;
System.Collections.ObjectModel.Collection<double> weights = new System.Collections.ObjectModel.Collection<double>();
System.Collections.ObjectModel.Collection<double> kds;
arc.GetPolesWeightsKnots(out order, out number, out colPoles, out weights, out kds);
var poleArray = colPoles.SelectMany(c => new double[] { c.X, c.Y }).ToArray();
var ccur = oActiveSheet.BSplineCurves2d.AddByPoints(order, number, ref poleArray);
ccur.LinearStyle.Color = System.Drawing.Color.Magenta;
ents.Add(ccur);
}
var gp= oActiveSheet.Groups.AddByObjects(ents, true);
}
}
string strSymbolFile = $@"C:\{DateTime.Now.ToString("yyyyMMddHHmmssffff")}.sha";
oDoc.SaveAsEx(strSymbolFile, SaveAsFilterType.igSaveAsIGR);
oDoc.SaveAsEx(Path.ChangeExtension(strSymbolFile,".dwg"), SaveAsFilterType.igSaveAs2000DWG);
oDoc.Close(false);
Process.Start(strSymbolFile);
Process.Start(Path.ChangeExtension(strSymbolFile, ".dwg"));
}
}
}