ADN Club > Civil 3D API
Получение геометрических точек трассы в плане и профиле
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
Навигация
Перейти к полной версии