static void ReportGraphicMembers(SolidEdgeDraft.GraphicMembers graphicMembers) { // This is a good example of how to deal with collections that contain different types. foreach (var graphicMember in graphicMembers.OfType<object>()) { Console.WriteLine(); var graphicMemberType = SolidEdgeCommunity.Runtime.InteropServices.ComObject.GetType(graphicMember); double xKeypoint; double yKeypoint; double zKeypoint; SolidEdgeFramework.KeyPointType keypointType; int handleType; if (graphicMemberType.Equals(typeof(SolidEdgeDraft.DVLine2d))) { var line2d = graphicMember as SolidEdgeDraft.DVLine2d; Console.WriteLine("Processing graphic member '{0}' ({1}).", line2d.Name, graphicMemberType); Console.WriteLine("Angle: {0}.", line2d.Angle); Console.WriteLine("Length: {0}.", line2d.Length); for (int i = 1; i <= line2d.KeyPointCount; i++) { line2d.GetKeyPoint(i, out xKeypoint, out yKeypoint, out zKeypoint, out keypointType, out handleType); Console.WriteLine("Keypoint {0}: x={1} y={2} z={3} type={4} handle={5}", i, xKeypoint, yKeypoint, zKeypoint, keypointType, handleType); } } else if (graphicMemberType.Equals(typeof(SolidEdgeDraft.DVArc2d))) { var arc2d = graphicMember as SolidEdgeDraft.DVArc2d; Console.WriteLine("Processing graphic member '{0}' ({1}).", arc2d.Name, graphicMemberType); Console.WriteLine("BendRadius: {0}.", arc2d.BendRadius); Console.WriteLine("Radius: {0}.", arc2d.Radius); Console.WriteLine("StartAngle: {0}.", arc2d.StartAngle); Console.WriteLine("SweepAngle: {0}.", arc2d.SweepAngle); for (int i = 1; i <= arc2d.KeyPointCount; i++) { arc2d.GetKeyPoint(i, out xKeypoint, out yKeypoint, out zKeypoint, out keypointType, out handleType); Console.WriteLine("Keypoint {0}: x={1} y={2} z={3} type={4} handle={5}", i, xKeypoint, yKeypoint, zKeypoint, keypointType, handleType); } } else if (graphicMemberType.Equals(typeof(SolidEdgeDraft.DVCircle2d))) { var circle2d = graphicMember as SolidEdgeDraft.DVCircle2d; Console.WriteLine("Processing graphic member '{0}' ({1}).", circle2d.Name, graphicMemberType); Console.WriteLine("Area: {0}.", circle2d.Area); Console.WriteLine("BendAngle: {0}.", circle2d.BendAngle); Console.WriteLine("BendRadius: {0}.", circle2d.BendRadius); Console.WriteLine("Circumference: {0}.", circle2d.Circumference); Console.WriteLine("Diameter: {0}.", circle2d.Diameter); for (int i = 1; i <= circle2d.KeyPointCount; i++) { circle2d.GetKeyPoint(i, out xKeypoint, out yKeypoint, out zKeypoint, out keypointType, out handleType); Console.WriteLine("Keypoint {0}: x={1} y={2} z={3} type={4} handle={5}", i, xKeypoint, yKeypoint, zKeypoint, keypointType, handleType); } } } }