This repository has been archived on 2023-01-27. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
cad/ref/xcad/tests/integration/SolidWorks.Tests.Integration/SketchTest.cs
T
2022-10-15 19:16:08 +02:00

124 lines
4.7 KiB
C#

using NUnit.Framework;
using SolidWorks.Interop.sldworks;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xarial.XCad.Base;
using Xarial.XCad.Geometry.Structures;
using Xarial.XCad.Sketch;
using Xarial.XCad.SolidWorks;
using Xarial.XCad.SolidWorks.Documents;
using Xarial.XCad.SolidWorks.Features;
using Xarial.XCad.SolidWorks.Sketch;
namespace SolidWorks.Tests.Integration
{
public class SketchTest : IntegrationTests
{
[Test]
public void IterateSketchEntitiesTest()
{
Type[] entTypes;
using (var doc = OpenDataDocument("Sketch1.SLDPRT"))
{
var part = (ISwPart)m_App.Documents.Active;
var sketch = SwObjectFactory.FromDispatch<ISwSketch2D>(
part.Features["Sketch1"].Feature.GetSpecificFeature2() as ISketch, part);
entTypes = sketch.Entities.Where(e => !(e is ISwSketchPoint)).Select(e => e.GetType()).ToArray();
}
Assert.AreEqual(6, entTypes.Length);
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchEllipse).IsAssignableFrom(t)));
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchLine).IsAssignableFrom(t)));
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchArc).IsAssignableFrom(t)));
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchText).IsAssignableFrom(t)));
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchSpline).IsAssignableFrom(t)));
Assert.IsNotNull(entTypes.FirstOrDefault(t => typeof(ISwSketchParabola).IsAssignableFrom(t)));
}
[Test]
public void CreateLineTest()
{
var x1 = -1d;
var y1 = -1d;
var z1 = -1d;
var x2 = -1d;
var y2 = -1d;
var z2 = -1d;
using (var doc = NewDocument(Interop.swconst.swDocumentTypes_e.swDocPART))
{
var part = m_App.Documents.Active;
var sketch3D = (ISwSketch3D)part.Features.PreCreate3DSketch();
var line = (IXSketchLine)sketch3D.Entities.PreCreateLine();
line.StartCoordinate = new Point(0.1, 0.1, 0.1);
line.EndCoordinate = new Point(0.2, 0.2, 0.2);
sketch3D.Entities.AddRange(new IXSketchEntity[] { line });
part.Features.Add(sketch3D);
var skLine = (sketch3D.Sketch.GetSketchSegments() as object[]).First() as ISketchLine;
var startPt = skLine.GetStartPoint2() as ISketchPoint;
x1 = startPt.X;
y1 = startPt.Y;
z1 = startPt.Z;
var endPt = skLine.GetEndPoint2() as ISketchPoint;
x2 = endPt.X;
y2 = endPt.Y;
z2 = endPt.Z;
}
Assert.That(0.1, Is.EqualTo(x1).Within(0.001).Percent);
Assert.That(0.1, Is.EqualTo(y1).Within(0.001).Percent);
Assert.That(0.1, Is.EqualTo(z1).Within(0.001).Percent);
Assert.That(0.2, Is.EqualTo(x2).Within(0.001).Percent);
Assert.That(0.2, Is.EqualTo(y2).Within(0.001).Percent);
Assert.That(0.2, Is.EqualTo(z2).Within(0.001).Percent);
}
[Test]
public void GetSketchEntitiesLengthTest()
{
double l1;
double l2;
double l3;
double l4;
double l5;
using (var doc = OpenDataDocument("Sketch1.SLDPRT"))
{
var part = (ISwPart)m_App.Documents.Active;
var sketch = SwObjectFactory.FromDispatch<ISwSketch2D>(
part.Features["Sketch1"].Feature.GetSpecificFeature2() as ISketch, part);
var segs = sketch.Entities.OfType<IXSketchSegment>().ToArray();
l1 = segs.OfType<ISwSketchEllipse>().First().Length;
l2 = segs.OfType<ISwSketchLine>().First().Length;
l3 = segs.OfType<ISwSketchArc>().First().Length;
l4 = segs.OfType<ISwSketchSpline>().First().Length;
l5 = segs.OfType<ISwSketchParabola>().First().Length;
}
Assert.That(0.12991965190301241, Is.EqualTo(l1).Within(0.001).Percent);
Assert.That(0.08468717758758991, Is.EqualTo(l2).Within(0.001).Percent);
Assert.That(0.10094045912639603, Is.EqualTo(l3).Within(0.001).Percent);
Assert.That(0.16421451670784409, Is.EqualTo(l4).Within(0.001).Percent);
Assert.That(0.1034014049596117, Is.EqualTo(l5).Within(0.001).Percent);
}
}
}