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" };
}
Re: API, проблемы и решения в Tekla Structures
Речь идет про знание возможностей апи.
Есть хорошее место для хранения связей между деталями внутри модели - называется сборка "Assembly", причем штатными встроенными средствами, без атрибутов и прочего такого. Но это применяется для деталей, которые в неком одном пространственном месте собираются в некое единое целое.
Предположим, есть модель, в которой тыщи деталей и сборок.
А есть ли нечто подобное сборкам, встроенное, чтобы пользователь мог сам логически "сцепить" (в некую подобную сборке структуру) пару-тройку отверстий, которые друг от друга в модели далеко и друг с другом не связаны? Так, чтобы:
1) вначале тык отверстие и еще одно и еще одно, а программа по ним создала некую связь, структуру подобную сборке. И сохранила эту структуру в модели.
2) на другой день пользователь открыл модель, тык отверстие, а программа по нему нашла два других (логически связанных пользователем ранее).
Есть ли такие встроенные средства? Без атрибутов со ссылками, без внешних хранишищ айди. Попроще чтобы, как "сборка".
Есть хорошее место для хранения связей между деталями внутри модели - называется сборка "Assembly", причем штатными встроенными средствами, без атрибутов и прочего такого. Но это применяется для деталей, которые в неком одном пространственном месте собираются в некое единое целое.
Предположим, есть модель, в которой тыщи деталей и сборок.
А есть ли нечто подобное сборкам, встроенное, чтобы пользователь мог сам логически "сцепить" (в некую подобную сборке структуру) пару-тройку отверстий, которые друг от друга в модели далеко и друг с другом не связаны? Так, чтобы:
1) вначале тык отверстие и еще одно и еще одно, а программа по ним создала некую связь, структуру подобную сборке. И сохранила эту структуру в модели.
2) на другой день пользователь открыл модель, тык отверстие, а программа по нему нашла два других (логически связанных пользователем ранее).
Есть ли такие встроенные средства? Без атрибутов со ссылками, без внешних хранишищ айди. Попроще чтобы, как "сборка".
Re: API, проблемы и решения в Tekla Structures
Добавлю, что таких структур в модели нужно, чтобы было несколько, поэтому варианты "прописать у всех 3 дырок в атрибуте цифру 3" или "в атрибуте одной дырки прописать id другой дырки и так далее" - не пройдут.
phpbb3 styles
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей