API, проблемы и решения в Tekla Structures
-
- Сообщения: 103
- Регистрация: 18 сен 2014, 07:20
Re: API, проблемы и решения в Tekla Structures
Никто не сможет подсказать как получить вот эти значения? (см. выделенное на приложенном файле) Что-то никак не соображу...
Re: API, проблемы и решения в Tekla Structures
Доброго времени суток!
С Текловским Open Api работаю уже несколько лет, в данный момент пишу плагин для работы с Tekla Analysis.
Столкнулся со следующей проблемой - вытягиваю из модели AnalysisPart, далее фрагмент кода (TSA заменил Tekla::Structures::Analysis для упрощения):
TSA::Analysis^ _analysis = gcnew TSA::Analysis();
TSA::AnalysisObjectSelector^ _analysisObjectSelector = _analysis->GetAnalysisObjectSelector();
TSA::AnalysisObjectEnumerator^ analysisObjectEnumerator =
_analysisObjectSelector->GetAllObjectsWithType(TSA::AnalysisObject::AnalysisObjectEnum::ANALYSIS_PART, _analysisModelName);
if (analysisObjectEnumerator != nullptr)
{
for each (TSA::AnalysisPart^ nextPart in analysisObjectEnumerator)
{
nextPart->AnalysisPartBarAttributes->BarStartCondition->EccentricityMode =
TSA::AnalysisPartEnd::EccentricityModeEnum::ECCENTRICITY_MODE_MANUAL;
nextPart->AnalysisPartBarAttributes->BarStartCondition->Eccentricity->X = 1.23;
nextPart->Modify();
}
}
то-есть - перебираю каждый и устанавливаю для них определенные параметры, для упрощения понимания оставил два.
Затем, естественно каждому делаю Modify.
Странность состоит в том, что после отработки плагина в AnalysisPart данные не появляются.
Или я что-то неправильно делаю, или Текловцы API не дописали почеловечески.
Во всяком случае для физической модели я делаю нечто подобное и там данные обновляются.
Посоветуйте, пожалуйста где я допустил ошибку?
С Текловским Open Api работаю уже несколько лет, в данный момент пишу плагин для работы с Tekla Analysis.
Столкнулся со следующей проблемой - вытягиваю из модели AnalysisPart, далее фрагмент кода (TSA заменил Tekla::Structures::Analysis для упрощения):
TSA::Analysis^ _analysis = gcnew TSA::Analysis();
TSA::AnalysisObjectSelector^ _analysisObjectSelector = _analysis->GetAnalysisObjectSelector();
TSA::AnalysisObjectEnumerator^ analysisObjectEnumerator =
_analysisObjectSelector->GetAllObjectsWithType(TSA::AnalysisObject::AnalysisObjectEnum::ANALYSIS_PART, _analysisModelName);
if (analysisObjectEnumerator != nullptr)
{
for each (TSA::AnalysisPart^ nextPart in analysisObjectEnumerator)
{
nextPart->AnalysisPartBarAttributes->BarStartCondition->EccentricityMode =
TSA::AnalysisPartEnd::EccentricityModeEnum::ECCENTRICITY_MODE_MANUAL;
nextPart->AnalysisPartBarAttributes->BarStartCondition->Eccentricity->X = 1.23;
nextPart->Modify();
}
}
то-есть - перебираю каждый и устанавливаю для них определенные параметры, для упрощения понимания оставил два.
Затем, естественно каждому делаю Modify.
Странность состоит в том, что после отработки плагина в AnalysisPart данные не появляются.
Или я что-то неправильно делаю, или Текловцы API не дописали почеловечески.
Во всяком случае для физической модели я делаю нечто подобное и там данные обновляются.
Посоветуйте, пожалуйста где я допустил ошибку?
Последний раз редактировалось smonder 10 фев 2017, 01:07, всего редактировалось 1 раз.
- Danila_ZLT
- Сообщения: 603
- Регистрация: 02 окт 2012, 12:14
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
И работает данный код?
"
}
nextPart->Modify();
}"
это точно тут?
"
}
nextPart->Modify();
}"
это точно тут?
Автоматизируем хаос... Недорого...
Re: API, проблемы и решения в Tekla Structures
Вы правы, пытался упростить код и допустил опечатку.
Уже исправил в своем предыдущем сообщении, спасибо.
Уже исправил в своем предыдущем сообщении, спасибо.
Re: API, проблемы и решения в Tekla Structures
подскажите плиз как найти пересечение сегмента LineSegment с Part?
Re: API, проблемы и решения в Tekla Structures
как-то так...
Re: API, проблемы и решения в Tekla Structures
здесь пересечение с Plane и BoundingBox. Мне нужно получить массив точек пересеченик отрезка с любым объектом типа Part. Есть идея через GetSolid().GeFaceEnmerator() пробежть по всем Face. По проще варианта никто не знает?
Re: API, проблемы и решения в Tekla Structures
чем BB не устраивает?
Re: API, проблемы и решения в Tekla Structures
мне нужы точки пересечения с деталью а не с BoundingBox этой детали. Решил это так myPart.GetSolid().Intersect(point1, point2)
Re: API, проблемы и решения в Tekla Structures
Подскажите, как средствами API определить, что в Solid есть отверстие (не вырез, выходящий на край элемента). "myPart.GetSolid().Intersect(point1, point2)" отрабатывает пересечение с solid, но не учитывает отверстия, те не учитывает внутренний контур (отверстие).
Re: API, проблемы и решения в Tekla Structures
Уже разобрался со своей проблемой, описанной выше: оказывается предварительно нужно обязательно удалять модель анализаsmonder писал(а): ↑08 фев 2017, 00:47Доброго времени суток!
С Текловским Open Api работаю уже несколько лет, в данный момент пишу плагин для работы с Tekla Analysis.
Столкнулся со следующей проблемой - вытягиваю из модели AnalysisPart, далее фрагмент кода (TSA заменил Tekla::Structures::Analysis для упрощения):
TSA::Analysis^ _analysis = gcnew TSA::Analysis();
TSA::AnalysisObjectSelector^ _analysisObjectSelector = _analysis->GetAnalysisObjectSelector();
TSA::AnalysisObjectEnumerator^ analysisObjectEnumerator =
_analysisObjectSelector->GetAllObjectsWithType(TSA::AnalysisObject::AnalysisObjectEnum::ANALYSIS_PART, _analysisModelName);
if (analysisObjectEnumerator != nullptr)
{
for each (TSA::AnalysisPart^ nextPart in analysisObjectEnumerator)
{
nextPart->AnalysisPartBarAttributes->BarStartCondition->EccentricityMode =
TSA::AnalysisPartEnd::EccentricityModeEnum::ECCENTRICITY_MODE_MANUAL;
nextPart->AnalysisPartBarAttributes->BarStartCondition->Eccentricity->X = 1.23;
nextPart->Modify();
}
}
то-есть - перебираю каждый и устанавливаю для них определенные параметры, для упрощения понимания оставил два.
Затем, естественно каждому делаю Modify.
Странность состоит в том, что после отработки плагина в AnalysisPart данные не появляются.
Или я что-то неправильно делаю, или Текловцы API не дописали почеловечески.
Во всяком случае для физической модели я делаю нечто подобное и там данные обновляются.
Посоветуйте, пожалуйста где я допустил ошибку?
String^ analysisModelName = _analysisModel->AnalysisModelName;
String^ analysisEngineName = _analysisModel->AnalysisEngine;
_analysisModel->Delete();
и затем создать новую с таким-же именем и необходимыми параметрами (сохранив их предварительно)
_analysisModel = gcnew Tekla::Structures::Analysis::AnalysisModel();
_analysisModel->AnalysisModelName = analysisModelName;
_analysisModel->AnalysisEngine = analysisEngineName;
_analysisModel->AnalysisObjectType = Tekla::Structures::Analysis::AnalysisObject::AnalysisObjectEnum::ANALYSIS_MODEL;
_analysisModel->MemberAxislocation = Tekla::Structures::Analysis::AnalysisModel::AxisLocationEnum::REFERENCE_AXIS;
_analysisModel->Insert();
теперь данные в AnalysisPart появляются стабильно.
Re: API, проблемы и решения в Tekla Structures
подскажите пожалуйста, есть ли возможность создать
несколько кнопок на панели инструментов для одного плагина (или макроса) с вызовом разных его функций?
несколько кнопок на панели инструментов для одного плагина (или макроса) с вызовом разных его функций?
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
- Сообщения: 8
- Регистрация: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Буду рад вашей помощи.
Есть простой макрос подтягивания стен/колонн к плите перекрытия. Всё отлажено и всё работает.
Захотелось закинуть код в плагин. Но появилось одно, но! Как сделать простой независимый плагин, т.е. чтобы форма открывалась, можно было выделить элементы и выполнить действия над ними, но плагин в модели не создавался (аналог exe приложения)
Поковырял свойство [InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)] - оно не позволяет выделить элементы в модели (могу ошибаться)
Может быть есть мысли по этому поводу, какие свойства плагина ещё можно посмотреть? Или делать exe. и вызывать его через макрос?
Есть простой макрос подтягивания стен/колонн к плите перекрытия. Всё отлажено и всё работает.
Захотелось закинуть код в плагин. Но появилось одно, но! Как сделать простой независимый плагин, т.е. чтобы форма открывалась, можно было выделить элементы и выполнить действия над ними, но плагин в модели не создавался (аналог exe приложения)
Поковырял свойство [InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)] - оно не позволяет выделить элементы в модели (могу ошибаться)
Может быть есть мысли по этому поводу, какие свойства плагина ещё можно посмотреть? Или делать exe. и вызывать его через макрос?
Re: API, проблемы и решения в Tekla Structures
[InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)]
public override List<InputDefinition> DefineInput()
{
return new List<InputDefinition>();
}
public override bool Run(List<InputDefinition> Input)
{
try
{
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return true;
}
На форму можно положить любые кнопки и обработчики для них сделать. Будет работать как приложение
public override List<InputDefinition> DefineInput()
{
return new List<InputDefinition>();
}
public override bool Run(List<InputDefinition> Input)
{
try
{
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return true;
}
На форму можно положить любые кнопки и обработчики для них сделать. Будет работать как приложение
-
- Сообщения: 8
- Регистрация: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
CuPo>I<a, спасибо всё получилось. Теперь всё ок!
-
- Сообщения: 8
- Регистрация: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Ещё один небольшой вопрос! Может кто-нибудь знает, как можно достучаться до revision handling (https://yadi.sk/i/n6X6pRJG3RhCcF) для каждого чертежа? В api в принципе не нашёл упоминания о revision для чертежей. Или это является разновидностью атрибутов чертежа, которые каким-то хитрым способом можно получить?
-
- Сообщения: 2
- Регистрация: 08 май 2018, 13:21
Re: API, проблемы и решения в Tekla Structures
Добрый день! Подскажите, пожалуйста, пытаюсь вызвать плагин-компонент из другого плагина. Вот код вставки:
if (assembly_column_l.GetMainPart() != null)
{
Component component = new Component();
component.Name = this._ComponentColumn;
component.Number = -10000;
ComponentInput componentInput = new ComponentInput();
componentInput.AddInputObject(assembly_column_l.GetMainPart());
component.SetComponentInput(componentInput);
component.LoadAttributesFromFile("standard");
if (!component.Insert())
{
MessageBox.Show("Failed");
}
}
Все время вылетает ошибка "Failed", т.е. Insert не проходит. Не могу понять в чем может быть проблема, возможно кто-то сталкивался с подобным.
Код из первого плагина (того, который вставляем):
public override List<InputDefinition> DefineInput()
{
List<PluginBase.InputDefinition> ColumnList = new List<PluginBase.InputDefinition>();
if (this._model.GetConnectionStatus())
{
Picker picker = new Picker();
Tekla.Structures.Model.ModelObject column = (Tekla.Structures.Model.ModelObject)picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "Укажите колонну");
PluginBase.InputDefinition item = new PluginBase.InputDefinition(column.Identifier);
ColumnList.Add(item);
}
return ColumnList;
}
if (assembly_column_l.GetMainPart() != null)
{
Component component = new Component();
component.Name = this._ComponentColumn;
component.Number = -10000;
ComponentInput componentInput = new ComponentInput();
componentInput.AddInputObject(assembly_column_l.GetMainPart());
component.SetComponentInput(componentInput);
component.LoadAttributesFromFile("standard");
if (!component.Insert())
{
MessageBox.Show("Failed");
}
}
Все время вылетает ошибка "Failed", т.е. Insert не проходит. Не могу понять в чем может быть проблема, возможно кто-то сталкивался с подобным.
Код из первого плагина (того, который вставляем):
public override List<InputDefinition> DefineInput()
{
List<PluginBase.InputDefinition> ColumnList = new List<PluginBase.InputDefinition>();
if (this._model.GetConnectionStatus())
{
Picker picker = new Picker();
Tekla.Structures.Model.ModelObject column = (Tekla.Structures.Model.ModelObject)picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "Укажите колонну");
PluginBase.InputDefinition item = new PluginBase.InputDefinition(column.Identifier);
ColumnList.Add(item);
}
return ColumnList;
}
-
- Сообщения: 1
- Регистрация: 04 июл 2018, 16:40
Re: API, проблемы и решения в Tekla Structures
Здравствуйте,столкнулся с проблемой отладки плагина.
Когда пробую сделать attach to process, процесс Tekla Structures убивается.Пробовал разные настройки.
Поставил в коде Debugger.Launch() и Debugger.Break(), для Just in time debug , но проблема остается.
Прочитал,что раннее в этой теме была схожая ситуация,но она так и не решилась и хоть что-то писалось в output.
Буду благодарен за любую помощь.
Когда пробую сделать attach to process, процесс Tekla Structures убивается.Пробовал разные настройки.
Поставил в коде Debugger.Launch() и Debugger.Break(), для Just in time debug , но проблема остается.
Прочитал,что раннее в этой теме была схожая ситуация,но она так и не решилась и хоть что-то писалось в output.
Буду благодарен за любую помощь.
-
- Сообщения: 8
- Регистрация: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
dobrzhanskyi. В принципе никаких проблем с отладкой не возникает. Если бы скинули свой плагин, я бы глянул исходный код. Только так можно выцепить проблему. Если это ещё актуально.
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подскажите как с помощью API включить/отключить привязки в чертеже? Ну или хотябы получить состояние привязок. В Tekla.Structures.DrawingInternal есть
Больше ничего не нашел.
Задача в чертеже с помощью Picker получить свободную точку так чтоб пользователь не включал привязку Free point
Код: Выделить всё
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct dotGrSnapSettings_t
{
public int ReferencePoints;
public int GeometryPoints;
public int EndPoints;
public int CenterPoints;
public int MidPoints;
public int Intersections;
public int Perpendicular;
public int Near;
public int Extension;
public int Lines;
public int Free;
public int Points;
public int Grid;
}
Задача в чертеже с помощью Picker получить свободную точку так чтоб пользователь не включал привязку Free point
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
dobrzhanskyi я создавал отдельный проект с точкой входа чтоб постоянно не перезагружать теклу для отладки. InputDefinition создавал специально для отладки, в каждом плагине создавал метод start() изапускал его из приложения для отладки. А в методе run всего одна строчка start();
Re: API, проблемы и решения в Tekla Structures
Добрый день!
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так
:
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так

Код: Выделить всё
Tekla.Structures.Model.Operations.Operation.MoveObject(object, new Vector(1000, 0, 0));
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подсажите как получить толщину головки болта?
Re: API, проблемы и решения в Tekla Structures
а для чего?
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
а зачем?)
вот так, например, можно (только эта падлюка "хвостик" не видит. Но его можно вытащить из каталога болтов для конкретного болта):
Код: Выделить всё
try
{
model = new Model();
if (model.GetConnectionStatus())
{
Tekla.Structures.Model.UI.ModelObjectSelector selector = new Tekla.Structures.Model.UI.ModelObjectSelector();
ModelObjectEnumerator SelectBlock = selector.GetSelectedObjects();
SelectBlock.SelectInstances = false;
if (SelectBlock.GetSize() > 0)
{
while (SelectBlock.MoveNext())
{
if (SelectBlock.Current is BoltGroup)
{
BoltGroup boltGroup = SelectBlock.Current as BoltGroup;
boltGroup.Select();
CoordinateSystem coordinateSystem = boltGroup.GetCoordinateSystem();
//cs_net_lib.UI.DrawPlane(coordinateSystem);
ArrayList positionsAL = boltGroup.BoltPositions;
List<Point> positions = positionsAL.Cast<Point>().ToList();
Point firstBoltPoint = positions[0];
//GraphDrawer.graphicsDrawer.DrawText(firstBoltPoint, "firstBoltPoint", GraphDrawer.black);
Vector zVector = coordinateSystem.AxisX.Cross(coordinateSystem.AxisY);
double normalize = 1000.0;
zVector.Normalize(1000);
Point ls1 = new Point(firstBoltPoint.X, firstBoltPoint.Y, firstBoltPoint.Z);
ls1.Translate(zVector.X, zVector.Y, zVector.Z);
zVector.Normalize(-normalize);
Point ls2 = new Point(firstBoltPoint.X, firstBoltPoint.Y, firstBoltPoint.Z);
ls2.Translate(zVector.X, zVector.Y, zVector.Z);
LineSegment lineSegment = new LineSegment(ls1, ls2);
GraphDrawer.graphicsDrawer.DrawText(ls1, "ls1", GraphDrawer.black);
GraphDrawer.graphicsDrawer.DrawText(ls2, "ls2", GraphDrawer.black);
ArrayList intersectPointsAL = boltGroup.GetSolid(true).Intersect(lineSegment);
List<Point> intersectPoints = intersectPointsAL.Cast<Point>().ToList();
for (int i = 0; i < intersectPoints.Count; i++)
{
GraphDrawer.graphicsDrawer.DrawText(intersectPoints[i], "Т." + i.ToString(), GraphDrawer.black);
}
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Нужно для простановки размеров на чертеже. Через пересечение с солидом я тоже так думал, но проблема если нет болта - только отверстие, то в чертеже линия болта рисутся на расстоянии толщины головки болта от первого пересечения с деталью а в другую сторону на 20мм от последнего пересечения с деталью. А без болта нет и солида для определения толщины головки болта) У меня хвостик видит. Думаю у тебя не хватает линии пересечения LineSegment lineSegment = new LineSegment(ls1, ls2); или ручки болтов далеко находятся. Вытянуть из каталога тощину головки болта без экспорта каталога, а потом его конвертирования c json в object я не нашел как это сделать. Если подскажешь как, то буду благодарен)CuPo>I<a писал(а): ↑31 июл 2018, 06:15а зачем?)
вот так, например, можно (только эта падлюка "хвостик" не видит. Но его можно вытащить из каталога болтов для конкретного болта):Код: Выделить всё
try { model = new Model(); if (model.GetConnectionStatus()) { Tekla.Structures.Model.UI.ModelObjectSelector selector = new Tekla.Structures.Model.UI.ModelObjectSelector(); ModelObjectEnumerator SelectBlock = selector.GetSelectedObjects(); SelectBlock.SelectInstances = false; if (SelectBlock.GetSize() > 0) { while (SelectBlock.MoveNext()) { if (SelectBlock.Current is BoltGroup) { BoltGroup boltGroup = SelectBlock.Current as BoltGroup; boltGroup.Select(); CoordinateSystem coordinateSystem = boltGroup.GetCoordinateSystem(); //cs_net_lib.UI.DrawPlane(coordinateSystem); ArrayList positionsAL = boltGroup.BoltPositions; List<Point> positions = positionsAL.Cast<Point>().ToList(); Point firstBoltPoint = positions[0]; //GraphDrawer.graphicsDrawer.DrawText(firstBoltPoint, "firstBoltPoint", GraphDrawer.black); Vector zVector = coordinateSystem.AxisX.Cross(coordinateSystem.AxisY); double normalize = 1000.0; zVector.Normalize(1000); Point ls1 = new Point(firstBoltPoint.X, firstBoltPoint.Y, firstBoltPoint.Z); ls1.Translate(zVector.X, zVector.Y, zVector.Z); zVector.Normalize(-normalize); Point ls2 = new Point(firstBoltPoint.X, firstBoltPoint.Y, firstBoltPoint.Z); ls2.Translate(zVector.X, zVector.Y, zVector.Z); LineSegment lineSegment = new LineSegment(ls1, ls2); GraphDrawer.graphicsDrawer.DrawText(ls1, "ls1", GraphDrawer.black); GraphDrawer.graphicsDrawer.DrawText(ls2, "ls2", GraphDrawer.black); ArrayList intersectPointsAL = boltGroup.GetSolid(true).Intersect(lineSegment); List<Point> intersectPoints = intersectPointsAL.Cast<Point>().ToList(); for (int i = 0; i < intersectPoints.Count; i++) { GraphDrawer.graphicsDrawer.DrawText(intersectPoints[i], "Т." + i.ToString(), GraphDrawer.black); } } } } } } catch (Exception ex) { MessageBox.Show(ex.ToString()); }
Re: API, проблемы и решения в Tekla Structures
"У меня хвостик видит"
Какая текла?
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал
В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
Какая текла?
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал
В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
2016i
Часто бывает что приходится образмеривать отверстия когда они находятся не в плане а как показана на скриншоте. Можно было бы просто размер ставить в пересечение болта с деталью но тогда линия размера будет закрывать ось болта частично, По этому хочу найти точки болтов на чертеже. но они не соответствуют этим же точкам в моделию В чертеже не учитывается шайба под болтом.
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
Re: API, проблемы и решения в Tekla Structures
Попробуйте: Tekla.Structures.Model.Operations.Operation.ObjectMatchesToFilter Method (ModelObject, FilterExpression)Vitalii_work писал(а): ↑08 авг 2018, 14:00Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Спасибо!meart писал(а): ↑08 авг 2018, 14:13Попробуйте: Tekla.Structures.Model.Operations.Operation.ObjectMatchesToFilter Method (ModelObject, FilterExpression)Vitalii_work писал(а): ↑08 авг 2018, 14:00Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
Re: API, проблемы и решения в Tekla Structures
Приветствую уважаемых участников форума!
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.
Re: API, проблемы и решения в Tekla Structures
Код: Выделить всё
using TSM = Tekla.Structures.Model;
....
....
....
List<TSM.BoltGroup> GetAllBoltGroups()
{
TSM.UI.ModelObjectSelector selector = ( new TSM.Model() ).GetModelObjectSelector();
List<TSM.BoltGroup> boltGroups = new List<BoltGroup>();
foreach (TSM.ModelObject obj in selector.GetAllObjectsWithType(new Type[] {typeof(TSM.BoltGroup)}))
{
if (obj is TSM.BoltGroup)
boltGroups.Add(obj as TSM.BoltGroup);
}
return boltGroups;
}
Tuple<List<Bolt>, List<Nut>, List<Washer>> GetBoltsNutsWashers(List<TSM.BoltGroup> boltGroups)
{
List<Bolt> bolts = new List<Bolt>();
List<Nut> nuts = new List<Nut>();
List<Washer> washers = new List<Washer>();
foreach (TSM.BoltGroup b in boltGroups)
{
if (b.Bolt)
{
Bolt bolt = new Bolt()
string boltStandard = "";
b.GetReportPropperty("STANDARD", ref boltSstandard );
bolt.Standard = boltStandard;
bolts.Add(bolt);
if (b.Nut1)
{
Nut nut = new Nut();
string nut1Standard = "";
b.GetReportPropperty("NUT1.STANDARD", ref nut1Standard);
nut.Standard = nut1Standard;
nuts.Add(nut);
}
if (b.Nut2)
{
Nut nut = new Nut();
string nut2Standard = "";
b.GetReportPropperty("NUT2.STANDARD", ref nut2Standard);
nut.Standard = nut2Standard;
nuts.Add(nut);
}
}
}
return new Tuple<List<Bolt>, List<Nut>, List<Washer>>(bolts, nuts, washers);
}
public class Bolt
{
public string Standard {get; set;}
}
public class Nut
{
public string Standard {get; set;}
}
public class Wacher
{
public string Standard {get; set;}
}
Re: API, проблемы и решения в Tekla Structures
Сам перешёл на такую систему: Создаю отчёт в xml стандартными шаблонами (через редактор шаблонов), потом этот xml разбираю в коде C#. Работает намного быстрее, чем запрос свойств непосредственно с объектов модели.
Re: API, проблемы и решения в Tekla Structures
Спасибо!Montag писал(а): ↑30 авг 2018, 09:51Код: Выделить всё
using TSM = Tekla.Structures.Model; .... .... .... List<TSM.BoltGroup> GetAllBoltGroups() { TSM.UI.ModelObjectSelector selector = ( new TSM.Model() ).GetModelObjectSelector(); List<TSM.BoltGroup> boltGroups = new List<BoltGroup>(); foreach (TSM.ModelObject obj in selector.GetAllObjectsWithType(new Type[] {typeof(TSM.BoltGroup)})) { if (obj is TSM.BoltGroup) boltGroups.Add(obj as TSM.BoltGroup); } return boltGroups; } Tuple<List<Bolt>, List<Nut>, List<Washer>> GetBoltsNutsWashers(List<TSM.BoltGroup> boltGroups) { List<Bolt> bolts = new List<Bolt>(); List<Nut> nuts = new List<Nut>(); List<Washer> washers = new List<Washer>(); foreach (TSM.BoltGroup b in boltGroups) { if (b.Bolt) { Bolt bolt = new Bolt() string boltStandard = ""; b.GetReportPropperty("STANDARD", ref boltSstandard ); bolt.Standard = boltStandard; bolts.Add(bolt); if (b.Nut1) { Nut nut = new Nut(); string nut1Standard = ""; b.GetReportPropperty("NUT1.STANDARD", ref nut1Standard); nut.Standard = nut1Standard; nuts.Add(nut); } if (b.Nut2) { Nut nut = new Nut(); string nut2Standard = ""; b.GetReportPropperty("NUT2.STANDARD", ref nut2Standard); nut.Standard = nut2Standard; nuts.Add(nut); } } } return new Tuple<List<Bolt>, List<Nut>, List<Washer>>(bolts, nuts, washers); } public class Bolt { public string Standard {get; set;} } public class Nut { public string Standard {get; set;} } public class Wacher { public string Standard {get; set;} }
-
- Сообщения: 8
- Регистрация: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Может быть кто-нибудь знает, как получить выделенные в модели точки?
Выделенные объекты получаю через Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(), а как можно получить, к примеру, выделенные точки контурной пластины?
Выделенные объекты получаю через Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(), а как можно получить, к примеру, выделенные точки контурной пластины?
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Помогите решить проблему.
Есть форма наследуемая от ApplicationFormBase. На форме есть TextBox с AttributeTypeName = Distance. Как заставить этот TextBox вести себя также как и в плагинах? Чтоб была валидация введенного значения и както привязать его к свойству с типом Distance.
Есть форма наследуемая от ApplicationFormBase. На форме есть TextBox с AttributeTypeName = Distance. Как заставить этот TextBox вести себя также как и в плагинах? Чтоб была валидация введенного значения и както привязать его к свойству с типом Distance.
Re: API, проблемы и решения в Tekla Structures
Пытаюсь посредством АПИ вставить в модель компонент-плагин сварной балки (PEB Дет. перем. сечения S94). В нужных координатах вставляются точки, но компонент не вставляется. Чего не хватает? Следующий код:
using TSM=Tekla.Structures.Model;
TSM.ComponentInput componentInput = new TSM.ComponentInput();
componentInput.AddTwoInputPositions(new TSG.Point(0,0,0), new TSG.Point(1000,0,0));
TSM.Component component = new TSM.Component(componentInput) { Name = "PEB Дет. перем. сечения", Number = 94 };
component.LoadAttributesFromFile("standard");
component.Insert();
using TSM=Tekla.Structures.Model;
TSM.ComponentInput componentInput = new TSM.ComponentInput();
componentInput.AddTwoInputPositions(new TSG.Point(0,0,0), new TSG.Point(1000,0,0));
TSM.Component component = new TSM.Component(componentInput) { Name = "PEB Дет. перем. сечения", Number = 94 };
component.LoadAttributesFromFile("standard");
component.Insert();
Re: API, проблемы и решения в Tekla Structures
Код: Выделить всё
TSM.Model model = new TSM.Model();
model.CommitChanges();
Re: API, проблемы и решения в Tekla Structures
Нет, нет) это всё имеется. Я просто выдрал кусок кода из программы, которая по входящим координатам расставляет балки в модели. Прокатные балки расставляются. Сварные я хотел ставить этим компонентом, но не получается. Ещё пробовал ставить их самодельным компонентом типа деталь (две точки) точно таким же кодом. Компонент встает, но на первую точку и вертикально, как-будто игнорирует вторую координату. Не могу найти примеры кода именно вот с такими "двухточечными компонентами".TSM.Model model = new TSM.Model();
model.CommitChanges();
Re: API, проблемы и решения в Tekla Structures
У вас не верное название и номер вставляемого компонента.

Код: Выделить всё
TSM.Component component = new TSM.Component(componentInput) { Name = "PEB Дет. перем. сечения (S94)", Number = 1000094};
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
Re: API, проблемы и решения в Tekla Structures
Спасибо, теперь сработал компонент!У вас не верное название и номер вставляемого компонента.
Re: API, проблемы и решения в Tekla Structures
Всем привет! Не знает кто есть ли в Tеклы в АPI событие, которое срабатывает на ее закрытие, или оповещает о его закрытии? Я что-то ищу по документации и найти не могу. (мне нужно, реагировать в плагине на закрытие Теклы.)
Re: API, проблемы и решения в Tekla Structures
Код: Выделить всё
private Tekla.Structures.Model.Events _events = new Tekla.Structures.Model.Events();
public void RegisterEvent()
{
_events.TeklaStructuresExit += OnTeklaStructuresExit;
_events.Register();
}
public void OnTeklaStructuresExit()
{
}
-
- Сообщения: 2
- Регистрация: 14 ноя 2018, 00:00
Re: API, проблемы и решения в Tekla Structures
Hi,
How can I read the name "VC #" in the connection form I have shown in the image. I'd appreciate it if you could help. Good luck with.
Sorry for the bad english.
How can I read the name "VC #" in the connection form I have shown in the image. I'd appreciate it if you could help. Good luck with.
Sorry for the bad english.
Re: API, проблемы и решения в Tekla Structures
do you want to get name of fileattribute applied to connection? did I understand you correctly?kanber_kav писал(а): ↑14 ноя 2018, 00:06Hi,
How can I read the name "VC #" in the connection form I have shown in the image. I'd appreciate it if you could help. Good luck with.
Sorry for the bad english.
Re: API, проблемы и решения в Tekla Structures
Подскажите, а есть ли возможность выбрать в модели сборку по её имени? Пока у меня получается только перебирать все объекты и проверять совпадает ли их имя с необходимым, но в большой модели это, конечно, делается очень медленно. Вариант с предварительным созданием фильтров выбора не подходит.
Re: API, проблемы и решения в Tekla Structures
проще всего через FilterExpressionIgor писал(а): ↑18 ноя 2018, 18:34Подскажите, а есть ли возможность выбрать в модели сборку по её имени? Пока у меня получается только перебирать все объекты и проверять совпадает ли их имя с необходимым, но в большой модели это, конечно, делается очень медленно. Вариант с предварительным созданием фильтров выбора не подходит.
Код: Выделить всё
using TSF = Tekla.Structures.Filtering;
using TSM = Tekla.Structures.Model;
private List<TSM.Assembly> GetAssembliesByName(string name)
{
List<TSM.Assembly> assemblies = new List<TSM.Assembly>();
var selector = new TSM.Model().GetModelObjectSelector();
TSF.FilterExpression filterExpression = new TSF.BinaryFilterExpression(new TSF.Categories.AssemblyFilterExpressions.Name(), TSF.StringOperatorType.IS_EQUAL, new TSF.StringConstantFilterExpression(name));
TSM.ModelObjectEnumerator e = selector.GetObjectsByFilter(filterExpression);
while (e.MoveNext())
{
if (e.Current is TSM.Assembly)
assemblies.Add(e.Current as TSM.Assembly);
}
return assemblies;
}
Re: API, проблемы и решения в Tekla Structures
Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
Re: API, проблемы и решения в Tekla Structures
Да.. есть такие приколы с кириллецей..) нужно конвертонуть в CP1251
Код: Выделить всё
private List<TSM.Assembly> GetAssembliesByName(string name)
{
List<TSM.Assembly> assemblies = new List<TSM.Assembly>();
var selector = new TSM.Model().GetModelObjectSelector();
TSF.FilterExpression filterExpression = new TSF.BinaryFilterExpression(new TSF.Categories.AssemblyFilterExpressions.Name(), TSF.StringOperatorType.IS_EQUAL, new TSF.StringConstantFilterExpression(ConvertToCP1251(name)));
TSM.ModelObjectEnumerator e = selector.GetObjectsByFilter(filterExpression);
while (e.MoveNext())
{
if (e.Current is TSM.Assembly)
assemblies.Add(e.Current as TSM.Assembly);
}
return assemblies;
}
private string ConvertToCP1251(string text)
{
Encoding utf8 = Encoding.GetEncoding("UTF-8");
Encoding win1251 = Encoding.GetEncoding("Windows-1251");
byte[] utf8Bytes = win1251.GetBytes(text);
byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes);
return win1251.GetString(win1251Bytes);
}
Re: API, проблемы и решения в Tekla Structures
Возможно ли как-то перебрать все сварные швы сборки? Я думал это делается легко через Assembly.GetChildren(), но он вообще ничего не возвращает.
-
- Сообщения: 2
- Регистрация: 14 ноя 2018, 00:00
Re: API, проблемы и решения в Tekla Structures
Yes.Montag писал(а): ↑15 ноя 2018, 13:01do you want to get name of fileattribute applied to connection? did I understand you correctly?kanber_kav писал(а): ↑14 ноя 2018, 00:06Hi,
How can I read the name "VC #" in the connection form I have shown in the image. I'd appreciate it if you could help. Good luck with.
Sorry for the bad english.
I want to get connection names. For use in other connections.
Re: API, проблемы и решения в Tekla Structures
Подскажите как решить такую проблему: Пишу плагин для чертежей , на форме есть combobox с такими настройками
его поле в StructuresData:
при запуске плагина если выбрать "тип0" в data.cb__weld_type поподает число -2147483648 (насколько я понял это мин интежер), а при выборе "тип1" и "тип2" все отлично работает в data.cb__weld_type поподает 1 и 2. Как сделать так, чтоб в data.cb__weld_type при "тип0" попадало чсло 0, а не -2147483648 ?
Код: Выделить всё
//
// cb__weld_type
//
this.structuresExtender.SetAttributeName(this.cb__weld_type, "cb__weld_type");
this.structuresExtender.SetAttributeTypeName(this.cb__weld_type, "Integer");
this.structuresExtender.SetBindPropertyName(this.cb__weld_type, "SelectedIndex");
this.cb__weld_type.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.cb__weld_type.FormattingEnabled = true;
this.cb__weld_type.Items.AddRange(new object[] {
"тип0",
"тип1",
"тип2"});
this.cb__weld_type.Location = new System.Drawing.Point(121, 107);
this.cb__weld_type.Name = "cb__weld_type";
this.cb__weld_type.Size = new System.Drawing.Size(174, 21);
this.cb__weld_type.TabIndex = 21;
Код: Выделить всё
[TSP.StructuresField("cb__weld_type")]
public int cb__weld_type;
Re: API, проблемы и решения в Tekla Structures
Сделать проверку, если <=0 присвоить 0
Re: API, проблемы и решения в Tekla Structures
Как решаете проблемы с выбором текста такого рода как Ст3сп5 и Ст3пс5 ?
После конвертации вашим методом будут выбраны оба объекта.
После конвертации вашим методом будут выбраны оба объекта.
Montag писал(а): ↑20 ноя 2018, 00:02Да.. есть такие приколы с кириллецей..) нужно конвертонуть в CP1251
Код: Выделить всё
private List<TSM.Assembly> GetAssembliesByName(string name) { List<TSM.Assembly> assemblies = new List<TSM.Assembly>(); var selector = new TSM.Model().GetModelObjectSelector(); TSF.FilterExpression filterExpression = new TSF.BinaryFilterExpression(new TSF.Categories.AssemblyFilterExpressions.Name(), TSF.StringOperatorType.IS_EQUAL, new TSF.StringConstantFilterExpression(ConvertToCP1251(name))); TSM.ModelObjectEnumerator e = selector.GetObjectsByFilter(filterExpression); while (e.MoveNext()) { if (e.Current is TSM.Assembly) assemblies.Add(e.Current as TSM.Assembly); } return assemblies; } private string ConvertToCP1251(string text) { Encoding utf8 = Encoding.GetEncoding("UTF-8"); Encoding win1251 = Encoding.GetEncoding("Windows-1251"); byte[] utf8Bytes = win1251.GetBytes(text); byte[] win1251Bytes = Encoding.Convert(utf8, win1251, utf8Bytes); return win1251.GetString(win1251Bytes); }
Re: API, проблемы и решения в Tekla Structures
Действительно, после конвертации вместо русских букв возвращаются вопросы, которые Tekla видит как любые символы. Но проблема легко решается дополнительной проверкой строки с необходимым параметром. Главное сверять строку ещё ту, которая не проходила конвертацию. Например, в модели у меня имеются две марки: пс-1 и сп-1, но следующий код выделит только необходимую:Как решаете проблемы с выбором текста такого рода как Ст3сп5 и Ст3пс5 ?
После конвертации вашим методом будут выбраны оба объекта.
Код: Выделить всё
void V(Drawing draw)
{
string markName = draw.Mark.Trim(new char[] { '[', ']' }).Replace('.', '-');
markName = ConvertToCP1251(markName);
var selector = new TSM.Model().GetModelObjectSelector();
TSF.FilterExpression filterExpression = new TSF.BinaryFilterExpression(new AssemblyFilterExpressions.PositionNumber(), TSF.StringOperatorType.IS_EQUAL, new TSF.StringConstantFilterExpression(markName));
TSM.ModelObjectEnumerator e = selector.GetObjectsByFilter(filterExpression);
while (e.MoveNext())
{
if (e.Current is TSM.Assembly)
{
string n = "";
TSM.Assembly myAss = e.Current as TSM.Assembly;
myAss.GetReportProperty("ASSEMBLY_POS", ref n);
if (n == draw.Mark.Trim(new char[] { '[', ']' }).Replace('.', '-'))//контрольная проверка
{
//тут работаем с необходимым элементом
}
}
}
}
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Здравствуйте, подскажите как можно получить координаты точек пересечения осей?
Re: API, проблемы и решения в Tekla Structures
everyDayLast писал(а): ↑12 янв 2019, 17:10Здравствуйте, подскажите как можно получить координаты точек пересечения осей?
Код: Выделить всё
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using TS = Tekla.Structures;
using TSM = Tekla.Structures.Model;
using TSG = Tekla.Structures.Geometry3d;
namespace GetGridPoints
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var picker = new TSM.UI.Picker();
var obj = picker.PickObject(TSM.UI.Picker.PickObjectEnum.PICK_ONE_OBJECT, "aa");
if (obj is TSM.Grid)
{
var points = GetGridPoints(obj as TSM.Grid);
}
}
List<TSG.Point> GetGridPoints(TSM.Grid grid)
{
var points = new List<TSG.Point>();
string xList = grid.CoordinateX;
string yList = grid.CoordinateY;
string zList = grid.CoordinateZ;
var converter = new TS.Datatype.DistanceListConverter();
var x = GetDistListToCoordList(TS.Datatype.DistanceList.Parse(xList));
var y = GetDistListToCoordList(TS.Datatype.DistanceList.Parse(yList)); ;
var z = (TS.Datatype.DistanceList.Parse(zList)).ToArray();
var origin = grid.GetCoordinateSystem().Origin;
var cs = grid.GetCoordinateSystem();
var matrix = TSG.MatrixFactory.FromCoordinateSystem(cs);
for (int i = 0; i < z.Length; i++)
{
for (int m = 0; m < y.Length; m++)
{
for (int j = 0; j < x.Length; j++)
{
TSG.Point tmp = matrix.Transform(new TSG.Point(x[j], y[m], z[i].Millimeters));
points.Add(tmp);
}
}
}
return points;
}
double[] GetDistListToCoordList(TS.Datatype.DistanceList distList)
{
List<double> list = new List<double>();
foreach (var dist in distList)
{
list.Add((list.Count > 0 ? list.Last() : 0) + dist.Millimeters);
}
return list.ToArray();
}
}
}
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
да, я уже написал, но у тебя покрасивше будет, спасибо!
я просто думал, что существует готовая команда )
я просто думал, что существует готовая команда )
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Разбираюсь с плагином армирования, возникли вопросы:
1. внедряем компонент №***, а где можно посмотреть списки всех компонентов, или хотя бы узнать уникальный номер конкретного компонента?
component1.Number = 30000070; // unique number for "longitudinal rebars" component
2. присваиваем атрибутам компонента нужные значения, а где можно посмотреть список этих атрибутов компонентов? например я ищу диаметр, он толи "cc_diameter", а может "cc_diam" итд...
component1.SetAttribute("cc_bottom", 45.0); // cover thickness at bottom
-----
на второй вопрос нашел ответ на cadsupperte: можно настроить компонент, сохранить настройки в файл, после чего найти папку attributes, с текстовым файлом, в котором должны быть имена атрибутов.
первый вопрос все еще актуален ))
1. внедряем компонент №***, а где можно посмотреть списки всех компонентов, или хотя бы узнать уникальный номер конкретного компонента?
component1.Number = 30000070; // unique number for "longitudinal rebars" component
2. присваиваем атрибутам компонента нужные значения, а где можно посмотреть список этих атрибутов компонентов? например я ищу диаметр, он толи "cc_diameter", а может "cc_diam" итд...
component1.SetAttribute("cc_bottom", 45.0); // cover thickness at bottom
-----
на второй вопрос нашел ответ на cadsupperte: можно настроить компонент, сохранить настройки в файл, после чего найти папку attributes, с текстовым файлом, в котором должны быть имена атрибутов.
первый вопрос все еще актуален ))
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подскажите как с помощью API узнать/изменить положение метки вида.
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Не очень разнообразный выбор вариантов
MyView.Attributes.LabelPositionHorizontal = Tekla.Structures.Drawing.View.HorizontalLabelPosition.CenteredByViewRestrictionBox;
MyView.Attributes.LabelPositionVertical = Tekla.Structures.Drawing.View.VerticalLabelPosition.Bottom;
MyView.Attributes.LabelPositionHorizontal = Tekla.Structures.Drawing.View.HorizontalLabelPosition.CenteredByViewRestrictionBox;
MyView.Attributes.LabelPositionVertical = Tekla.Structures.Drawing.View.VerticalLabelPosition.Bottom;
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подскажите как получить еденицы измерения длины, угла и прочего из настроек с помощью API
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Как запустить макрос из любой директории а не только из той что прописана в XS_MACRO_DIRECTORY?
Например чот-то типа такого
но RunMacro работает только с относительным путем.
Например чот-то типа такого
Код: Выделить всё
Tekla.Structures.Model.Operation.RunMacro(@"D:\my-macros.cs");
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017
Re: API, проблемы и решения в Tekla Structures
попробуй вырубить интернет. если поможет то это из-за пиратской теклы. можно в антивируснике запретить ей отправлять/принимать пакеты.everyDayLast писал(а): ↑24 фев 2019, 10:04Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Спасибо, но не то ((
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Плагин после указания главной и второстепенной детали ставит систему координат в начало главной детали.
Как заставить PluginBase не менять систему координат? Или возвращать ее обратно.
Как заставить PluginBase не менять систему координат? Или возвращать ее обратно.
-
- Сообщения: 11
- Регистрация: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Может быть так?
Код: Выделить всё
// first store current work plane
TransformationPlane currentPlane = myModel.GetWorkPlaneHandler().GetCurrentTransformationPlane();
---
тут где-то плагин изменяет систему координат
---
myModel.GetWorkPlaneHandler().SetCurrentTransformationPlane(currentPlane);
-
- Сообщения: 26
- Регистрация: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Проблема была в том что в методе Run не надо писть model.CommitChanges . Если написать model.CommitChanges() то почемуто значек системы координат перерисовывается в первую точку главной детали но сама система координат не меняется. В общем просто удалил model.CommitChanges и все заработало норм.everyDayLast писал(а): ↑04 мар 2019, 12:29Может быть так?Код: Выделить всё
// first store current work plane TransformationPlane currentPlane = myModel.GetWorkPlaneHandler().GetCurrentTransformationPlane(); --- тут где-то плагин изменяет систему координат --- myModel.GetWorkPlaneHandler().SetCurrentTransformationPlane(currentPlane);
Re: API, проблемы и решения в Tekla Structures
Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
Re: API, проблемы и решения в Tekla Structures
BoundingBox это объём, и выбираются объекты которые в него попадают. Можно попробовать указать MaxPoint и MinPoint для BoundingBox'а в одной точке, получится или нет, не знаю. Но если и нет, то полученные объекты, даже те что рядом, можно проверить на соответствие их StartPoint и EndPoint указанной раннее точке Picker'ом.Mikluha писал(а): ↑26 май 2021, 15:51Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
Re: API, проблемы и решения в Tekla Structures
graysea, спасибо. Примерно так и сделал, хотя изначально объектов он выбирает много всяких лишних.
Еще вопрос. Научился выгружать через API нужный мне хитрый шейп в файл .tsc
А как его редактировать-то? Через что? Ну или конвертировать хотя бы во что-нибудь туда-обратно.
Подскажите, люди добрые.
Еще вопрос. Научился выгружать через API нужный мне хитрый шейп в файл .tsc
А как его редактировать-то? Через что? Ну или конвертировать хотя бы во что-нибудь туда-обратно.
Подскажите, люди добрые.
-
- Сообщения: 1
- Регистрация: 13 сен 2023, 21:30
Re: API, проблемы и решения в Tekla Structures
Доброго времени суток, уважаемые колеги. Может мне кто то что то подскажет. Мучаюсь с одной проблемой.
У меня стоит задача печатать чертежи сборок в png, pdf, а так же экспортировать в dwg и dxf файлы. В принципе с png и pdf Всё достаточно просто:
Вопрос. Могу ли я подобным образом получить dwg и dxf? Я так понимаю, что подобное я могу сделать только экспортом. Но вот незадача. В классе DrawingHandler есть только методы. связанные с PrintDrawing, и совсем нет что то типа ExportDrawing. Неужели в библиотеке не предусмотрели такую потребность?(( Может кто то сталкивался?
У меня стоит задача печатать чертежи сборок в png, pdf, а так же экспортировать в dwg и dxf файлы. В принципе с png и pdf Всё достаточно просто:
Код: Выделить всё
Model model = new Model();
Tekla.Structures.Drawing.DrawingHandler drawingHandler = new Tekla.Structures.Drawing.DrawingHandler();
if (drawingHandler.UpdateDrawing(assemblyDrawing))
{
if (drawingHandler.SetActiveDrawing(assemblyDrawing, false))
{
string fileName = assemblyDrawing.GetPlotFileName(false);
string modelPath = model.GetInfo().ModelPath;
string plotFilesPDFPath = Path.Combine(modelPath, "PlotFiles\\PDF");
string fullFilePath = Path.Combine(plotFilesPDFPath, fileName + ".pdf");
Tekla.Structures.Drawing.DPMPrinterAttributes printAttributes = new Tekla.Structures.Drawing.DPMPrinterAttributes();
printAttributes.OutputFileName = fullFilePath;
printAttributes.OutputType = Tekla.Structures.Drawing.DotPrintOutputType.PDF;
if (drawingHandler.PrintDrawing(assemblyDrawing, printAttributes, fullFilePath))
{
if (File.Exists(fullFilePath))
return new CreatedDrawingFile() { Status = PrintStatus.Ok, FileName = fullFilePath };
else
return new CreatedDrawingFile() { Status = PrintStatus.NotPrinted, ErrorMessage = "Failed to find the created file in the print process" };
}
else
return new CreatedDrawingFile() { Status = PrintStatus.NotPrinted, ErrorMessage = "Failed to print drawing to PDF file" };
}
else
return new CreatedDrawingFile() { Status = PrintStatus.NotPrinted, ErrorMessage = "The drawing could not be made active before creating a PDF file" };
}
phpbb3 styles
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость