Exemple #1
0
        } // Main(...)

        private static void CreateGeometricModel(CheetahDataSet dataSet, ICollection <long> entIdList)
        {
            // 1. Creating line segments and appending them to the data set

            var line1 = new CheetahLine2D(0.5, -0.5, 8.5, 0.5);
            var line2 = new CheetahLine2D(10.5, 1.5, 9.5, 8.5);
            var line3 = new CheetahLine2D(9.5, 9.5, 0.5, 10.5);
            var line4 = new CheetahLine2D(0.5, 8.5, -0.5, 1.5);

            entIdList.Add(line1.Id);
            entIdList.Add(line2.Id);
            entIdList.Add(line3.Id);
            entIdList.Add(line4.Id);

            // 2. Creating circle arcs and appending them to the data set

            var arc1 = new CheetahArc2D(new CheetahPoint2D(1.5, 1.5), -Math.PI, -Math.PI * 0.5, 1.25);
            var arc2 = new CheetahArc2D(new CheetahPoint2D(9.25, 0.75), -Math.PI * 0.5, 0.0, 0.5);
            var arc3 = new CheetahArc2D(new CheetahPoint2D(9.5, 9.5), Math.PI * 0.1, Math.PI * 0.5, 1.5);
            var arc4 = new CheetahArc2D(new CheetahPoint2D(1.2, 8.5), Math.PI * 0.25, Math.PI, 0.75);

            entIdList.Add(arc1.Id);
            entIdList.Add(arc2.Id);
            entIdList.Add(arc3.Id);
            entIdList.Add(arc4.Id);

            // 3. Creating geometric constraints

            // 3.1. Creating coinsident constraints for the end points of arcs amd line segments

            dataSet.AddCoincidence(arc1, IdentifiableValueReferences.ArcEnd,
                                   line1, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line1, IdentifiableValueReferences.LineEnd,
                                   arc2, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc2, IdentifiableValueReferences.ArcEnd,
                                   line2, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line2, IdentifiableValueReferences.LineEnd,
                                   arc3, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc3, IdentifiableValueReferences.ArcEnd,
                                   line3, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line3, IdentifiableValueReferences.LineEnd,
                                   arc4, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc4, IdentifiableValueReferences.ArcEnd,
                                   line4, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line4, IdentifiableValueReferences.LineEnd,
                                   arc1, IdentifiableValueReferences.ArcStart);

            // 3.2. Creating perpendicular constraints between line segments 1 and 2

            dataSet.AddPerpendicular(line1, line2);

            // 3.3. Creating two parallel constraints between line segments 1 and 3 and line segments 2 and 4

            dataSet.AddParallel(line1, line3);
            dataSet.AddParallel(line2, line4);

            // 3.4. Creating "equal radius" constraints for all arcs

            dataSet.AddEqual(arc1, arc2);
            dataSet.AddEqual(arc2, arc3);
            dataSet.AddEqual(arc3, arc4);

            // 3.5 Creating tangent constraints on the connection points of arcs and line segments

            dataSet.AddTangent(arc1, line1);
            dataSet.AddTangent(arc2, line1);
            dataSet.AddTangent(arc2, line2);
            dataSet.AddTangent(arc3, line2);
            dataSet.AddTangent(arc3, line3);
            dataSet.AddTangent(arc4, line3);
            dataSet.AddTangent(arc4, line4);
            dataSet.AddTangent(arc1, line4);

            // 4. Geometric model is created, but constraints are not satisfied yet!
        } // CreateGeometricModel(...)
        } // Main(...)

        private static void CreateGeometricModel(CheetahDataSet dataSet, ICollection<long> entIdList)
        {
            // 1. Creating line segments and appending them to the data set

            var line1 = new CheetahLine2D(0.5, -0.5, 8.5, 0.5);
            var line2 = new CheetahLine2D(10.5, 1.5, 9.5, 8.5);
            var line3 = new CheetahLine2D(9.5, 9.5, 0.5, 10.5);
            var line4 = new CheetahLine2D(0.5, 8.5, -0.5, 1.5);

            entIdList.Add(line1.Id);
            entIdList.Add(line2.Id);
            entIdList.Add(line3.Id);
            entIdList.Add(line4.Id);

            // 2. Creating circle arcs and appending them to the data set

            var arc1 = new CheetahArc2D(new CheetahPoint2D(1.5, 1.5), -Math.PI, -Math.PI * 0.5, 1.25);
            var arc2 = new CheetahArc2D(new CheetahPoint2D(9.25, 0.75), -Math.PI * 0.5, 0.0, 0.5);
            var arc3 = new CheetahArc2D(new CheetahPoint2D(9.5, 9.5), Math.PI * 0.1, Math.PI * 0.5, 1.5);
            var arc4 = new CheetahArc2D(new CheetahPoint2D(1.2, 8.5), Math.PI * 0.25, Math.PI, 0.75);

            entIdList.Add(arc1.Id);
            entIdList.Add(arc2.Id);
            entIdList.Add(arc3.Id);
            entIdList.Add(arc4.Id);

            // 3. Creating geometric constraints

            // 3.1. Creating coinsident constraints for the end points of arcs amd line segments

            dataSet.AddCoincidence(arc1, IdentifiableValueReferences.ArcEnd,
                line1, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line1, IdentifiableValueReferences.LineEnd,
                arc2, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc2, IdentifiableValueReferences.ArcEnd,
                line2, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line2, IdentifiableValueReferences.LineEnd,
                arc3, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc3, IdentifiableValueReferences.ArcEnd,
                line3, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line3, IdentifiableValueReferences.LineEnd,
                arc4, IdentifiableValueReferences.ArcStart);

            dataSet.AddCoincidence(arc4, IdentifiableValueReferences.ArcEnd,
                line4, IdentifiableValueReferences.LineStart);

            dataSet.AddCoincidence(line4, IdentifiableValueReferences.LineEnd,
                arc1, IdentifiableValueReferences.ArcStart);

            // 3.2. Creating perpendicular constraints between line segments 1 and 2

            dataSet.AddPerpendicular(line1, line2);

            // 3.3. Creating two parallel constraints between line segments 1 and 3 and line segments 2 and 4 

            dataSet.AddParallel(line1, line3);
            dataSet.AddParallel(line2, line4);

            // 3.4. Creating "equal radius" constraints for all arcs

            dataSet.AddEqual(arc1, arc2);
            dataSet.AddEqual(arc2, arc3);
            dataSet.AddEqual(arc3, arc4);

            // 3.5 Creating tangent constraints on the connection points of arcs and line segments

            dataSet.AddTangent(arc1, line1);
            dataSet.AddTangent(arc2, line1);
            dataSet.AddTangent(arc2, line2);
            dataSet.AddTangent(arc3, line2);
            dataSet.AddTangent(arc3, line3);
            dataSet.AddTangent(arc4, line3);
            dataSet.AddTangent(arc4, line4);
            dataSet.AddTangent(arc1, line4);

            // 4. Geometric model is created, but constraints are not satisfied yet!
            
        } // CreateGeometricModel(...)