Пример #1
0
        public void TestExternalBaseSurrogate()
        {
            var x = new CMySuperStd
            {
                Name = "Alyssa",
                Age  = 21,
                Sex  = "Yes"
            };

            var c = new CSerializationContext();

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(3, elem.ChildNodes.Count, "Child Node Count is wrong");
            Assert.AreEqual(x.Name, XmlExtensions.GetElementValue(elem, "Name"), "Name");
            Assert.AreEqual(x.Age.ToString(), XmlExtensions.GetElementValue(elem, "Age"), "Age");
            Assert.AreEqual(x.Sex, XmlExtensions.GetElementValue(elem, "Sex"), "Sex");

            PrintLine();

            c.RegisterExternalSurrogate(typeof(CStdBaseObject), new CStdExternalSurrogate());

            doc = s.Serialize(x);
            Print(doc);
            elem = doc.DocumentElement;

            Assert.AreEqual(1, elem.ChildNodes.Count, "Child Node Count is wrong");
            Assert.AreEqual(x.Name, XmlExtensions.GetAttributeValue(elem, "NAME"), "Name");
            Assert.AreEqual(x.Age.ToString(), XmlExtensions.GetAttributeValue(elem, "AGE"), "Age");
            Assert.AreEqual(x.Sex, XmlExtensions.GetElementValue(elem, "Sex"), "Sex");
        }
Пример #2
0
        public void TestGenericDerived()
        {
            var src = new CPersonWithObject <CAddress>()
            {
                SomeObject = new CAddress()
                {
                    m_city   = "Spring",
                    m_street = "Halifax",
                    m_zip    = 37174
                }
            };

            var s   = new CSerializer();
            var xml = s.Serialize(src);

            Print(xml);



            var d    = new CDeserializer();
            var dest = d.Deserialize(xml) as CPersonWithObject <CAddress>;

            Assert.AreEqual(src.m_name, dest.m_name, "Name");
            Assert.AreEqual(src.SomeObject.m_street, dest.SomeObject.m_street, "Generic Street");
            Assert.AreEqual(src.m_address.m_zip, dest.m_address.m_zip, "Zip");
            Assert.AreNotEqual(src.SomeObject, dest.SomeObject);
        }
Пример #3
0
        public void TestArraySurrogate()
        {
            var x = new int[] { 1, 3, 5, 7, 9 };

            var c = new CSerializationContext();

            c.SetConcise();
            var helper = new CIntArraySurrogate();

            c.RegisterExternalSurrogate(typeof(int[]), helper);

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Console.WriteLine("Depth of resulting XML: " + XmlExtensions.Depth(doc));
            Console.WriteLine("Length of resulting XML String: " + doc.OuterXml.Length);
            Console.WriteLine("Number of resulting XmlElements: " + XmlExtensions.ElementCount(doc));
            Print(doc);

            var d = new CDeserializer(c);
            var y = (int[])d.Deserialize(doc);

            Assert.AreEqual(x.Length, y.Length - 1, "Length of resulting array is wrong");
            for (var i = 0; i < x.Length; i++)
            {
                Assert.AreEqual(x[i], y[i], "Invalid element at: " + i);
            }
        }
Пример #4
0
        public void TestStringCounter()
        {
            var x = new CTypeCounter();

            var c = new CSerializationContext();

            c.SetConcise();
            c.RegisterExternalSurrogate(typeof(string), x);

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Assert.AreEqual(3, x.Count, "There should have been 3 strings counted.");

            Console.WriteLine("Depth of resulting XML: " + XmlExtensions.Depth(doc));
            Console.WriteLine("Length of resulting XML String: " + doc.OuterXml.Length);
            Console.WriteLine("Number of resulting XmlElements: " + XmlExtensions.ElementCount(doc));
            Print(doc);

            var d = new CDeserializer(c);
            var y = d.Deserialize <CTypeCounter>(doc);

            Assert.AreEqual(0, y.Count, "The new object should have no counted strings");
            Assert.AreEqual(6, x.Count, "The initial object should have strings counted for 2 actions");
        }
Пример #5
0
        public bool MySerialize(CSerializer _framework, XmlNode _node)
        {
            XmlExtensions.AddAttribute(_node, "Incomplete", "Yes");

            STATUS = ETestStatus.IMPLICIT_SERIALIZER_INCOMPLETE;
            return(false);
        }
Пример #6
0
        public void TestExternalSurrogate()
        {
            var x = new CStdBaseObject
            {
                Name = "Alyssa",
                Age  = 21
            };
            var c = new CSerializationContext();

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(2, elem.ChildNodes.Count, "Child Node Count is wrong");
            Assert.AreEqual(x.Name, XmlExtensions.GetElementValue(elem, "Name"), "Name");
            Assert.AreEqual(x.Age.ToString(), XmlExtensions.GetElementValue(elem, "Age"), "Age");

            Console.WriteLine(
                "\r\n\r\n-----------------------------------------------------------------------------\r\n\r\n");
            c.RegisterExternalSurrogate(typeof(CStdBaseObject), new CStdExternalSurrogate());

            doc = s.Serialize(x);
            Print(doc);
            elem = doc.DocumentElement;

            Assert.AreEqual(0, elem.ChildNodes.Count, "Child Node Count is wrong");
            Assert.AreEqual(x.Name, XmlExtensions.GetAttributeValue(elem, "NAME"), "Name");
            Assert.AreEqual(x.Age.ToString(), XmlExtensions.GetAttributeValue(elem, "AGE"), "Age");
        }
Пример #7
0
        public void TestFieldRenamer()
        {
            var c = new CSerializationContext
            {
                FieldRenamer = new CFieldRenamer()
            };

            var s   = new CSerializer(c);
            var add = new CAddress();

            var doc = s.Serialize(add);

            Print(doc);

            var root = doc.DocumentElement;

            TestSingleRenamedField(add.m_zip, root["INT_Zip"]);
            TestSingleRenamedField(add.m_city, root["STRING_City"]);
            TestSingleRenamedField(add.m_street, root["STRING_Street"]);


            var d   = new CDeserializer(c);
            var ad2 = d.Deserialize <CAddress>(doc);

            Assert.AreEqual(add.m_city, ad2.m_city, "City");
            Assert.AreEqual(add.m_street, ad2.m_street, "Street");
            Assert.AreEqual(add.m_zip, ad2.m_zip, "Zip");
        }
        public void TestLinkedList()
        {
            var list = new LinkedList <int>();

            for (var i = 1; i < 1000000; i = (int)((i + 1) * 1.5))
            {
                list.AddLast(i);
            }

            var s   = new CSerializer();
            var doc = s.Serialize(list);

            Print(doc);

            var d     = new CDeserializer();
            var list2 = d.Deserialize(doc) as LinkedList <int>;

            Assert.AreEqual(list.Count, list2.Count, "Number of resulting elements is wrong.");

            var ptr = list2.First;

            foreach (var x in list)
            {
                Assert.AreEqual(x, ptr.Value, "The deserialized value is wrong for initial value: " + x);
                ptr = ptr.Next;
            }
        }
Пример #9
0
        public void TestDuplicateReferences()
        {
            var arr = new object[10];
            var p   = new CPerson();
            var p2  = new CPerson();

            arr[1] = p;
            arr[2] = p2;
            arr[5] = p2;
            arr[8] = p;
            arr[9] = p;

            object x = arr;

            var c = new CSerializationContext();

            c.SetConcise();
            c.FixM_ = true;
            c.ArrayElementsIncludeIndicies = true;
            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            AssureCorrectReference(elem, 1, 8);
            AssureCorrectReference(elem, 1, 9);
            AssureCorrectReference(elem, 2, 5);
        }
        public void TestStack()
        {
            var q = new Stack <CAddress>();

            for (var i = 1; i < 11; i++)
            {
                q.Push(CAddress.Get());
            }

            var s   = new CSerializer();
            var doc = s.Serialize(q);

            Print(doc);

            var d  = new CDeserializer();
            var q2 = (Stack <CAddress>)d.Deserialize(doc);

            Assert.AreEqual(q.Count, q2.Count, "Number of resulting elements is wrong.");
            Assert.AreEqual(q.Count,
                            doc.DocumentElement.ChildNodes.Count,
                            "The number of child nodes does not equal the number of elements in the Collection.");

            while (q.Count > 0)
            {
                var a1 = q.Pop();
                var a2 = q2.Pop();
                CompareCAddresses(a1, a2);
            }
        }
        /// <summary>
        /// 編集図面をシリアライズされたバッファから読み込む
        /// </summary>
        /// <param name="cad2d"></param>
        protected void loadEditCad2DFromSerializedBuffer(ref CCadObj2D cad2d)
        {
            // 図面をクリア
            cad2d.Clear();
            // シリアライズバッファから図面を読み込む

            if (SerializedCadObjBuff != "")
            {
                // Cadオブジェクト一時ファイルを作成
                string tmpFilename = generateTmpFilename();
                createDirectory(Path.GetDirectoryName(tmpFilename));
                try
                {
                    // シリアライズバッファを一時ファイルに出力する(Shift JIS)
                    using (StreamWriter sw = new StreamWriter(tmpFilename, false, Encoding.GetEncoding(932)))
                    {
                        sw.Write(SerializedCadObjBuff);
                    }
                    // 一時ファイルからCadオブジェクトにデータをロードする
                    using (CSerializer fin = new CSerializer(tmpFilename, true)) // is_loading:true
                    {
                        cad2d.Serialize(fin);
                    }
                    // 一時ファイルを削除する
                    File.Delete(tmpFilename);
                }
                catch (Exception exception)
                {
                    System.Diagnostics.Debug.WriteLine(exception.Message + " " + exception.StackTrace);
                    MessageBox.Show(exception.Message);
                }
            }
        }
        /// <summary>
        /// 図面をシリアライズバッファに保存する
        /// </summary>
        protected void saveEditCad2DToSerializedBuffer(CCadObj2D cad2d)
        {
            // シリアライズされたCadオブジェクトのバッファを削除
            clearSerializedCadObjBuffer();

            // Cadオブジェクト一時ファイルを作成
            string tmpFilename = generateTmpFilename();

            createDirectory(Path.GetDirectoryName(tmpFilename));
            try
            {
                // 編集Cadオブジェクトをファイルに出力する
                using (CSerializer fout = new CSerializer(tmpFilename, false)) // is_loading:false
                {
                    cad2d.Serialize(fout);
                }

                // シリアライズしたCadオブジェクトをメモリにロードする
                using (StreamReader sr = new StreamReader(tmpFilename, Encoding.GetEncoding(932)))
                {
                    SerializedCadObjBuff = sr.ReadToEnd();
                }

                // 一時ファイルを削除する
                File.Delete(tmpFilename);
            }
            catch (Exception exception)
            {
                System.Diagnostics.Debug.WriteLine(exception.Message + " " + exception.StackTrace);
                MessageBox.Show(exception.Message);
            }
            System.Diagnostics.Debug.WriteLine("SerializedCadObjBuff size = {0}", SerializedCadObjBuff.Length);
        }
Пример #13
0
        public void TestNullableType()
        {
            int?x = null;
            var s = new CSerializer();

            CSerializationContext.Global.SetVerbose();

            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(CSerializationContext.Global.NullAttributeValue,
                            XmlExtensions.GetAttributeValue(elem, CSerializationContext.Global.NullAttributeName),
                            "Should be null");
            Assert.AreEqual("", elem.InnerText, "Should be no innerText");

            PrintLine();

            x   = 69;
            doc = s.Serialize(x);
            Print(doc);
            elem = doc.DocumentElement;
            Assert.AreEqual(x.GetType().AssemblyQualifiedName,
                            XmlExtensions.GetAttributeValue(elem, CSerializationContext.Global.TypeAttributeName),
                            "The Type is wrong");
        }
Пример #14
0
        public void TestMultidimStringArray()
        {
            string[,] x;
            x = (string[, ])Array.CreateInstance(typeof(string), new int[] { 2, 2 }, new int[] { 5, 9 });

            x[5, 9]  = "first";
            x[5, 10] = "second";
            x[6, 9]  = "third";
            x[6, 10] = "fourth";

            var c = new CSerializationContext();

            c.SetConcise();

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(1, elem.ChildNodes.Count, "Should be one child (an XmlText node)");
            Assert.AreEqual("2,2",
                            XmlExtensions.GetAttributeValue(elem, c.ArrayAttributeName),
                            "Array Lengths are wrong");
            Assert.AreEqual("5,9",
                            XmlExtensions.GetAttributeValue(elem, c.ArrayLowerBoundAttribute),
                            "Array Lowerbounds are wrong");
            Assert.AreEqual("first,second,third,fourth", elem.InnerText, "The text for the multidim array is wrong");
        }
Пример #15
0
        public void TestSuperclassedArray()
        {
            var x = new CSuperArray
            {
                Arr = new int[] { 1, 3, 5 }
            };

            var s   = new CSerializer();
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(typeof(CSuperArray).AssemblyQualifiedName,
                            XmlExtensions.GetAttributeValue(elem, s.Context.TypeAttributeName),
                            "Type of the root node is wrong");

            var e = (XmlElement)elem.SelectSingleNode("Arr");

            Assert.IsNotNull(e, "Missing Arr element");
            Assert.AreEqual(x.Arr.GetType().AssemblyQualifiedName,
                            XmlExtensions.GetAttributeValue(e, s.Context.TypeAttributeName),
                            "Type Attribute Error");
            Assert.AreEqual(x.Arr.Length.ToString(),
                            XmlExtensions.GetAttributeValue(e, s.Context.ArrayAttributeName),
                            "Length of Array Attribute is wrong");
            Assert.AreEqual("1,3,5", elem.InnerText, "Inner Text for the array");
        }
Пример #16
0
        public void TestConstructor()
        {
            var other = new CSerializationContext();
            var s     = new CSerializer(other);

            ReferenceEquals(other, s.Context);
        }
        public void TestDictionary()
        {
            var x = new Dictionary <int, string>
            {
                [4]     = "hello",
                [55]    = "Katie",
                [15834] = "=)",
                [324]   = "Homer",
                [-87]   = "Simpson"
            };

            var c = new CSerializationContext();

            c.SetConcise();
            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);

            var d = new CDeserializer(c);
            var y = (Dictionary <int, string>)d.Deserialize(doc);


            Assert.AreEqual(x.Count, y.Count, "Size of resulting hashtable is wrong");
            foreach (var key in x.Keys)
            {
                Assert.AreEqual(x[key], y[key], "Entry at key " + key + " was wrong.");
            }
        }
Пример #18
0
        public void TestExternalSurrogate()
        {
            CBigPerson.GenerateData(100);
            var c = new CSerializationContext();

            c.SetConcise();
            var helper = new CFriendSerializer();

            c.RegisterExternalSurrogate(typeof(CFriend), helper);

            var s   = new CSerializer(c);
            var doc = s.Serialize(CBigPerson.People);

            Console.WriteLine("Depth of resulting XML: " + XmlExtensions.Depth(doc));
            Console.WriteLine("Length of resulting XML String: " + doc.OuterXml.Length);
            Console.WriteLine("Number of resulting XmlElements: " + XmlExtensions.ElementCount(doc));
            Print(doc);

            var d  = new CDeserializer(c);
            var x2 = d.Deserialize <CBigPerson[]>(doc);

            helper.FinishDeserializing(x2);

            CDeserializeTest.AssertEqualBigPeopleArray(CBigPerson.People, x2);
        }
        public void TestSortedDictionary()
        {
            var names = GenerateRandomNames();
            var dict  = new SortedDictionary <string, CAddress>();

            for (var i = 0; i < 26; i++)
            {
                dict[names[i]] = CAddress.Get();
            }

            var s   = new CSerializer();
            var doc = s.Serialize(dict);

            Print(doc);

            var d  = new CDeserializer();
            var d2 = (SortedDictionary <string, CAddress>)d.Deserialize(doc);

            Assert.AreEqual(dict.Count, d2.Count, "Size of resulting dictionary is wrong");
            Assert.AreEqual(dict.Count, doc.DocumentElement.ChildNodes.Count, "The number of XmlNodes for the collection is wrong");

            foreach (var key in dict.Keys)
            {
                CompareCAddresses(dict[key], d2[key]);
            }
        }
Пример #20
0
        public void MySerialize(CSerializer _framework, XmlNode _node)
        {
            XmlExtensions.AddAttribute(_node, "NAME", Name);
            XmlExtensions.AddAttribute(_node, "AGE", Age);

            STATUS = ETestStatus.IMPLICIT_SERIALIZER_VOID;
        }
Пример #21
0
        public void TestConstructorWithNominalTypeAndObjectAndSerializerAndIsUpdateDocument()
        {
            var c                    = CreateC();
            var serializer           = new CSerializer();
            var serializationOptions = DocumentSerializationOptions.SerializeIdFirstInstance;

            var wrapper = new BsonDocumentWrapper(typeof(C), c, serializer, serializationOptions, true);

            Assert.AreEqual(true, wrapper.IsUpdateDocument);
            Assert.AreEqual(serializationOptions, wrapper.SerializationOptions);
            Assert.AreSame(serializer, wrapper.Serializer);
            Assert.AreSame(typeof(C), wrapper.WrappedNominalType);
            Assert.AreSame(c, wrapper.WrappedObject);
            Assert.AreEqual(false, wrapper.IsMaterialized);

            wrapper = new BsonDocumentWrapper(typeof(C), null, serializer, serializationOptions, true);
            Assert.AreEqual(true, wrapper.IsUpdateDocument);
            Assert.AreEqual(serializationOptions, wrapper.SerializationOptions);
            Assert.AreSame(serializer, wrapper.Serializer);
            Assert.AreSame(typeof(C), wrapper.WrappedNominalType);
            Assert.AreSame(null, wrapper.WrappedObject);
            Assert.AreEqual(false, wrapper.IsMaterialized);

            Assert.Throws <ArgumentNullException>(() => new BsonDocumentWrapper(null, c, serializer, serializationOptions, true));
            Assert.Throws <ArgumentNullException>(() => new BsonDocumentWrapper(typeof(C), c, null, serializationOptions, true));
            Assert.DoesNotThrow(() => new BsonDocumentWrapper(typeof(C), c, serializer, null, true));
        }
        public void TestList()
        {
            var names = new List <string>
            {
                "Homer",
                "Marge",
                "Bart",
                "Lisa",
                "Maggie"
            };

            var c = new CSerializationContext();

            c.SetVerbose();
            var s   = new CSerializer(c);
            var doc = s.Serialize(names);

            Print(doc);

            var d      = new CDeserializer(c);
            var names2 = d.Deserialize <List <string> >(doc);

            Assert.AreEqual(names.Count, names2.Count, "The number of list elements is wrong");
            for (var i = 0; i < names.Count; i++)
            {
                Assert.AreEqual(names[i], names2[i], "The name is wrong at index " + i);
            }
        }
        public void TestAllArrayLists()
        {
            CClassWithArrayLists ca = new CClassWithArrayLists();

            ca.SimpleArrayList   = MakeSampleArrayList();
            ca.ReadOnlyArrayList = ArrayList.ReadOnly(ca.SimpleArrayList);
            // This is really bad because we shouldn't really hold the ref to the "old" object
            // after its been wrapped
            ca.SyncArrayList = ArrayList.Synchronized(ca.SimpleArrayList);
            // This is really bad because we shouldn't really hold the ref to the "old" object
            // after its been wrapped

            Assert.AreNotEqual(ca.SimpleArrayList.GetType(),
                               ca.ReadOnlyArrayList.GetType(),
                               "The Type of the ArrayList is the SAME as the ReadOnly ArrayList.");
            Assert.AreNotEqual(ca.SimpleArrayList.GetType(),
                               ca.SyncArrayList.GetType(),
                               "The Type of the ArrayList is the SAME as the SyncArrayList.");
            Assert.AreNotEqual(ca.SyncArrayList.GetType(),
                               ca.ReadOnlyArrayList.GetType(),
                               "The Type of the SyncArrayList is the SAME as the ReadOnly ArrayList.");

            Console.WriteLine(ca.SimpleArrayList.GetType().AssemblyQualifiedName);
            Console.WriteLine(ca.ReadOnlyArrayList.GetType().AssemblyQualifiedName);
            Console.WriteLine(ca.SyncArrayList.GetType().AssemblyQualifiedName);

            CSerializationContext.Global.UseFullUtcDateTimeStrings = true;
            CSerializer s   = new CSerializer();
            XmlDocument doc = s.Serialize(ca);

            Print(doc);

            CDeserializer        d   = new CDeserializer();
            CClassWithArrayLists ca2 = d.Deserialize <CClassWithArrayLists>(doc);

            Assert.AreEqual(ca.SimpleArrayList.GetType(),
                            ca2.SimpleArrayList.GetType(),
                            "The Type of the resulting ArrayList is different.");
            Assert.AreEqual(ca.ReadOnlyArrayList.GetType(),
                            ca2.ReadOnlyArrayList.GetType(),
                            "The Type of the ReadOnly array is different");
            Assert.AreEqual(ca.SyncArrayList.GetType(),
                            ca2.SyncArrayList.GetType(),
                            "The Type of the Sync array is different");

            Assert.AreNotEqual(ca2.SimpleArrayList.GetType(),
                               ca2.ReadOnlyArrayList.GetType(),
                               "The Type of the ArrayList is the SAME as the ReadOnly ArrayList.");
            Assert.AreNotEqual(ca2.SimpleArrayList.GetType(),
                               ca2.SyncArrayList.GetType(),
                               "The Type of the ArrayList is the SAME as the SyncArrayList.");
            Assert.AreNotEqual(ca2.SyncArrayList.GetType(),
                               ca2.ReadOnlyArrayList.GetType(),
                               "The Type of the SyncArrayList is the SAME as the ReadOnly ArrayList.");

            VerifyArrayListContents(ca.SimpleArrayList, ca2.SimpleArrayList);
            VerifyArrayListContents(ca.ReadOnlyArrayList, ca2.ReadOnlyArrayList);
            VerifyArrayListContents(ca.SyncArrayList, ca2.SyncArrayList);
        }
Пример #24
0
        public bool MySerialize(CSerializer _serializer, XmlNode _node)
        {
            XmlExtensions.AddAttribute(_node, "NAME", Name);
            XmlExtensions.AddAttribute(_node, "AGE", Age);

            STATUS = ETestStatus.IMPLICIT_SERIALIZER;
            return(true);
        }
Пример #25
0
        public void TestConstructorNull()
        {
            var s = new CSerializer(null);

            Assert.AreEqual(CSerializationContext.Global,
                            s.Context,
                            "Null constructor parameter should point to Global context");
        }
Пример #26
0
 public void TestTypeFieldTest()
 {
     var obj = new CClassWithType()
     {
         Type = GetType()
     };
     var s   = new CSerializer();
     var doc = s.Serialize(obj);
 }
Пример #27
0
 public void EnumValueAsObjectTest()
 {
     var obj = new CClassWithObject()
     {
         Obj = EDispatchMode.Threadpool
     };
     var s   = new CSerializer();
     var doc = s.Serialize(obj);
 }
Пример #28
0
        public bool Serialize(object _object, Type _useType, XmlElement _parentNode, CSerializer _framework)
        {
            var x = (CStdBaseObject)_object;

            XmlExtensions.AddAttribute(_parentNode, "NAME", x.Name);
            XmlExtensions.AddAttribute(_parentNode, "AGE", x.Age);

            CStdBaseObject.STATUS = ETestStatus.EXTERNAL_SERIALIZER;
            return(true);
        }
Пример #29
0
        public void TestNullableValueError()
        {
            int?x = null;

            var s   = new CSerializer();
            var doc = s.Serialize(x);

            Print(doc);

            var d = new CDeserializer();
            var y = (int)d.Deserialize(doc);    // should throw the error
        }
Пример #30
0
        public void TestCPersonExplicitArrays()
        {
            var x = new CPerson();
            var c = new CSerializationContext
            {
                FixM_ = true,
                AllArraysHaveExplicitElements = true,
                ArrayElementsIncludeIndicies  = true
            };

            var s   = new CSerializer(c);
            var doc = s.Serialize(x);

            Print(doc);
            var elem = doc.DocumentElement;

            Assert.AreEqual(x.m_name, XmlExtensions.GetElementValue(elem, "Name"), "Name");
            Assert.AreEqual(x.m_age.ToString(), XmlExtensions.GetElementValue(elem, "Age"), "Age");

            var e = (XmlElement)elem.SelectSingleNode("KidsNames");

            Assert.IsNotNull(e, "Missing KidsNames element");
            Assert.AreEqual("3", XmlExtensions.GetAttributeValue(e, s.Context.ArrayAttributeName), "Kids Array Count");
            for (var i = 0; i < x.m_kidsNames.Length; i++)
            {
                Assert.AreEqual(x.m_kidsNames[i], e.ChildNodes[i].InnerText, "Kid " + i);
                Assert.AreEqual(i.ToString(),
                                XmlExtensions.GetAttributeValue(e.ChildNodes[i], s.Context.ArrayIndexAttributeName),
                                "Array Index " + i);
            }

            e = (XmlElement)elem.SelectSingleNode("ANullValue");
            Assert.IsNotNull(e, "Missing ANullValue element");
            Assert.AreEqual(s.Context.NullAttributeValue,
                            XmlExtensions.GetAttributeValue(e, s.Context.NullAttributeName),
                            "Null Attribute Error");

            e = (XmlElement)elem.SelectSingleNode("Address");
            Assert.IsNotNull(e, "Missing Address element");
            Assert.AreEqual(x.m_address.m_city, XmlExtensions.GetElementValue(e, "City"), "Address-City");
            Assert.AreEqual(x.m_address.m_street, XmlExtensions.GetElementValue(e, "Street"), "Address-Street");
            Assert.AreEqual(x.m_address.m_zip.ToString(), XmlExtensions.GetElementValue(e, "Zip"), "Address-Zip");

            e = (XmlElement)elem.SelectSingleNode("OtherAddress");
            Assert.IsNotNull(e, "Other Address Missing");
            var sa = x.m_otherAddress as CSuperAddress;

            Assert.AreEqual(sa.m_country, XmlExtensions.GetElementValue(e, "Country"), "OtherAddress-Country");
            Assert.AreEqual(sa.m_city, XmlExtensions.GetElementValue(e, "City"), "Address-City");
            Assert.AreEqual(sa.m_street, XmlExtensions.GetElementValue(e, "Street"), "Address-Street");
            Assert.AreEqual(sa.m_zip.ToString(), XmlExtensions.GetElementValue(e, "Zip"), "Address-Zip");
        }
        /// <summary>
        /// 図面情報を読み込む
        /// </summary>
        /// <returns></returns>
        public static bool LoadFromFile(
            string filename,
            out string appVersion,
            out string useUtility,
            ref CCadObj2D editCad2D,
            ref IList<CadLogic.Loop> loopList,
            ref IList<EdgeCollection> edgeCollectionList,
            out int incidentPortNo,
            ref MediaInfo[] medias
            )
        {
            bool success = false;

            ////////////////////////////////////////////////////////
            // 出力データの初期化

            // アプリケーションのバージョン番号
            appVersion = "";
            // ユーティリティ名
            useUtility = "";

            // 図面のクリア
            editCad2D.Clear();
            //// ベースループIDを初期化
            //baseLoopId = 0;
            // ループ情報リストの初期化
            loopList.Clear();
            // 入射ポートの初期化
            incidentPortNo = 1;
            // ポートのエッジコレクションのリストを初期化
            edgeCollectionList.Clear();
            // 媒質の比誘電率、比透磁率の逆数の初期化
            foreach (MediaInfo media in medias)
            {
                // 比透磁率の逆数
                media.SetP(new double[,]
                    {
                        {1.0, 0.0, 0.0},
                        {0.0, 1.0, 0.0},
                        {0.0, 0.0, 1.0}
                    });
                // 比誘電率
                media.SetQ(new double[,]
                    {
                        {1.0, 0.0, 0.0},
                        {0.0, 1.0, 0.0},
                        {0.0, 0.0, 1.0}
                    });
            }

            try
            {
                // Cadオブジェクトデータファイル
                string basename = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(filename);
                string cadObjFilename = basename + Constants.CadObjExt;

                if (File.Exists(cadObjFilename))
                {
                    // Cadオブジェクトデータを外部ファイルから読み込む
                    using (CSerializer fin = new CSerializer(cadObjFilename, true))
                    {
                        editCad2D.Serialize(fin);
                    }
                }
                else
                {
                    MessageBox.Show("CadObjデータファイルがありません");
                    return success;
                }

                using (StreamReader sr = new StreamReader(filename))
                {
                    string line;
                    string[] tokens;
                    const char delimiter = ',';
                    int cnt = 0;

                    // アプリケーションのバージョン番号
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("アプリケーションのバージョン情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "AppVersion")
                    {
                        MessageBox.Show("アプリケーションのバージョン情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    appVersion = tokens[1];

                    // ユーティリティ名
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("ユーティリティ情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "UseUtility")
                    {
                        MessageBox.Show("ユーティリティ情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    useUtility = tokens[1];
                    if (useUtility != CadLogic.UseUtility)
                    {
                        MessageBox.Show("ユーティリティ情報が本アプリケーションのバージョンのものと一致しません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }

                    // ベースループID
                    //line = sr.ReadLine();
                    //if (line == null)
                    //{
                    //    MessageBox.Show("ベースループIDがありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //    return success;
                    //}
                    //tokens = line.Split(delimiter);
                    //if (tokens.Length != 2 || tokens[0] != "BaseLoopId")
                    //{
                    //    MessageBox.Show("ベースループIDがありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    //    return success;
                    //}
                    //baseLoopId = uint.Parse(tokens[1]);

                    // ループのリスト
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("ループ一覧がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "LoopList")
                    {
                        MessageBox.Show("ループ一覧がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    cnt = int.Parse(tokens[1]);
                    for (int i = 0; i < cnt; i++)
                    {
                        line = sr.ReadLine();
                        if (line == null)
                        {
                            MessageBox.Show("ループ情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return success;
                        }
                        tokens = line.Split(delimiter);
                        if (tokens.Length != 4 || tokens[0] != "Loop")
                        {
                            MessageBox.Show("ループ情報が不正です", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return success;
                        }
                        int countNo = int.Parse(tokens[1]);
                        uint loopId = uint.Parse(tokens[2]);
                        int mediaIndex = int.Parse(tokens[3]);
                        System.Diagnostics.Debug.Assert(countNo == i + 1);

                        CadLogic.Loop loop = new CadLogicBase.Loop(loopId, mediaIndex);
                        loopList.Add(loop);
                    }

                    // ポートのエッジコレクションのリスト
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("ポート一覧がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "EdgeCollectionList")
                    {
                        MessageBox.Show("ポート一覧がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return success;
                    }
                    cnt = int.Parse(tokens[1]);
                    for (int i = 0; i < cnt; i++)
                    {
                        line = sr.ReadLine();
                        if (line == null)
                        {
                            MessageBox.Show("ポート情報がありません", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return success;
                        }
                        tokens = line.Split(delimiter);
                        if (tokens.Length < (4 + 1) || tokens[0] != "EdgeCollection")
                        {
                            MessageBox.Show("ポート情報が不正です", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return success;
                        }
                        int countNo = int.Parse(tokens[1]);
                        int portNo = int.Parse(tokens[2]);
                        int eIdCnt = int.Parse(tokens[3]);
                        System.Diagnostics.Debug.Assert(countNo == i + 1);
                        System.Diagnostics.Debug.Assert(eIdCnt != 0 && eIdCnt == (tokens.Length - 4));

                        EdgeCollection edgeCollection = new EdgeCollection();
                        edgeCollection.No = portNo;
                        for (int tokenIndex = 4; tokenIndex < tokens.Length; tokenIndex++)
                        {
                            uint eId = uint.Parse(tokens[tokenIndex]);
                            if (!edgeCollection.ContainsEdgeId(eId))
                            {
                                bool ret = edgeCollection.AddEdgeId(eId, editCad2D);
                            }
                        }
                        edgeCollectionList.Add(edgeCollection);
                    }

                    // 入射ポート番号
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("入射ポート番号がありません");
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "IncidentPortNo")
                    {
                        MessageBox.Show("入射ポート番号がありません");
                        return success;
                    }
                    incidentPortNo = int.Parse(tokens[1]);

                    // 媒質情報
                    line = sr.ReadLine();
                    if (line == null)
                    {
                        MessageBox.Show("媒質情報がありません");
                        return success;
                    }
                    tokens = line.Split(delimiter);
                    if (tokens.Length != 2 || tokens[0] != "Medias")
                    {
                        MessageBox.Show("媒質情報がありません");
                        return success;
                    }
                    cnt = int.Parse(tokens[1]);
                    for (int i = 0; i < cnt; i++)
                    {
                        line = sr.ReadLine();
                        if (line == null)
                        {
                            MessageBox.Show("媒質情報が不正です");
                            return success;
                        }
                        tokens = line.Split(delimiter);
                        if (tokens.Length != 1 + 9 + 9)
                        {
                            MessageBox.Show("媒質情報が不正です");
                            return success;
                        }
                        int mediaIndex = int.Parse(tokens[0]);
                        System.Diagnostics.Debug.Assert(mediaIndex == i);
                        if (i >= medias.Length)
                        {
                            //読み飛ばす
                            continue;
                        }
                        double[,] p = new double[3, 3];
                        for (int m = 0; m < p.GetLength(0); m++)
                        {
                            for (int n = 0; n < p.GetLength(1); n++)
                            {
                                p[m, n] = double.Parse(tokens[1 + m * p.GetLength(1) + n]);
                            }
                        }
                            medias[i].SetP(p);

                        double[,] q = new double[3, 3];
                        for (int m = 0; m < q.GetLength(0); m++)
                        {
                            for (int n = 0; n < q.GetLength(1); n++)
                            {
                                q[m, n] = double.Parse(tokens[1 + 9 + m * q.GetLength(1) + n]);
                            }
                        }
                        medias[i].SetQ(q);
                    }
                }

                // 番号順に並び替え
                ((List<EdgeCollection>)edgeCollectionList).Sort();

                ////////////////////////////////////////////////////////////////////////
                // Cadオブジェクトの色をセットする
                // ループとその辺、頂点の色をセット
                foreach (CadLogic.Loop loop in loopList)
                {
                    uint id_l = loop.LoopId;
                    int mediaIndex = loop.MediaIndex;
                    MediaInfo media = medias[mediaIndex];
                    Color backColor = media.BackColor;
                    CadLogic.SetupColorOfCadObjectsForOneLoop(editCad2D, id_l, backColor);
                }
                // ポートの色をセットする
                CadLogic.SetupColorOfPortEdgeCollection(editCad2D, edgeCollectionList, incidentPortNo);

                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
                MessageBox.Show(exception.Message);
            }

            return success;
        }
        /// <summary>
        /// 編集図面をシリアライズされたバッファから読み込む
        /// </summary>
        /// <param name="cad2d"></param>
        protected void loadEditCad2DFromSerializedBuffer(ref CCadObj2D cad2d)
        {
            // 図面をクリア
            cad2d.Clear();
            // シリアライズバッファから図面を読み込む

            if (SerializedCadObjBuff != "")
            {
            // Cadオブジェクト一時ファイルを作成
            string tmpFilename = generateTmpFilename();
            createDirectory(Path.GetDirectoryName(tmpFilename));
                try
                {
                    // シリアライズバッファを一時ファイルに出力する(Shift JIS)
                    using (StreamWriter sw = new StreamWriter(tmpFilename, false, Encoding.GetEncoding(932)))
                    {
                        sw.Write(SerializedCadObjBuff);
                    }
                    // 一時ファイルからCadオブジェクトにデータをロードする
                    using (CSerializer fin = new CSerializer(tmpFilename, true)) // is_loading:true
                    {
                        cad2d.Serialize(fin);
                    }
                    // 一時ファイルを削除する
                    File.Delete(tmpFilename);
                }
                catch (Exception exception)
                {
                    Console.WriteLine(exception.Message + " " + exception.StackTrace);
                    MessageBox.Show(exception.Message);
                }
            }
        }
        /// <summary>
        /// 図面をシリアライズバッファに保存する
        /// </summary>
        protected void saveEditCad2DToSerializedBuffer(CCadObj2D cad2d)
        {
            // シリアライズされたCadオブジェクトのバッファを削除
            clearSerializedCadObjBuffer();

            // Cadオブジェクト一時ファイルを作成
            string tmpFilename = generateTmpFilename();
            createDirectory(Path.GetDirectoryName(tmpFilename));
            try
            {
                // 編集Cadオブジェクトをファイルに出力する
                using (CSerializer fout = new CSerializer(tmpFilename, false)) // is_loading:false
                {
                    cad2d.Serialize(fout);
                }

                // シリアライズしたCadオブジェクトをメモリにロードする
                using (StreamReader sr = new StreamReader(tmpFilename, Encoding.GetEncoding(932)))
                {
                    SerializedCadObjBuff = sr.ReadToEnd();
                }

                // 一時ファイルを削除する
                File.Delete(tmpFilename);

            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
                MessageBox.Show(exception.Message);
            }
            Console.WriteLine("SerializedCadObjBuff size = {0}", SerializedCadObjBuff.Length);
        }
Пример #34
0
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;
            try
            {
                if( ProbNo == 0 )
                {
                    CMesher2D mesh2d = null;
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.2) );
                        pts.Add( new CVector2D(0.5,0.2) );
                        pts.Add( new CVector2D(0.5,0.8) );
                        pts.Add( new CVector2D(1.0,0.8) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        cad2d.ConnectVertex_Line(6,3);
                        mesh2d = new CMesher2D(cad2d,0.05);
                        ////
                        using(CMesher2D msh_tmp = (CMesher2D)mesh2d.Clone())
                        {
                            mesh2d.Clear();
                            mesh2d.Dispose();
                            mesh2d = (CMesher2D)msh_tmp.Clone();
                        }
                    }
                    using(CSerializer fout = new CSerializer("hoge.txt", false))
                    {
                        // write file
                        mesh2d.Serialize(fout);
                    }
                    using(CSerializer fin = new CSerializer("hoge.txt", true))
                    {    // load file
                        mesh2d.Serialize(fin);
                    }
                    ////
                    DrawerAry.Clear();
                    DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                    DrawerAry.InitTrans( Camera );
                    mesh2d.Clear();
                    mesh2d.Dispose();
                }
                else if( ProbNo == 1 )
                {
                    string mshfn = "../../../input_file/hexa_tri.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 2 )
                {
                    string mshfn = "../../../input_file/rect_quad.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 3 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.5) );
                        pts.Add( new CVector2D(0.5,0.5) );
                        pts.Add( new CVector2D(0.5,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        cad2d.AddPolygon( pts );
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.1))
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh3d.Extrude(mesh2d, 0.5, 0.1 );
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 4 )    // load mesh of GiD
                {
                    string mshfn = "../../../input_file/hexa_tri.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            mesh3d.Extrude(mesh2d, 5.0, 0.5 );
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 5 )
                {
                    string mshfn = "../../../input_file/cylinder_hex.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher3D mesh3d = new CMesher3D())
                        {
                            mesh3d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 6 )
                {
                    string mshfn = "../../../input_file/cylinder_tet.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher3D mesh3d = new CMesher3D())
                        {
                            mesh3d.ReadFromFile_GiDMsh(mshfn);
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh3d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh3d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 7 )
                {
                    string mshfn = "../../../input_file/rect_quad.msh";
                    if (File.Exists(mshfn))
                    {
                        using(CMesher2D mesh2d = new CMesher2D())
                        using(CMesh3D_Extrude mesh3d = new CMesh3D_Extrude())
                        {
                            mesh2d.ReadFromFile_GiDMsh(mshfn);
                            mesh3d.Extrude(mesh2d, 5.0, 0.5 );
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh3D(mesh3d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", mshfn);
                        MessageBox.Show(string.Format("メッシュファイル:{0}がありません", mshfn));
                    }
                }
                else if( ProbNo == 8 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l = 0;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                        }

                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.8,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.6,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.4,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.2,0.6) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.8,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.6,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.4,0.4) );
                        cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.2,0.4) );
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.02))
                        {
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 9 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            cad2d.AddPolygon( pts );
                        }
                        cad2d.SetCurve_Arc(1,true, -0.5);
                        cad2d.SetCurve_Arc(2,false,-0.5);
                        cad2d.SetCurve_Arc(3,true, -0.5);
                        cad2d.SetCurve_Arc(4,false,-0.5);

                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.05))
                        {
                            using(CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                // write file
                                mesh2d.Serialize(fout);
                            }
                            using(CSerializer fin = new CSerializer("hoge.txt", true))
                            {    // load file
                                mesh2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 10 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            uint id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.2)).id_v_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.2)).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.8)).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.8)).id_v_add;
                            cad2d.ConnectVertex_Line(id_v1,id_v2);
                            cad2d.ConnectVertex_Line(id_v2,id_v3);
                            cad2d.ConnectVertex_Line(id_v3,id_v4);
                            cad2d.ConnectVertex_Line(id_v4,id_v1);
                        }

                        using(CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.AddIdLCad_CutMesh(1);    // cut mesh to loop whitch have id 1
                            mesh2d.SetMeshingMode_ElemLength(0.05);
                            mesh2d.Meshing(cad2d);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 11 )    // mesh with cut
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l;
                        uint id_e1, id_e2, id_e3, id_e4, id_e5;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(0.3,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.3,0.5) ).id_v_add;
                            id_e1 = cad2d.ConnectVertex_Line(2,id_v1).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.5) ).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.2) ).id_v_add;
                            uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.7,0.8) ).id_v_add;
                            uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.5,0.5) ).id_v_add;
                            uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l, new CVector2D(0.9,0.5) ).id_v_add;
                            id_e2 = cad2d.ConnectVertex_Line(id_v2,id_v3).id_e_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v2,id_v4).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v2,id_v5).id_e_add;
                            id_e5 = cad2d.ConnectVertex_Line(id_v2,id_v6).id_e_add;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.2))
                        {
                            IList<uint> aIdMsh_Inc = new List<uint>();
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l,CAD_ELEM_TYPE.LOOP) );

                            IList<uint> aIdMshBar_Cut = new List<uint>();
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e1,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e2,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e3,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e4,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e5,CAD_ELEM_TYPE.EDGE) );
                            ////////////////
                            IList< IList<int> > aLnods = new List<IList<int>>();
                            IList<uint> mapVal2Co = new List<uint>();
                            mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc, aIdMshBar_Cut);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 12 )    // mesh with cut
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        uint id_l1, id_l2;
                        uint id_e3, id_e4;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0, 0.0) );
                            pts.Add( new CVector2D(1.0, 0.0) );
                            pts.Add( new CVector2D(1.5, 0.0) );
                            pts.Add( new CVector2D(2.0, 0.0) );
                            pts.Add( new CVector2D(2.0, 1.0) );
                            pts.Add( new CVector2D(1.5, 1.0) );
                            pts.Add( new CVector2D(1.0, 1.0) );
                            pts.Add( new CVector2D(0.0, 1.0) );
                            uint id_l0 = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l0, new CVector2D(0.5,0.5) ).id_v_add;
                            uint id_e1 = cad2d.ConnectVertex_Line(2,7).id_e_add;
                            uint id_e2 = cad2d.ConnectVertex_Line(3,6).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,id_e1, new CVector2D(1.0,0.5) ).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,1, new CVector2D(0.5,0.0) ).id_v_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v1,id_v2).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v1,id_v3).id_e_add;
                            id_l1 = 1;
                            id_l2 = 2;
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.2))
                        {
                            IList<uint> aIdMsh_Inc = new List<uint>();
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l1,CAD_ELEM_TYPE.LOOP) );
                            aIdMsh_Inc.Add( mesh2d.GetElemID_FromCadID(id_l2,CAD_ELEM_TYPE.LOOP) );

                            IList<uint> aIdMshBar_Cut = new List<uint>();
                            //aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e3,CAD_ELEM_TYPE.EDGE) );
                            aIdMshBar_Cut.Add( mesh2d.GetElemID_FromCadID(id_e4,CAD_ELEM_TYPE.EDGE) );
                            ////////////////
                            IList< IList<int> > aLnods = new List<IList<int>>();
                            IList<uint> mapVal2Co = new List<uint>();
                            mesh2d.GetClipedMesh(out aLnods, out mapVal2Co, aIdMsh_Inc, aIdMshBar_Cut);

                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 13 )
                {
                    using(CCadObj2D cad2d = new CCadObj2D())
                    {
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0, 0.0) );    // 1
                            pts.Add( new CVector2D(1.5, 0.0) );    // 2
                            pts.Add( new CVector2D(1.5, 0.4) );    // 3
                            pts.Add( new CVector2D(1.0, 0.4) );    // 4
                            pts.Add( new CVector2D(1.0, 0.5) );    // 5
                            pts.Add( new CVector2D(2.0, 0.5) );    // 6
                            pts.Add( new CVector2D(2.0, 1.0) );    // 7
                            pts.Add( new CVector2D(0.0, 1.0) );    // 8
                            pts.Add( new CVector2D(0.0, 0.5) );    // 9
                            uint id_l0 = cad2d.AddPolygon( pts ).id_l_add;
                            uint id_e1 = cad2d.ConnectVertex_Line(5,9).id_e_add;
                            cad2d.ShiftLayer_Loop(id_l0,true);
                            double[] col = new double[3] { 0.9, 0.4, 0.4 };
                            cad2d.SetColor_Loop(id_l0, col);
                            cad2d.AddVertex(CAD_ELEM_TYPE.EDGE,3, new CVector2D(1.3,0.5));
                        }
                        using(CMesher2D mesh2d = new CMesher2D(cad2d, 0.05))
                        {
                            DrawerAry.Clear();
                            DrawerAry.PushBack( new CDrawerMsh2D(mesh2d) );
                            DrawerAry.InitTrans( Camera );
                        }
                    }
                }
                else if( ProbNo == 14 )
                {
                    string svgfn = "../../../input_file/shape2d_0.svg";
                    if (File.Exists(svgfn))
                    {
                        CCadObj2D cad2d = null;
                        CCadSVG.ReadSVG_AddLoopCad(svgfn, out cad2d);
                        using (CMesher2D mesh2d = new CMesher2D())
                        {
                            mesh2d.SetMeshingMode_ElemSize(400);
                            mesh2d.AddIdLCad_CutMesh(1);
                            mesh2d.Meshing(cad2d);

                            DrawerAry.Clear();
                            DrawerAry.PushBack(new CDrawerMsh2D(mesh2d));
                            DrawerAry.InitTrans(Camera);
                        }
                        cad2d.Clear();
                        cad2d.Dispose();
                    }
                    else
                    {
                        Console.WriteLine("not exist:{0}", svgfn);
                        MessageBox.Show(string.Format("SVGファイル:{0}がありません", svgfn));
                    }
                }
                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            DrawerGlUtility.SetProjectionTransform(Camera);
            Glut.glutPostRedisplay();
            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }
        public void TestConstructorWithNominalTypeAndObjectAndSerializerAndIsUpdateDocument()
        {
            var c = CreateC();
            var serializer = new CSerializer();
            var serializationOptions = DocumentSerializationOptions.SerializeIdFirstInstance;

            var wrapper = new BsonDocumentWrapper(typeof(C), c, serializer, serializationOptions, true);
            Assert.AreEqual(true, wrapper.IsUpdateDocument);
            Assert.AreEqual(serializationOptions, wrapper.SerializationOptions);
            Assert.AreSame(serializer, wrapper.Serializer);
            Assert.AreSame(typeof(C), wrapper.WrappedNominalType);
            Assert.AreSame(c, wrapper.WrappedObject);
            Assert.AreEqual(false, wrapper.IsMaterialized);

            wrapper = new BsonDocumentWrapper(typeof(C), null, serializer, serializationOptions, true);
            Assert.AreEqual(true, wrapper.IsUpdateDocument);
            Assert.AreEqual(serializationOptions, wrapper.SerializationOptions);
            Assert.AreSame(serializer, wrapper.Serializer);
            Assert.AreSame(typeof(C), wrapper.WrappedNominalType);
            Assert.AreSame(null, wrapper.WrappedObject);
            Assert.AreEqual(false, wrapper.IsMaterialized);

            Assert.Throws<ArgumentNullException>(() => new BsonDocumentWrapper(null, c, serializer, serializationOptions, true));
            Assert.Throws<ArgumentNullException>(() => new BsonDocumentWrapper(typeof(C), c, null, serializationOptions, true));
            Assert.DoesNotThrow(() => new BsonDocumentWrapper(typeof(C), c, serializer, null, true));
        }
        /////////////////////////////////////////////////////////////////////////////
        // 定数
        /////////////////////////////////////////////////////////////////////////////
        /////////////////////////////////////////////////////////////////////////////
        // 型
        /////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// 図面情報を保存する
        /// </summary>
        /// <param name="filename"></param>
        /// <param name="editCad2D"></param>
        /// <param name="loopList"></param>
        /// <param name="edgeCollectionList"></param>
        /// <param name="incidentPortNo"></param>
        /// <param name="medias"></param>
        public static void SaveToFile(
            string filename,
            CCadObj2D editCad2D,
            IList<CadLogic.Loop> loopList,
            IList<EdgeCollection> edgeCollectionList,
            int incidentPortNo,
            MediaInfo[] medias
            )
        {
            // 番号順に並び替え
            ((List<EdgeCollection>)edgeCollectionList).Sort();

            try
            {
                // Cadオブジェクトデータファイル
                string basename = Path.GetDirectoryName(filename) + Path.DirectorySeparatorChar + Path.GetFileNameWithoutExtension(filename);
                string cadObjFilename = basename + Constants.CadObjExt;

                // Cadオブジェクトデータを外部ファイルに書き込み
                using (CSerializer fout = new CSerializer(cadObjFilename, false))
                {
                    editCad2D.Serialize(fout);
                }

                // Cadデータの書き込み
                using (StreamWriter sw = new StreamWriter(filename))
                {
                    int counter;
                    string line;

                    // アプリケーションのバージョン番号
                    sw.WriteLine("AppVersion,{0}", MyUtilLib.MyUtil.getAppVersion());
                    // CadLogicの使用ユーティリティ名
                    sw.WriteLine("UseUtility,{0}", CadLogic.UseUtility);
                    //// ベースループID
                    //sw.WriteLine("BaseLoopId,{0}", baseLoopId);
                    // ループのリスト
                    counter = 0;
                    sw.WriteLine("LoopList,{0}", loopList.Count);
                    foreach (CadLogic.Loop loop in loopList)
                    {
                        sw.WriteLine("Loop,{0},{1},{2}", ++counter, loop.LoopId, loop.MediaIndex);
                    }
                    // ポートのエッジコレクションのリスト
                    counter = 0;
                    sw.WriteLine("EdgeCollectionList,{0}", edgeCollectionList.Count);
                    foreach (EdgeCollection edgeCollection in edgeCollectionList)
                    {
                        line = string.Format("EdgeCollection,{0},{1},{2},", ++counter, edgeCollection.No, edgeCollection.EdgeIds.Count);
                        foreach (uint eId in edgeCollection.EdgeIds)
                        {
                            line += string.Format("{0},", eId);
                        }
                        line = line.Remove(line.Length - 1); // 最後の,を削除
                        sw.WriteLine(line);
                    }
                    // 入射ポート番号
                    sw.WriteLine("IncidentPortNo,{0}", incidentPortNo);
                    // 媒質情報の個数
                    sw.WriteLine("Medias,{0}", medias.Length);
                    // 媒質情報の書き込み
                    for (int i = 0; i < medias.Length; i++)
                    {
                        MediaInfo media = medias[i];
                        line = string.Format("{0},", i);
                        double[,] p = media.P;
                        for (int m = 0; m < p.GetLength(0); m++)
                        {
                            for (int n = 0; n < p.GetLength(1); n++)
                            {
                                line += string.Format("{0},", p[m, n]);
                            }
                        }
                        double[,] q = media.Q;
                        for (int m = 0; m < q.GetLength(0); m++)
                        {
                            for (int n = 0; n < q.GetLength(1); n++)
                            {
                                line += string.Format("{0},", q[m, n]);
                            }
                        }
                        line = line.Remove(line.Length - 1); // 最後の,を削除
                        sw.WriteLine(line);
                    }
                }
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
                MessageBox.Show(exception.Message);
            }
        }
Пример #37
0
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;
            try
            {
                using (CCadObj2D cad2d = new CCadObj2D())
                {
                    if (ProbNo == 0)
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add(new CVector2D(0.0, 0.0));
                        pts.Add(new CVector2D(1.0, 0.0));
                        pts.Add(new CVector2D(1.0, 1.0));
                        pts.Add(new CVector2D(0.0, 1.0));
                        uint id_l0 = cad2d.AddPolygon(pts, 0).id_l_add;
                        uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.5)).id_v_add;
                        uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.8)).id_v_add;
                        uint id_v7 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.8, 0.5)).id_v_add;
                        uint id_v8 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.2)).id_v_add;
                        uint id_v9 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.2, 0.5)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v5, id_v6);
                        cad2d.ConnectVertex_Line(id_v5, id_v7);
                        cad2d.ConnectVertex_Line(id_v5, id_v8);
                        cad2d.ConnectVertex_Line(id_v5, id_v9);

                        using (CCadObj2D cad2dtmp = cad2d.Clone()) // コピーのテスト
                        {
                            // export to the file
                            using (CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                cad2dtmp.Serialize(fout);
                            }
                        }
                        // import form the file
                        cad2d.Clear();
                        using (CSerializer fin = new CSerializer("hoge.txt", true))
                        {
                            cad2d.Serialize(fin);
                        }
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 1)
                    {
                        CCadObj2D.CResAddPolygon res;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(2.0, 1.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(1.0, 2.0));
                            pts.Add(new CVector2D(0.0, 2.0));
                            res = cad2d.AddPolygon(pts);
                        }
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, res.aIdE[1]);
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, res.aIdE[2]);
                        cad2d.RemoveElement(CAD_ELEM_TYPE.VERTEX, res.aIdV[2]);
                        uint id_e_new = cad2d.ConnectVertex_Line(res.aIdE[3], res.aIdE[1]).id_e_add;
                        CCadObj2D.CResAddVertex res0 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, id_e_new, new CVector2D(1, 0.4));
                        CCadObj2D.CResAddVertex res1 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, id_e_new, new CVector2D(1, 0.6));
                        CCadObj2D.CResAddVertex res2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, res.aIdE[5], new CVector2D(0, 0.4));
                        CCadObj2D.CResAddVertex res3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, res.aIdE[5], new CVector2D(0, 0.6));
                        cad2d.ConnectVertex_Line(res0.id_v_add, res2.id_v_add);
                        cad2d.ConnectVertex_Line(res1.id_v_add, res3.id_v_add);
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, res1.id_e_add);
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, res3.id_e_add);
                        using (CCadObj2D cad2dtmp = cad2d.Clone()) // コピーのテスト
                        {
                            // export to the file
                            using (CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                cad2dtmp.Serialize(fout);
                            }
                        }
                        // import form the file
                        cad2d.Clear();
                        using (CSerializer fin = new CSerializer("hoge.txt", true))
                        {
                            cad2d.Serialize(fin);
                        }
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 2)
                    {
                        uint id_l0;
                        {    // Make model
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.4));
                            pts.Add(new CVector2D(0.0, 0.4));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        //cad2d.SetCurve_Arc(1,true,-0.2);
                        //cad2d.SetCurve_Arc(2,true, -0.5);
                        cad2d.SetCurve_Arc(3, false, 0);
                        //cad2d.SetCurve_Arc(4,true, -0.5);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 3)
                    {
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(0, 0)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(1, 0)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v1, id_v2);
                        uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(1, 1)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v2, id_v3);
                        uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(0, 1)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v4, id_v3);
                        uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, 2, new CVector2D(1, 0.5)).id_v_add;
                        uint id_v7 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(0.5, 0.5)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v5, id_v7);
                        uint id_v6 = cad2d.AddVertex(CAD_ELEM_TYPE.NOT_SET, 0, new CVector2D(1.5, 0.5)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v5, id_v6);
                        cad2d.ConnectVertex_Line(id_v4, id_v1);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 4)
                    {
                        uint id_l0;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        //uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP,id_l0,new CVector2D(0.5,0.5));
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.2)).id_v_add;
                        uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.8, 0.5)).id_v_add;
                        uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.8)).id_v_add;
                        uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.2, 0.5)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v2, id_v3);
                        cad2d.ConnectVertex_Line(id_v3, id_v4);
                        cad2d.ConnectVertex_Line(id_v4, id_v5);
                        uint id_e1 = cad2d.ConnectVertex_Line(id_v5, id_v2).id_e_add;
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, id_e1);
                        cad2d.ConnectVertex_Line(id_v5, id_v2);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 5)
                    {
                        uint id_l0;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 6)
                    {
                        uint id_l0;
                        {    // define initial loop
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.3, 0.1));
                            pts.Add(new CVector2D(0.9, 0.1));
                            pts.Add(new CVector2D(0.9, 0.7));
                            cad2d.AddPolygon(pts, id_l0);
                        }
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.1, 0.9));
                            pts.Add(new CVector2D(0.7, 0.9));
                            pts.Add(new CVector2D(0.1, 0.3));
                            cad2d.AddPolygon(pts, id_l0);
                        }
                        uint id_e0 = cad2d.ConnectVertex_Line(1, 3).id_e_add;
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, id_e0);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 7)
                    {
                        uint id_l0;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.9, 0.7)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.9, 0.1)).id_v_add;
                        uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.3, 0.1)).id_v_add;
                        cad2d.ConnectVertex_Line(id_v1, id_v2);
                        cad2d.ConnectVertex_Line(id_v2, id_v3);
                        cad2d.ConnectVertex_Line(id_v3, id_v1);
                        {
                            uint id_e0 = cad2d.ConnectVertex_Line(id_v2, 2).id_e_add;
                            cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, id_e0);
                        }
                        {
                            uint id_e0 = cad2d.ConnectVertex_Line(2, id_v2).id_e_add;
                            cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, id_e0);
                        }
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 8)
                    {
                        uint id_e3, id_e4;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));    // 1
                            pts.Add(new CVector2D(1.0, 0.0));    // 2
                            pts.Add(new CVector2D(1.5, 0.0));    // 3
                            pts.Add(new CVector2D(2.0, 0.0));    // 4
                            pts.Add(new CVector2D(2.0, 1.0));    // 5
                            pts.Add(new CVector2D(1.5, 1.0));    // 6
                            pts.Add(new CVector2D(1.0, 1.0));    // 7
                            pts.Add(new CVector2D(0.0, 1.0));    // 8
                            uint id_l0 = cad2d.AddPolygon(pts).id_l_add;
                            uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.5)).id_v_add;
                            uint id_e1 = cad2d.ConnectVertex_Line(2, 7).id_e_add;
                            uint id_e2 = cad2d.ConnectVertex_Line(3, 6).id_e_add;
                            uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, id_e1, new CVector2D(1.0, 0.5)).id_v_add;
                            uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, 1, new CVector2D(0.5, 0.0)).id_v_add;
                            id_e3 = cad2d.ConnectVertex_Line(id_v1, id_v2).id_e_add;
                            id_e4 = cad2d.ConnectVertex_Line(id_v1, id_v3).id_e_add;
                        }
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 9)
                    {
                        uint id_l0;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.2, 0.7)).id_v_add;
                        uint id_v2 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.2, 0.3)).id_v_add;
                        uint id_e0 = cad2d.ConnectVertex_Line(id_v1, id_v2).id_e_add;
                        uint id_v3 = cad2d.AddVertex(CAD_ELEM_TYPE.EDGE, id_e0, new CVector2D(0.2, 0.5)).id_v_add;
                        uint id_v4 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.5, 0.5)).id_v_add;
                        uint id_v5 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, id_l0, new CVector2D(0.7, 0.5)).id_v_add;
                        uint id_e1 = cad2d.ConnectVertex_Line(id_v3, id_v4).id_e_add;
                        uint id_e2 = cad2d.ConnectVertex_Line(id_v4, id_v5).id_e_add;
                        cad2d.RemoveElement(CAD_ELEM_TYPE.EDGE, id_e1);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 10)
                    {
                        uint id_l0;
                        {    // define shape
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            id_l0 = cad2d.AddPolygon(pts).id_l_add;
                        }
                        uint id_v1 = cad2d.AddVertex(CAD_ELEM_TYPE.LOOP, 0, new CVector2D(1.1, 0)).id_v_add;
                        cad2d.RemoveElement(CAD_ELEM_TYPE.VERTEX, id_v1);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 11)
                    {
                        {    // define initial loop
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add(new CVector2D(0.0, 0.0));
                            pts.Add(new CVector2D(1.0, 0.0));
                            pts.Add(new CVector2D(1.0, 1.0));
                            pts.Add(new CVector2D(0.0, 1.0));
                            pts.Add(new CVector2D(0.0, 0.5));
                            cad2d.AddPolygon(pts);
                        }
                        /*
                        {
                            IList<CVector2D> aRelCo = new List<CVector2D>();
                            aRelCo.Add(new CVector2D(0.25, -0.1));
                            aRelCo.Add(new CVector2D(0.5, -0.0));
                            aRelCo.Add(new CVector2D(0.75, -0.1));
                            cad2d.SetCurve_Polyline(1, aRelCo);
                        }
                        cad2d.SetCurve_Arc(2, true, -1);
                        {
                            IList<CVector2D> aRelCo = new List<CVector2D>();
                            aRelCo.Add(new CVector2D(+0.01, 0.35));
                            aRelCo.Add(new CVector2D(-0.05, 0.25));
                            aRelCo.Add(new CVector2D(+0.01, 0.15));
                            cad2d.SetCurve_Polyline(5, aRelCo);
                        }
                         */
                        cad2d.RemoveElement(CAD_ELEM_TYPE.VERTEX, 1);  // removing this point marges 2 polylines
                        cad2d.SetCurve_Bezier(3, 0.2, +0.5, 0.8, -0.5);
                        //cad2d.SetCurve_Bezier(4, 0.0,-1.0, 0.3,+1.0);
                        //cad2d.SetCurve_Bezier(5, 0.0,-1.0, 0.3,-1.0);
                        Console.WriteLine("area : {0}", cad2d.GetArea_Loop(1));
                        cad2d.WriteToFile_dxf("hoge.dxf", 1);
                        DrawerAry.Clear();
                        DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                        DrawerAry.InitTrans(Camera);
                    }
                    else if (ProbNo == 12)
                    {
                        string svgfname = "../../../input_file/shape2d_0.svg";
                        CCadObj2D cad2dtmp = null;
                        if (File.Exists(svgfname))
                        {
                            DelFEM4NetCad.CCadSVG.ReadSVG_AddLoopCad(svgfname, out cad2dtmp);
                            // export to the file
                            using (CSerializer fout = new CSerializer("hoge.txt", false))
                            {
                                cad2dtmp.Serialize(fout);
                            }
                            cad2dtmp.Dispose();
                            // import form the file
                            cad2d.Clear();
                            using (CSerializer fin = new CSerializer("hoge.txt", true))
                            {
                                cad2d.Serialize(fin);
                            }
                            DrawerAry.Clear();
                            DrawerAry.PushBack(new CDrawer_Cad2D(cad2d));
                            DrawerAry.InitTrans(Camera);
                        }
                        else
                        {
                            MessageBox.Show("SVGファイルがありません");
                        }
                    }
                } // using cad2d
                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            DrawerGlUtility.SetProjectionTransform(Camera);
            Glut.glutPostRedisplay();
            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }