예제 #1
0
        /// <summary>
        /// Создать новый примитив - конус по значениям параметров из строки таблицы
        /// </summary>
        /// <param name="rEntity">Строка таблицы со значениями параметров примитива</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - конус</returns>
        public static EntityCtor.ProxyEntity newCone(Settings.EntityParser.ProxyEntity entity /*, string blockName*/)
        {
            EntityCtor.ProxyEntity pEntityRes;

            double height = -1F
            , rAlongX = -1F, rAlongY = -1
            , rTop = -1;

            double[] ptDisplacement = new double[3];

            MSExcel.MAP_KEY_ENTITY mapKeyEntity =
                MSExcel.s_MappingKeyEntity.Find(item => {
                return(item.m_command.Equals(entity.m_command) == true);
            });
            ConstructorInfo coneCtor     = mapKeyEntity.m_type.GetConstructor(Type.EmptyTypes);
            MethodInfo      methodCreate = mapKeyEntity.m_type.GetMethod(mapKeyEntity.m_nameCreateMethod);

            pEntityRes                  = new EntityCtor.ProxyEntity();
            pEntityRes.m_entity         = null;
            pEntityRes.m_ptDisplacement = Point3d.Origin;

            // значения для параметров примитива
            height = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_HEIGHT).ToString()
                                  , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            rAlongX = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_X).ToString()
                                   , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            rAlongY = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_ARADIUS_Y).ToString()
                                   , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            rTop = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_RADIUS_TOP).ToString()
                                , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            ptDisplacement[0] = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_X).ToString()
                                             , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            ptDisplacement[1] = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Y).ToString()
                                             , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
            ptDisplacement[2] = double.Parse(entity.GetProperty(Settings.MSExcel.HEAP_INDEX_COLUMN.CONE_PTDISPLACEMENT_Z).ToString()
                                             , System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);

            //pEntityRes = new ProxyEntity (new Solid3d());
            pEntityRes.m_entity = coneCtor.Invoke(new object[] { }) as Solid3d;
            //(pEntityRes.m_entity as Solid3d).CreateFrustum(height, rAlongX, rAlongY, rTop);
            methodCreate.Invoke(pEntityRes.m_entity, new object[] { height, rAlongX, rAlongY, rTop }); // CreateFrustum
            pEntityRes.SetPoint3dDisplacement(ptDisplacement);

            //pEntityRes.m_BlockName = blockName;

            return(pEntityRes);
        }
예제 #2
0
 public KEY_ENTITY(MSExcel.MAP_KEY_ENTITY mapKeyEntity, string blockName, int indx)
     : this(blockName, mapKeyEntity.m_command, indx, mapKeyEntity.m_type, mapKeyEntity.m_nameSolidType, mapKeyEntity.m_nameCreateMethod)
 {
 }
예제 #3
0
        /// <summary>
        /// Создать примитив - полилинию с бесконечным числом вершин
        /// </summary>
        /// <param name="rEntity">Строка таблицы со значениями параметров примитива</param>
        /// <param name="format">Формат файла конфигурации из которого была импортирована таблица</param>
        /// <param name="blockName">Наимнование блока (только при формате 'HEAP')</param>
        /// <returns>Объект примитива - кривая</returns>
        public static EntityCtor.ProxyEntity newPolyLine3d(Settings.EntityParser.ProxyEntity entity /*, string blockName*/)
        {
            EntityCtor.ProxyEntity pEntityRes;

            int cntVertex = -1  // количество точек
            , j           = -1; // счетчие вершин в цикле

            double[]          point3d = new double[3];
            Point3dCollection pnts    = new Point3dCollection()
            {
            };
            PolylineVertex3d vex3d;

            MSExcel.MAP_KEY_ENTITY mapKeyEntity =
                MSExcel.s_MappingKeyEntity.Find(item => {
                return(item.m_command.Equals(entity.m_command) == true);
            });
            ConstructorInfo pline3dCtor = mapKeyEntity.m_type.GetConstructor(
                new Type[] {
                // вариант №1
                typeof(Poly3dType)
                , typeof(Point3dCollection)
                , typeof(bool)
                //// вариант №2
                //
            }
                );

            pEntityRes                  = new ProxyEntity();
            pEntityRes.m_entity         = null;
            pEntityRes.m_ptDisplacement = Point3d.Origin;

            // ??? значения для параметров примитива
            cntVertex = entity.Properties[0].Index;
            foreach (double[] pt3d in entity.Properties[0].Value as List <double[]> )
            {
                pnts.Add(new Point3d(pt3d));
            }

            if (pnts.Count > 2)
            {
                // соэдать примитив
                pEntityRes.m_entity =
                    // вариант №1
                    pline3dCtor.Invoke(new object[] { Poly3dType.SimplePoly, pnts, false })
                    //// вариант №2
                    //pline3dCtor.Invoke(new object[] { })
                    as Entity;

                //// для варианта №2
                //foreach (Point3d pt in pnts) {
                //    vex3d = new PolylineVertex3d(pt);
                //    (pEntityRes.m_entity as Polyline3d).AppendVertex(vex3d);
                //}
                //(pEntityRes.m_entity as Polyline3d).Close();

                //pEntityRes.m_BlockName = blockName;
            }
            else
            {
                Logging.AcEditorWriteMessage(string.Format(@"Недостаточно точек для создания {0} с именем={1}"
                                                           , entity.m_command
                                                           , entity.m_name
                                                           ));
            }

            return(pEntityRes);
        }