ADN Club > Civil 3D API

Получение геометрических точек трассы в плане и профиле

(1/5) > >>

Wart:
Здравствуйте.
по следам этой темы: https://adn-cis.org/forum/index.php?topic=1705.msg6332#msg6332
Работаю в CIV3D 2022 с трассой ж.д., решил написать код в скрипте Python в Dynamo, задача такая: необходимо получить геометрические точки трассы в плане и профиле, нашёл способ как это сделать, в документации к CIV3D 2022 есть вот это: https://help.autodesk.com/view/CIV3D/2022/ENU/?guid=f749f05f-cda4-c1f1-ce11-c2ab30092f92
, но работает это свойство пикетов трассы как-то странно, на этой странице гайда: https://help.autodesk.com/view/CIV3D/2022/ENU/?guid=037d0484-72fd-d894-dcbd-27a506d88880
, показано что с помощью этого свойства должны выдаваться все точки геометрии, и плана и профиля, однако, у меня так не вышло, подскажите может кто-то сталкивался с такой проблемой и как её решили?

Вот сам код, он еще в работе, так что сильно не ругайте :)


--- Код - Python [Выбрать] ---# Load the Python Standard and DesignScript Librariesimport sysimport clr # Add Assemblies for AutoCAD and Civil3Dclr.AddReference("AcMgd")clr.AddReference("AcCoreMgd")clr.AddReference("AcDbMgd")clr.AddReference("AecBaseMgd")clr.AddReference("AecPropDataMgd")clr.AddReference("AeccDbMgd") # Import references from AutoCADfrom Autodesk.AutoCAD.Runtime import *from Autodesk.AutoCAD.ApplicationServices import *from Autodesk.AutoCAD.EditorInput import *from Autodesk.AutoCAD.DatabaseServices import *# from Autodesk.AutoCAD.Geometry import *# from Autodesk.Civil import * # Import references from Civil3Dfrom Autodesk.Civil.ApplicationServices import *from Autodesk.Civil.DatabaseServices import * from Autodesk.Civil.DatabaseServices import AlignmentGeometryPointStationType # The inputs to this node will be stored as a list in the IN variables.dataEnteringNode = IN adoc = Application.DocumentManager.MdiActiveDocumenteditor = adoc.EditorA = IN[0]ListPK = IN[1]with adoc.LockDocument():    with adoc.Database as db:         with db.TransactionManager.StartTransaction() as t:            # Place your code below                        # GeometryPointSelector.SelectAll                        align = A.InternalDBObject            # Station = []            # Vse to4ki geometrii            statAll = align.GetStationSet(StationTypes.All)            # Точки геометрии            statGeom = align.GetStationSet(StationTypes.GeometryPoint)            # Точки основных пикетов - da tex 4to idut u menia kazdyje 100m dopustim            statMajo = align.GetStationSet(StationTypes.Major)            # Точки чего? eto Station Equation, nepravelnyje pikety, t.e. pikety sdvinutyje ot pravlenyx (kotoryje kazdyje 100m). iz Civil dostupny po Alignment Priperties->station control.            statEqua = align.GetStationSet(StationTypes.Equation)            # Вывод данных о точках геометрии            statSupTrPo = align.GetStationSet(StationTypes.OffsetTargetCurveOnly)                        st_All = []            st_All1 = []            st_Geom = []            st_Geom1 = []            st_Mj0 = []            st_Mj = []            st_Mj1 = []            st_Eq = []            st_STP0 = []            st_STP1 = []            st_All.append("ПК ВСЕХ\nточек геометрии")            st_All1.append("Названия ВСЕХ\nточек геометрии")            st_Geom.append("ПК точек\nгоризонтальной геометрии")            st_Geom1.append("Названия точек\nгоризонтальной геометрии")            st_Eq.append("Неправильные\nПК")            st_Mj1.append("Названия основных ПК")            st_Mj0.append("основные ПК")            st_STP0.append("Station.RawStation")            st_STP1.append("Station.StationType")            for Station in statAll:                st_All.append(Station.RawStation)                st_All1.append(Station.StationType)            for Station in statGeom:                st_Geom.append(Station.RawStation)                st_Geom1.append(Station.StationType)            for Station in statMajo:                st_Mj0.append(Station.RawStation)                st_Mj1.append(Station.StationType)            for Station in statEqua:                st_Eq.append(Station.RawStation)            for Station in statSupTrPo:                st_STP0.append(Station.RawStation)                st_STP1.append(Station.StationType)            x = 0            st_Geom_2 = []            st_Geom_2.append(("Enumeration ВСЕХ\nточек геометрии"))            # while len(statAll) > x:            #     st_Geom_2.append(statAll[x].GeometryStationType)            #     x += 1             # for Station in statSupTrPo:            #     st_Geom_2.append(Station.GeometryStationType)                        for Station in statAll:                st_Geom_2.append(Station.GeometryStationType)                        # oProfile = t.GetObject(align.GetProfileIds()[0], OpenMode.ForRead)                        t.Commit()            pass # Assign your output to the OUT variable.OUT = st_All, st_All1, st_Geom_2# OUT = oProfile.GetType(), dir(oProfile)

Александр Ривилис:

--- Цитата: Wart от 21-02-2022, 15:28:06 ---на этой странице гайда: https://help.autodesk.com/view/CIV3D/2022/ENU/?guid=037d0484-72fd-d894-dcbd-27a506d88880
, показано что с помощью этого свойства должны выдаваться все точки геометрии, и плана и профиля
--- Конец цитаты ---
Где об этом сказано? Это вообще-то не свойство, а перечисление.

Wart:
Прошу прощения, я неверно выразился, я так понимаю, что свойство "GeometryStationType Property" должно выдавать результат как "
--- Код - C# [Выбрать] ---C# public AlignmentGeometryPointStationType GeometryStationType { get; set; }", или я ошибаюсь?

Александр Ривилис:

--- Цитата: Wart от 21-02-2022, 15:52:38 ---Прошу прощения, я неверно выразился, я так понимаю, что свойство "GeometryStationType Property" должно выдавать результат как "
--- Код - C# [Выбрать] ---C# public AlignmentGeometryPointStationType GeometryStationType { get; set; }", или я ошибаюсь?

--- Конец цитаты ---
Да. Свойство GeometryStationType, а результат - перечисление AlignmentGeometryPointStationType

Дмитрий Загорулькин:

--- Цитата: Wart от 21-02-2022, 15:28:06 ---необходимо получить геометрические точки трассы в плане и профиле
--- Конец цитаты ---
Добрый день! Сперва надо определиться, что значит "геометрические точки трассы в профиле"? Трасса - абсолютно плоский объект, всегда лежит в плоскости XY. У неё нет отметок в профиле. Точнее - они всегда 0.
Чтобы найти геометрические точки трассы в плане, я пользовался таким способом:

--- Код - C# [Выбрать] ---        /// <summary>        /// Gets the geometry points of the alignment        /// </summary>               /// <returns>List of points</returns>        public IList<Point> GetPoints()        {            List<Point> ret = new List<Point>();            C3dDb.Station[] stationSet = AeccAlignment                .GetStationSet(C3dDb.StationTypes.GeometryPoint);            foreach (C3dDb.Station data in stationSet)            {                Point point = Point.ByCoordinates                    (data.Location.X, data.Location.Y);                ret.Add(point);            }            return ret;       Полностью класс можно глянуть тут: https://github.com/zagor-dmtr/IterisCivilDynamo/blob/master/IterisCivilDynamo/Alignments/Alignment.cs

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии