C# Smart3D Plate Part零件形状提取

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"));
            }
        }
    }

 

posted @ 2025-09-27 16:10  南胜NanSheng  阅读(20)  评论(0)    收藏  举报