public static ICurve CreateBsplineCurve(IReadOnlyCollection<Vector4> controlPoints, IEnumerable knotVectorU, int order, bool isPeriodic, IModeler modeler) { var controlPointsList = controlPoints .SelectMany(p => new double[] {p.X, p.Y, p.Z, p.W}.ToArray()) .ToArray(); var dimensionControlPoints = BitConverter.GetBytes(4); var orderBytes = BitConverter.GetBytes((int) order); var numControlPointsBytes = BitConverter.GetBytes((int) controlPoints.Count); var periodicity = BitConverter.GetBytes(isPeriodic ? 1 : 0); var props = new[] { BitConverter.ToDouble(dimensionControlPoints.Concat(orderBytes).ToArray(), 0), BitConverter.ToDouble(numControlPointsBytes.Concat(periodicity).ToArray(), 0) }; return (Curve) modeler.CreateBsplineCurve(props, knotVectorU, controlPointsList); }
public OffsetBuilder(ISldWorks app, IModelDoc2 model) { m_App = app; m_Model = model; m_Modeler = app.IGetModeler(); m_MathUtils = m_App.IGetMathUtility(); }
internal SwTempPrimitive(IMathUtility mathUtils, IModeler modeler, SwTempBody[] bodies, bool isCreated) { m_MathUtils = mathUtils; m_Modeler = modeler; m_Creator = new ElementCreator <ISwTempBody[]>(CreateBodies, bodies, isCreated); }
public void Main() { PartDoc part = swApp.ActiveDoc as PartDoc; if (part != null) { IFace2 face = (part as IModelDoc2).ISelectionManager.GetSelectedObject6(1, -1) as IFace2; if (face != null && face.IGetSurface().IsSphere()) { double[] sphereParams = face.IGetSurface().SphereParams as double[]; IModeler modeler = swApp.IGetModeler(); ISurface sphereSurf = modeler.CreateSphericalSurface2( new double[] { sphereParams[0], sphereParams[1], sphereParams[2] }, new double[] { 0, 0, 1 }, new double[] { 1, 0, 0 }, sphereParams[3]) as ISurface; m_PreviewBody = sphereSurf.CreateTrimmedSheet4(new ICurve[] { null }, true) as IBody2; m_PreviewBody.Display3(part, ToColorRef(255, 255, 0), (int)swTempBodySelectOptions_e.swTempBodySelectOptionNone); part.ClearSelectionsNotify += new DPartDocEvents_ClearSelectionsNotifyEventHandler(OnClearSelections); } else { swApp.SendMsgToUser("Please select spherical surface"); } } else { swApp.SendMsgToUser("Please open part document"); } }
internal SwMemorySheetGeometryBuilder(ISwApplication app) { m_App = app; m_MathUtils = m_App.Sw.IGetMathUtility(); m_Modeler = m_App.Sw.IGetModeler(); }
private static IBody2 CreateSheetFromSurface(IModeler modeler, ISurface surf, double[] uRange, double[] vRange) { var uvRange = uRange.Concat(vRange).ToArray(); var sheet = (IBody2)modeler.CreateSheetFromSurface(surf, uvRange); return(sheet); }
public static IBody2 CreateSheetFromSurface(this IModeler modeler, ISurface surf, SurfaceExtensions.PointUv uvLow, SurfaceExtensions.PointUv uvHigh) { var uRange = new double[] { uvLow.U, uvHigh.U }.OrderBy(v => v).ToArray(); var vRange = new double[] { uvLow.V, uvHigh.V }.OrderBy(v => v).ToArray(); return(CreateSheetFromSurface(modeler, surf, uRange, vRange)); }
protected override object Regenerate(IModeler modeler) { SwFeatureData.EnableMultiBodyConsume = true; if (Database.Style == MulitWireBodiesData.StyleEnum.Wire) { var w = _R.NextDouble(); var line0 = modeler.CreateTrimmedLine(new Vector3(0, -w, 0), new Vector3(1, -w, 0)); var line1 = modeler.CreateTrimmedLine(new Vector3(0, w, 0), new Vector3(1, w, 0)); var wire0 = line0.CreateWireBody(); var wire1 = line1.CreateWireBody(); SwFeatureData.AddIdsToBody(wire0); SwFeatureData.AddIdsToBody(wire1); return(new[] { wire0, wire1 }); } else { var solid0 = modeler.CreateBox(new Vector3(0, 0, 0), Vector3.UnitX, 1, 1, 1); var solid1 = modeler.CreateBox(new Vector3(2, 0, 0), Vector3.UnitX, 1, 1, 1); SwFeatureData.AddIdsToBody(solid0); SwFeatureData.AddIdsToBody(solid0); return(new[] { solid0, solid1 }); } }
public static IBody2 CreateSheetFromSurface(this IModeler modeler, ISurface surf, IMathPoint p0, IMathPoint p1) { var uvLow = surf.GetClosestPointOnTs(p0.ArrayData.CastArray <double>().ToVector3()); var uvHigh = surf.GetClosestPointOnTs(p1.ArrayData.CastArray <double>().ToVector3()); return(modeler.CreateSheetFromSurface(surf, uvLow, uvHigh)); }
/// <summary> /// 将点合成线 /// </summary> /// <param name="modeler"></param> /// <param name="points"></param> /// <param name="chordTolerance"></param> /// <param name="simplify"></param> /// <param name="closedCurve"></param> /// <returns></returns> public static Curve InterpolatePointsToCurve (this IModeler modeler , List <Vector3> points , double chordTolerance , bool simplify = true , bool closedCurve = false) { //points = CurveExtensions.FilterOutShortLines(points, 1e-5).ToList(); if (closedCurve) { points.Add(points.First()); } List <ICurve> lines = new List <ICurve>(); for (int i = 0; i < points.Count - 1; i++) { modeler.CreateTrimmedLine(points[i].ToSwMathPoint(), points[i + 1].ToSwMathPoint()); } var curve = modeler.MergeCurves(lines); if (simplify) { curve = curve.SimplifyBCurve(chordTolerance); } return(curve); }
public static Curve InterpolatePointsToCurve (this IModeler modeler , List <Vector3> points , double chordTolerance , bool simplify = true , bool closedCurve = false) { points = CurveExtensions.FilterOutShortLines(points, 1e-5).ToList(); if (closedCurve) { points.Add(points.First()); } var lines = points .Buffer(2, 1) .Where(b => b.Count == 2) .Select(ps => modeler.CreateTrimmedLine(ps[0], ps[1])) .Cast <ICurve>() .ToArray(); var curve = modeler.MergeCurves(lines); if (simplify) { curve = curve.SimplifyBCurve(chordTolerance); } return(curve); }
/// <summary> /// 创建直线 /// </summary> /// <param name="modeler">造型接口</param> /// <param name="math">数学计算接口</param> /// <param name="p0">起点</param> /// <param name="v0">方向</param> /// <param name="length">长度</param> /// <returns></returns> public static ICurve CreateTrimmedLine(this IModeler modeler, MathUtility math, Vector3 p0, Vector3 v0, double length) { v0 = v0.Unit().Scale(length); var p1 = p0.Add(v0); return(CreateTrimmedLine(modeler, p0.ToSwMathPoint(math), p1.ToSwMathPoint(math))); }
private IBody2[] CreateToolBodies(IModeler modeler, IMathUtility mathUtils, List <object> tools) { var toolBodies = new List <IBody2>(); foreach (var tool in tools) { if (tool is IFeature) { var sketch = (tool as IFeature).GetSpecificFeature2() as ISketch; var sketchContours = sketch.GetSketchContours() as object[]; if (sketchContours != null) { foreach (ISketchContour skCont in sketchContours) { toolBodies.Add(CreateBodyFromSketchContour(modeler, mathUtils, skCont)); } } } if (tool is ISketchContour) { toolBodies.Add(CreateBodyFromSketchContour(modeler, mathUtils, tool as ISketchContour)); } } return(toolBodies.ToArray()); }
/// <summary> /// 生成锥体 /// </summary> /// <param name="m">造型接口</param> /// <param name="center">中心</param> /// <param name="axis">旋转轴</param> /// <param name="baseRadius">底部半径</param> /// <param name="topRadius">顶部半径</param> /// <param name="height">高度</param> /// <returns></returns> public static IBody2 CreateCone (this IModeler m, Vector3 center, Vector3 axis, double baseRadius, double topRadius, double height) { var array = center.ToDoubles().Concat(axis.ToDoubles()).Concat(new[] { baseRadius, topRadius, height }).ToArray(); return((IBody2)m.CreateBodyFromCone(array)); }
/// <summary> /// Creates the box solid geometry /// </summary> /// <param name="modeler">Pointer to modeler</param> /// <param name="center">Center coordinate of the box in meters</param> /// <param name="dir">Direction of the box</param> /// <param name="width">Width of the box in meters</param> /// <param name="length">Length of the box in meters</param> /// <param name="height">Height of the box in meters. This is a dimension parallel to <paramref name="dir"/></param> /// <returns>Pointer to a temp body</returns> /// <remarks>Use this method instead of built-in <see href="http://help.solidworks.com/2016/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IModeler~CreateBodyFromBox3.html">IModeler::CreateBodyFromBox</see> /// If you need to preserve entity ids as the body generated using the built-in method won't allow to set user id, /// which means any reference geometry generated in relation to box entities will become dangling upon rebuild</remarks> public static IBody2 CreateBox(this IModeler modeler, Point center, Vector dir, double width, double length, double height) { Vector refDir = null; return(CreateBox(modeler, center, dir, ref refDir, width, length, height)); }
public static ICurve CreateTrimmedLine(this IModeler modeler, Vector3 p0, Vector3 v0, double length) { v0 = v0.Unit() * (double)length; var p1 = p0 + v0; return(CreateTrimmedLine(modeler, p0, p1)); }
/// <summary> /// 生成圆柱体 /// </summary> /// <param name="m">造型接口</param> /// <param name="radius">半径</param> /// <param name="height">高度</param> /// <returns></returns> public static IBody2 CreateCylinder (this IModeler m, double radius, double height) { var center = Vector3.Zero; var axis = Vector3.UnitZ; return(CreateBodyFromCylTs(m, center, axis, radius, height)); }
internal SwMemorySolidGeometryBuilder(ISwApplication app, IMemoryGeometryBuilderDocumentProvider geomBuilderDocsProvider) { m_App = app; m_MathUtils = m_App.Sw.IGetMathUtility(); m_Modeler = m_App.Sw.IGetModeler(); m_GeomBuilderDocsProvider = geomBuilderDocsProvider; }
internal SwTempPrimitive(SwTempBody[] bodies, ISwApplication app, bool isCreated) { m_App = app; m_MathUtils = m_App.Sw.IGetMathUtility(); m_Modeler = m_App.Sw.IGetModeler(); m_Creator = new ElementCreator <ISwTempBody[]>(CreateBodies, bodies, isCreated); }
public RoundStockModel(ISldWorks app, CylindricalStockFitExtractor cylExt, ILogService log) { m_App = app; m_Modeler = app.IGetModeler(); m_CylExt = cylExt; m_Log = log; m_Log.LogMessage("Initialized round stock model"); }
public static ISurface CreatePlanarSurface(this IModeler activeModeler, PointDirection3 plane) { var planeDirection = plane.Direction; var vRef = planeDirection.Orthogonal(); var mathVector = planeDirection; var vRootPoint = plane.Point; return((ISurface)activeModeler.CreatePlanarSurface2(vRootPoint.ToDoubles(), mathVector.ToDoubles(), vRef.ToDoubles())); }
/// <summary> /// 创建长方体 /// </summary> /// <param name="modeler"></param> /// <param name="width"></param> /// <param name="length"></param> /// <param name="height"></param> /// <returns></returns> public static IBody2 CreateBox(this IModeler modeler, double width, double length, double height) => modeler.CreateBox (Vector3.Zero, Vector3.UnitZ, width, length, height);
internal SwMemoryGeometryBuilder(ISwApplication app, IMemoryGeometryBuilderDocumentProvider geomBuilderDocsProvider) { var mathUtils = app.Sw.IGetMathUtility(); m_Modeler = app.Sw.IGetModeler(); WireBuilder = new SwMemoryWireGeometryBuilder(mathUtils, m_Modeler); SheetBuilder = new SwMemorySheetGeometryBuilder(mathUtils, m_Modeler); SolidBuilder = new SwMemorySolidGeometryBuilder(app, geomBuilderDocsProvider); }
/// <summary> /// 指定位置创建圆柱体 /// </summary> /// <param name="modeler">造型接口</param> /// <param name="xyz">坐标</param> /// <param name="axis">轴心</param> /// <param name="radius">半径</param> /// <param name="length">长度</param> /// <returns></returns> public static IBody2 CreateBodyFromCylTs(this IModeler modeler, Vector3 xyz, Vector3 axis, double radius, double length) { var array = xyz .ToDoubles() .Concat(axis.ToDoubles()) .Concat(new[] { radius, length }) .ToArray(); return((IBody2)modeler.CreateBodyFromCyl(array)); }
private IBody2 CreateBodyFromSketchContour(IModeler modeler, IMathUtility mathUtils, ISketchContour skCont, double height, bool midPlane) { var sketch = skCont.Sketch; if (sketch.Is3D()) { throw new UserErrorException("Only 2D sketches are supported"); } var transform = sketch.ModelToSketchTransform.IInverse(); var boundary = (skCont.GetEdges() as object[]) .Cast <IEdge>() .Select(e => { var curve = e.IGetCurve().ICopy(); //must copy curve otherwise CreateTrimmedSheet4 is failing return(curve); }).ToArray(); var centerPt = mathUtils.CreatePoint(new double[] { 0, 0, 0 }) as IMathPoint; var dirVec = mathUtils.CreateVector(new double[] { 0, 0, 1 }) as IMathVector; var refVec = mathUtils.CreateVector(new double[] { 1, 0, 0 }) as IMathVector; centerPt = centerPt.IMultiplyTransform(transform); dirVec = dirVec.IMultiplyTransform(transform); refVec = refVec.IMultiplyTransform(transform); if (midPlane) { var dirRevVec = new Vector(dirVec.ArrayData as double[]); dirRevVec.Scale(-1); var origPt = new Point(centerPt.ArrayData as double[]); MoveCurves(origPt, dirRevVec, height / 2, boundary, mathUtils); centerPt = mathUtils.CreatePoint(origPt.Move(dirRevVec, height / 2).ToArray()) as IMathPoint; } var surf = modeler.CreatePlanarSurface2(centerPt.ArrayData, dirVec.ArrayData, refVec.ArrayData) as ISurface; var sheetBody = surf.CreateTrimmedSheet4(boundary, true) as Body2; if (sheetBody == null) { throw new NullReferenceException("Failed to create trimmed sheet from surface region"); } var solidBody = modeler.CreateExtrudedBody(sheetBody, dirVec as MathVector, height) as IBody2; var faces = (solidBody.GetFaces() as object[]).Cast <IFace2>().ToArray(); return(modeler.CreateSheetFromFaces(faces)); }
public static IBody2 CreateCirclularSheet(this IModeler modeler, Vector3 center, Vector3 vNormal, float radius) { var surf = (Surface)modeler.CreatePlanarSurface(center.ToDoubles(), vNormal.ToDoubles()); var startPoint = center + vNormal.Orthogonal().Unit() * radius; var endPoint = startPoint; var arc = (Curve) modeler.CreateArc (center.ToDoubles(), vNormal.ToDoubles(), (float)radius, startPoint.ToDoubles(), endPoint.ToDoubles()); return((IBody2)surf.CreateTrimmedSheet(new[] { arc })); }
public static IBody2[] SplitBodies(IModeler modeler, IBody2 body, SampleMacroFeatureDataBase database) { var box = body.GetBodyBoxTs(); var center = box.Center; var axisX = Vector3.UnitX; // Find the point to cut the object center.X = (double)(database.Alpha * box.P0.X + (1 - database.Alpha) * box.P1.X); var sheet = modeler.CreateSheet(center, axisX, box.MaxDim * 2); var cutResult = body.Cut(sheet); return(cutResult.Error == 0 ? cutResult.Bodies : null); }
private IBody2[] CropGeometry(IModeler modeler, IMathUtility mathUtils, List <IBody2> targetBodies, List <object> trimTools) { if (targetBodies == null || !targetBodies.Any()) { throw new UserErrorException("Select target bodies to trim"); } if (trimTools == null || !trimTools.Any()) { throw new UserErrorException("Select trim tools (sketches or sketch regions)"); } var resBodies = new List <IBody2>(); var toolBodies = CreateToolBodies(modeler, mathUtils, trimTools); if (!toolBodies.Any()) { throw new UserErrorException("No closed regions found in the selected trim tools"); } foreach (var inputBody in targetBodies) { if (inputBody == null) { continue; //TODO: investigate why first body is null } foreach (var solidBody in toolBodies) { var targetBody = inputBody.ICopy(); var toolBody = solidBody.ICopy(); int err; object[] res = targetBody.Operations2((int)swBodyOperationType_e.SWBODYINTERSECT, toolBody, out err) as object[]; if (res != null) { foreach (IBody2 resBody in res) { resBodies.Add(resBody); } } } } return(resBodies.ToArray()); }
public static ICurve CreateTrimmedArc (this IModeler modeler, Vector3 center, Vector3 axis, Vector3 startPoint, Vector3 endPoint) { var radius = (startPoint - center).Length(); var arc = (Curve) modeler.CreateArc (center.ToDoubles(), axis.ToDoubles(), (double)radius, startPoint.ToDoubles(), endPoint.ToDoubles()); var pp0 = arc.GetClosestPointOn(startPoint.X, startPoint.Y, startPoint.Z).CastArray <double>(); var pp1 = arc.GetClosestPointOn(endPoint.X, endPoint.Y, endPoint.Z).CastArray <double>(); return(arc.CreateTrimmedCurve(pp0[3], pp1[3])); }
public static IBody2 CreateSurfaceBody(this IModeler modeler, ISurface surface) { var swSurfPara = surface.Parameterization2(); var uvrange = new double[] { swSurfPara.UMin, swSurfPara.UMax, swSurfPara.VMin, swSurfPara.VMax }; return((IBody2)modeler.CreateSheetFromSurface(surface, uvrange)); }
/// <summary> /// 创建点0 到 点1 的直线 /// </summary> /// <param name="modeler"></param> /// <param name="edge"></param> /// <returns></returns> public static ICurve CreateTrimmedLine(this IModeler modeler, Edge3 edge) { Debug.Assert(edge.Delta.Length() > double.Epsilon); var startPoint = new[] { (double)edge.A.X, (double)edge.A.Y, (double)edge.A.Z }; var dir = edge.Delta.Unit(); var direction = new[] { (double)dir.X, (double)dir.Y, (double)dir.Z }; var line = (ICurve)modeler.CreateLine(startPoint, direction); Debug.Assert(line != null, "line != null"); var pp0 = line.GetClosestPointOn(edge.A.X, edge.A.Y, edge.A.Z) as double[]; var pp1 = line.GetClosestPointOn(edge.B.X, edge.B.Y, edge.B.Z) as double[]; line = line.CreateTrimmedCurve2(pp0[0], pp0[1], pp0[2], pp1[0], pp1[1], pp1[2]); //var trimmedLine = line.CreateTrimmedCurve(pp0[3], pp1[3]); //Debug.Assert(trimmedLine != null, "line != null"); return(line); }
internal static void BuildModelByRow(IModeler model, Data data, INumVar[] Buy, NumVarType type) { int nFoods = data.nFoods; int nNutrs = data.nNutrs; for (int j = 0; j < nFoods; j++) { Buy[j] = model.NumVar(data.foodMin[j], data.foodMax[j], type); } model.AddMinimize(model.ScalProd(data.foodCost, Buy)); for (int i = 0; i < nNutrs; i++) { model.AddRange(data.nutrMin[i], model.ScalProd(data.nutrPerFood[i], Buy), data.nutrMax[i]); } }
private static IBody2 CreateSheetFromSurface(IModeler modeler, ISurface surf, double[] uRange, double[] vRange) { var uvRange = uRange.Concat(vRange).ToArray(); var sheet = (IBody2) modeler.CreateSheetFromSurface(surf, uvRange); return sheet; }
// The following method populates the problem with data for the // following linear program: // // Maximize // x1 + 2 x2 + 3 x3 // Subject To // - x1 + x2 + x3 <= 20 // x1 - 3 x2 + x3 <= 30 // Bounds // 0 <= x1 <= 40 // End // // using the IModeler API internal static void PopulateByRow(IModeler model, INumVar[][] var, IRange[][] rng) { double[] lb = {0.0, 0.0, 0.0}; double[] ub = {40.0, System.Double.MaxValue, System.Double.MaxValue}; string[] varname = {"x1", "x2", "x3"}; INumVar[] x = model.NumVarArray(3, lb, ub, varname); var[0] = x; double[] objvals = {1.0, 2.0, 3.0}; model.AddMaximize(model.ScalProd(x, objvals)); rng[0] = new IRange[2]; rng[0][0] = model.AddLe(model.Sum(model.Prod(-1.0, x[0]), model.Prod( 1.0, x[1]), model.Prod( 1.0, x[2])), 20.0, "c1"); rng[0][1] = model.AddLe(model.Sum(model.Prod( 1.0, x[0]), model.Prod(-3.0, x[1]), model.Prod( 1.0, x[2])), 30.0, "c2"); }
// This method creates the master ILP (arc variables x and degree constraints). // // Modeling variables: // forall (i,j) in A: // x(i,j) = 1, if arc (i,j) is selected // = 0, otherwise // // Objective: // minimize sum((i,j) in A) c(i,j) * x(i,j) // // Degree constraints: // forall i in V: sum((i,j) in delta+(i)) x(i,j) = 1 // forall i in V: sum((j,i) in delta-(i)) x(j,i) = 1 // // Binary constraints on arc variables: // forall (i,j) in A: x(i,j) in {0, 1} // internal static void CreateMasterILP(IModeler model, Data data, IIntVar[][] x) { int i, j; int numNodes = data.numNodes; // Create variables x(i,j) for (i,j) in A // For simplicity, also dummy variables x(i,i) are created. // Those variables are fixed to 0 and do not partecipate to // the constraints. for (i = 0; i < numNodes; ++i) { x[i] = new IIntVar[numNodes]; for (j = 0; j < numNodes; ++j) { x[i][j] = model.BoolVar("x." + i + "." + j); model.Add(x[i][j]); } x[i][i].UB = 0; } // Create objective function: minimize sum((i,j) in A ) c(i,j) * x(i,j) ILinearNumExpr objExpr = model.LinearNumExpr(); for (i = 0; i < numNodes; ++i) objExpr.Add(model.ScalProd(x[i], data.arcCost[i])); model.AddMinimize(objExpr); // Add the out degree constraints. // forall i in V: sum((i,j) in delta+(i)) x(i,j) = 1 for (i = 0; i < numNodes; ++i) { ILinearNumExpr expr = model.LinearNumExpr(); for (j = 0; j < i; ++j) expr.AddTerm(x[i][j], 1.0); for (j = i + 1; j < numNodes; ++j) expr.AddTerm(x[i][j], 1.0); model.AddEq(expr, 1.0); } // Add the in degree constraints. // forall i in V: sum((j,i) in delta-(i)) x(j,i) = 1 for (i = 0; i < numNodes; ++i) { ILinearNumExpr expr = model.LinearNumExpr(); for (j = 0; j < i; ++j) expr.AddTerm(x[j][i], 1.0); for (j = i + 1; j < numNodes; ++j) expr.AddTerm(x[j][i], 1.0); model.AddEq(expr, 1.0); } }
public static IRange[] MakeCuts(IModeler m, ILPMatrix lp) { INumVar x11 = null, x12 = null, x13 = null, x14 = null, x15 = null; INumVar x21 = null, x22 = null, x23 = null, x24 = null, x25 = null; INumVar x31 = null, x32 = null, x33 = null, x34 = null, x35 = null; INumVar x41 = null, x42 = null, x43 = null, x44 = null, x45 = null; INumVar x51 = null, x52 = null, x53 = null, x54 = null, x55 = null; INumVar w11 = null, w12 = null, w13 = null, w14 = null, w15 = null; INumVar w21 = null, w22 = null, w23 = null, w24 = null, w25 = null; INumVar w31 = null, w32 = null, w33 = null, w34 = null, w35 = null; INumVar w41 = null, w42 = null, w43 = null, w44 = null, w45 = null; INumVar w51 = null, w52 = null, w53 = null, w54 = null, w55 = null; INumVar[] vars = lp.NumVars; int num = vars.Length; for (int i = 0; i < num; ++i) { if ( vars[i].Name.Equals("X11") ) x11 = vars[i]; else if ( vars[i].Name.Equals("X12") ) x12 = vars[i]; else if ( vars[i].Name.Equals("X13") ) x13 = vars[i]; else if ( vars[i].Name.Equals("X14") ) x14 = vars[i]; else if ( vars[i].Name.Equals("X15") ) x15 = vars[i]; else if ( vars[i].Name.Equals("X21") ) x21 = vars[i]; else if ( vars[i].Name.Equals("X22") ) x22 = vars[i]; else if ( vars[i].Name.Equals("X23") ) x23 = vars[i]; else if ( vars[i].Name.Equals("X24") ) x24 = vars[i]; else if ( vars[i].Name.Equals("X25") ) x25 = vars[i]; else if ( vars[i].Name.Equals("X31") ) x31 = vars[i]; else if ( vars[i].Name.Equals("X32") ) x32 = vars[i]; else if ( vars[i].Name.Equals("X33") ) x33 = vars[i]; else if ( vars[i].Name.Equals("X34") ) x34 = vars[i]; else if ( vars[i].Name.Equals("X35") ) x35 = vars[i]; else if ( vars[i].Name.Equals("X41") ) x41 = vars[i]; else if ( vars[i].Name.Equals("X42") ) x42 = vars[i]; else if ( vars[i].Name.Equals("X43") ) x43 = vars[i]; else if ( vars[i].Name.Equals("X44") ) x44 = vars[i]; else if ( vars[i].Name.Equals("X45") ) x45 = vars[i]; else if ( vars[i].Name.Equals("X51") ) x51 = vars[i]; else if ( vars[i].Name.Equals("X52") ) x52 = vars[i]; else if ( vars[i].Name.Equals("X53") ) x53 = vars[i]; else if ( vars[i].Name.Equals("X54") ) x54 = vars[i]; else if ( vars[i].Name.Equals("X55") ) x55 = vars[i]; else if ( vars[i].Name.Equals("W11") ) w11 = vars[i]; else if ( vars[i].Name.Equals("W12") ) w12 = vars[i]; else if ( vars[i].Name.Equals("W13") ) w13 = vars[i]; else if ( vars[i].Name.Equals("W14") ) w14 = vars[i]; else if ( vars[i].Name.Equals("W15") ) w15 = vars[i]; else if ( vars[i].Name.Equals("W21") ) w21 = vars[i]; else if ( vars[i].Name.Equals("W22") ) w22 = vars[i]; else if ( vars[i].Name.Equals("W23") ) w23 = vars[i]; else if ( vars[i].Name.Equals("W24") ) w24 = vars[i]; else if ( vars[i].Name.Equals("W25") ) w25 = vars[i]; else if ( vars[i].Name.Equals("W31") ) w31 = vars[i]; else if ( vars[i].Name.Equals("W32") ) w32 = vars[i]; else if ( vars[i].Name.Equals("W33") ) w33 = vars[i]; else if ( vars[i].Name.Equals("W34") ) w34 = vars[i]; else if ( vars[i].Name.Equals("W35") ) w35 = vars[i]; else if ( vars[i].Name.Equals("W41") ) w41 = vars[i]; else if ( vars[i].Name.Equals("W42") ) w42 = vars[i]; else if ( vars[i].Name.Equals("W43") ) w43 = vars[i]; else if ( vars[i].Name.Equals("W44") ) w44 = vars[i]; else if ( vars[i].Name.Equals("W45") ) w45 = vars[i]; else if ( vars[i].Name.Equals("W51") ) w51 = vars[i]; else if ( vars[i].Name.Equals("W52") ) w52 = vars[i]; else if ( vars[i].Name.Equals("W53") ) w53 = vars[i]; else if ( vars[i].Name.Equals("W54") ) w54 = vars[i]; else if ( vars[i].Name.Equals("W55") ) w55 = vars[i]; } IRange[] cut = new IRange[8]; cut[0] = m.Le(m.Diff(x21, x22), 0.0); cut[1] = m.Le(m.Diff(x22, x23), 0.0); cut[2] = m.Le(m.Diff(x23, x24), 0.0); cut[3] = m.Le(m.Sum(m.Sum(m.Prod(2.08, x11), m.Prod(2.98, x21), m.Prod(3.47, x31), m.Prod(2.24, x41), m.Prod(2.08, x51)), m.Sum(m.Prod(0.25, w11), m.Prod(0.25, w21), m.Prod(0.25, w31), m.Prod(0.25, w41), m.Prod(0.25, w51))), 20.25); cut[4] = m.Le(m.Sum(m.Sum(m.Prod(2.08, x12), m.Prod(2.98, x22), m.Prod(3.47, x32), m.Prod(2.24, x42), m.Prod(2.08, x52)), m.Sum(m.Prod(0.25, w12), m.Prod(0.25, w22), m.Prod(0.25, w32), m.Prod(0.25, w42), m.Prod(0.25, w52))), 20.25); cut[5] = m.Le(m.Sum(m.Sum(m.Prod(2.08, x13), m.Prod(2.98, x23), m.Prod(3.47, x33), m.Prod(2.24, x43), m.Prod(2.08, x53)), m.Sum(m.Prod(0.25, w13), m.Prod(0.25, w23), m.Prod(0.25, w33), m.Prod(0.25, w43), m.Prod(0.25, w53))), 20.25); cut[6] = m.Le(m.Sum(m.Sum(m.Prod(2.08, x14), m.Prod(2.98, x24), m.Prod(3.47, x34), m.Prod(2.24, x44), m.Prod(2.08, x54)), m.Sum(m.Prod(0.25, w14), m.Prod(0.25, w24), m.Prod(0.25, w34), m.Prod(0.25, w44), m.Prod(0.25, w54))), 20.25); cut[7] = m.Le(m.Sum(m.Sum(m.Prod(2.08, x15), m.Prod(2.98, x25), m.Prod(3.47, x35), m.Prod(2.24, x45), m.Prod(2.08, x55)), m.Sum(m.Prod(0.25, w15), m.Prod(0.25, w25), m.Prod(0.25, w35), m.Prod(0.25, w45), m.Prod(0.25, w55))), 16.25); return cut; }