/// <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); }
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) { }
/// <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); }