API, проблемы и решения в Tekla Structures
-
AndrejjerdnA
- Сообщения: 103
- Зарегистрирован: 18 сен 2014, 07:20
Re: API, проблемы и решения в Tekla Structures
Никто не сможет подсказать как получить вот эти значения? (см. выделенное на приложенном файле) Что-то никак не соображу...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
smonder
- Сообщения: 11
- Зарегистрирован: 11 июл 2012, 01:27
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();
}"
это точно тут?
Автоматизируем хаос... Недорого...
-
smonder
- Сообщения: 11
- Зарегистрирован: 11 июл 2012, 01:27
Re: API, проблемы и решения в Tekla Structures
Вы правы, пытался упростить код и допустил опечатку.
Уже исправил в своем предыдущем сообщении, спасибо.
Уже исправил в своем предыдущем сообщении, спасибо.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
подскажите плиз как найти пересечение сегмента LineSegment с Part?
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
как-то так...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
здесь пересечение с Plane и BoundingBox. Мне нужно получить массив точек пересеченик отрезка с любым объектом типа Part. Есть идея через GetSolid().GeFaceEnmerator() пробежть по всем Face. По проще варианта никто не знает?
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
чем BB не устраивает?
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
мне нужы точки пересечения с деталью а не с BoundingBox этой детали. Решил это так myPart.GetSolid().Intersect(point1, point2)
-
sergtsw
- Сообщения: 1
- Зарегистрирован: 26 фев 2017, 20:26
Re: API, проблемы и решения в Tekla Structures
Подскажите, как средствами API определить, что в Solid есть отверстие (не вырез, выходящий на край элемента). "myPart.GetSolid().Intersect(point1, point2)" отрабатывает пересечение с solid, но не учитывает отверстия, те не учитывает внутренний контур (отверстие).
-
smonder
- Сообщения: 11
- Зарегистрирован: 11 июл 2012, 01:27
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 появляются стабильно.
-
meart
- Сообщения: 494
- Зарегистрирован: 04 мар 2013, 18:09
Re: API, проблемы и решения в Tekla Structures
подскажите пожалуйста, есть ли возможность создать
несколько кнопок на панели инструментов для одного плагина (или макроса) с вызовом разных его функций?
несколько кнопок на панели инструментов для одного плагина (или макроса) с вызовом разных его функций?
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
Pavel Karpovich
- Сообщения: 8
- Зарегистрирован: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Буду рад вашей помощи.
Есть простой макрос подтягивания стен/колонн к плите перекрытия. Всё отлажено и всё работает.
Захотелось закинуть код в плагин. Но появилось одно, но! Как сделать простой независимый плагин, т.е. чтобы форма открывалась, можно было выделить элементы и выполнить действия над ними, но плагин в модели не создавался (аналог exe приложения)
Поковырял свойство [InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)] - оно не позволяет выделить элементы в модели (могу ошибаться)
Может быть есть мысли по этому поводу, какие свойства плагина ещё можно посмотреть? Или делать exe. и вызывать его через макрос?
Есть простой макрос подтягивания стен/колонн к плите перекрытия. Всё отлажено и всё работает.
Захотелось закинуть код в плагин. Но появилось одно, но! Как сделать простой независимый плагин, т.е. чтобы форма открывалась, можно было выделить элементы и выполнить действия над ними, но плагин в модели не создавался (аналог exe приложения)
Поковырял свойство [InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)] - оно не позволяет выделить элементы в модели (могу ошибаться)
Может быть есть мысли по этому поводу, какие свойства плагина ещё можно посмотреть? Или делать exe. и вызывать его через макрос?
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
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;
}
На форму можно положить любые кнопки и обработчики для них сделать. Будет работать как приложение
-
Pavel Karpovich
- Сообщения: 8
- Зарегистрирован: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
CuPo>I<a, спасибо всё получилось. Теперь всё ок!
-
Pavel Karpovich
- Сообщения: 8
- Зарегистрирован: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Ещё один небольшой вопрос! Может кто-нибудь знает, как можно достучаться до revision handling (https://yadi.sk/i/n6X6pRJG3RhCcF) для каждого чертежа? В api в принципе не нашёл упоминания о revision для чертежей. Или это является разновидностью атрибутов чертежа, которые каким-то хитрым способом можно получить?
-
GerasimovJulia
- Сообщения: 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;
}
-
dobrzhanskyi
- Сообщения: 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.
Буду благодарен за любую помощь.
-
Pavel Karpovich
- Сообщения: 8
- Зарегистрирован: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
dobrzhanskyi. В принципе никаких проблем с отладкой не возникает. Если бы скинули свой плагин, я бы глянул исходный код. Только так можно выцепить проблему. Если это ещё актуально.
-
Vitalii_work
- Сообщения: 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
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
dobrzhanskyi я создавал отдельный проект с точкой входа чтоб постоянно не перезагружать теклу для отладки. InputDefinition создавал специально для отладки, в каждом плагине создавал метод start() изапускал его из приложения для отладки. А в методе run всего одна строчка start();
-
meart
- Сообщения: 494
- Зарегистрирован: 04 мар 2013, 18:09
Re: API, проблемы и решения в Tekla Structures
Добрый день!
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так
:
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так
Код: Выделить всё
Tekla.Structures.Model.Operations.Operation.MoveObject(object, new Vector(1000, 0, 0));
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Попробовал.. Действительно не перемещает. Возможно стоит свой алгоритм перемещения сборки создать.meart писал(а): 26 июл 2018, 08:14 Добрый день!
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так:
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подсажите как получить толщину головки болта?
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
а для чего?
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Нужно найти точки болта на чертеже
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
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());
}У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Vitalii_work
- Сообщения: 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()); }
У вас нет необходимых прав для просмотра вложений в этом сообщении.
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
"У меня хвостик видит"
Какая текла?
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал
В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
Какая текла?
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал
В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
2016i
Часто бывает что приходится образмеривать отверстия когда они находятся не в плане а как показана на скриншоте. Можно было бы просто размер ставить в пересечение болта с деталью но тогда линия размера будет закрывать ось болта частично, По этому хочу найти точки болтов на чертеже. но они не соответствуют этим же точкам в моделию В чертеже не учитывается шайба под болтом.CuPo>I<a писал(а): 01 авг 2018, 06:13 Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал
В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
-
meart
- Сообщения: 494
- Зарегистрирован: 04 мар 2013, 18:09
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()
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
Vitalii_work
- Сообщения: 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()
-
ainis
- Сообщения: 2
- Зарегистрирован: 06 окт 2013, 06:33
Re: API, проблемы и решения в Tekla Structures
Приветствую уважаемых участников форума!
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
ainis писал(а): 22 авг 2018, 10:15 Приветствую уважаемых участников форума!
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.
Код: Выделить всё
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;}
}
- CuPo>I<a
- Сообщения: 846
- Зарегистрирован: 26 дек 2011, 12:41
- Откуда: Златоуст
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Сам перешёл на такую систему: Создаю отчёт в xml стандартными шаблонами (через редактор шаблонов), потом этот xml разбираю в коде C#. Работает намного быстрее, чем запрос свойств непосредственно с объектов модели.
-
ainis
- Сообщения: 2
- Зарегистрирован: 06 окт 2013, 06:33
Re: API, проблемы и решения в Tekla Structures
Спасибо!Montag писал(а): 30 авг 2018, 09:51ainis писал(а): 22 авг 2018, 10:15 Приветствую уважаемых участников форума!
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.Код: Выделить всё
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;} }
-
Pavel Karpovich
- Сообщения: 8
- Зарегистрирован: 09 дек 2017, 11:47
- Откуда: Минск
- Контактная информация:
Re: API, проблемы и решения в Tekla Structures
Добрый день! Может быть кто-нибудь знает, как получить выделенные в модели точки?
Выделенные объекты получаю через Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(), а как можно получить, к примеру, выделенные точки контурной пластины?
Выделенные объекты получаю через Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(), а как можно получить, к примеру, выделенные точки контурной пластины?
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Помогите решить проблему.
Есть форма наследуемая от ApplicationFormBase. На форме есть TextBox с AttributeTypeName = Distance. Как заставить этот TextBox вести себя также как и в плагинах? Чтоб была валидация введенного значения и както привязать его к свойству с типом Distance.
Есть форма наследуемая от ApplicationFormBase. На форме есть TextBox с AttributeTypeName = Distance. Как заставить этот TextBox вести себя также как и в плагинах? Чтоб была валидация введенного значения и както привязать его к свойству с типом Distance.
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
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();
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
Igor писал(а): 23 окт 2018, 19:48 Пытаюсь посредством АПИ вставить в модель компонент-плагин сварной балки (PEB Дет. перем. сечения S94). В нужных координатах вставляются точки, но компонент не вставляется. Чего не хватает?
Код: Выделить всё
TSM.Model model = new TSM.Model();
model.CommitChanges();
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
Re: API, проблемы и решения в Tekla Structures
Нет, нет) это всё имеется. Я просто выдрал кусок кода из программы, которая по входящим координатам расставляет балки в модели. Прокатные балки расставляются. Сварные я хотел ставить этим компонентом, но не получается. Ещё пробовал ставить их самодельным компонентом типа деталь (две точки) точно таким же кодом. Компонент встает, но на первую точку и вертикально, как-будто игнорирует вторую координату. Не могу найти примеры кода именно вот с такими "двухточечными компонентами".TSM.Model model = new TSM.Model();
model.CommitChanges();
-
meart
- Сообщения: 494
- Зарегистрирован: 04 мар 2013, 18:09
Re: API, проблемы и решения в Tekla Structures
У вас не верное название и номер вставляемого компонента.Igor писал(а): 23 окт 2018, 19:48 TSM.Component component = new TSM.Component(componentInput) { Name = "PEB Дет. перем. сечения", Number = 94 };
Код: Выделить всё
TSM.Component component = new TSM.Component(componentInput) { Name = "PEB Дет. перем. сечения (S94)", Number = 1000094};
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
Re: API, проблемы и решения в Tekla Structures
Спасибо, теперь сработал компонент!У вас не верное название и номер вставляемого компонента.
-
aabilous
- Сообщения: 5
- Зарегистрирован: 18 июн 2018, 16:12
Re: API, проблемы и решения в Tekla Structures
Всем привет! Не знает кто есть ли в Tеклы в АPI событие, которое срабатывает на ее закрытие, или оповещает о его закрытии? Я что-то ищу по документации и найти не могу. (мне нужно, реагировать в плагине на закрытие Теклы.)
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
aabilous писал(а): 31 окт 2018, 17:10 Всем привет! Не знает кто есть ли в Tеклы в АPI событие, которое срабатывает на ее закрытие, или оповещает о его закрытии? Я что-то ищу по документации и найти не могу. (мне нужно, реагировать в плагине на закрытие Теклы.)
Код: Выделить всё
private Tekla.Structures.Model.Events _events = new Tekla.Structures.Model.Events();
public void RegisterEvent()
{
_events.TeklaStructuresExit += OnTeklaStructuresExit;
_events.Register();
}
public void OnTeklaStructuresExit()
{
}
-
kanber_kav
- Сообщения: 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.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
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:06 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.
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
Re: API, проблемы и решения в Tekla Structures
Подскажите, а есть ли возможность выбрать в модели сборку по её имени? Пока у меня получается только перебирать все объекты и проверять совпадает ли их имя с необходимым, но в большой модели это, конечно, делается очень медленно. Вариант с предварительным созданием фильтров выбора не подходит.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
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;
}
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
Re: API, проблемы и решения в Tekla Structures
Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
Да.. есть такие приколы с кириллецей..) нужно конвертонуть в CP1251Igor писал(а): 19 ноя 2018, 19:15Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
Код: Выделить всё
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);
}
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
Re: API, проблемы и решения в Tekla Structures
Возможно ли как-то перебрать все сварные швы сборки? Я думал это делается легко через Assembly.GetChildren(), но он вообще ничего не возвращает.
-
kanber_kav
- Сообщения: 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:06 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.
I want to get connection names. For use in other connections.
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
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;
- 100k
- Сообщения: 172
- Зарегистрирован: 12 фев 2014, 11:04
Re: API, проблемы и решения в Tekla Structures
Сделать проверку, если <=0 присвоить 0
-
dolzh
- Сообщения: 2
- Зарегистрирован: 16 янв 2016, 17:09
Re: API, проблемы и решения в Tekla Structures
Как решаете проблемы с выбором текста такого рода как Ст3сп5 и Ст3пс5 ?
После конвертации вашим методом будут выбраны оба объекта.
После конвертации вашим методом будут выбраны оба объекта.
Montag писал(а): 20 ноя 2018, 00:02Да.. есть такие приколы с кириллецей..) нужно конвертонуть в CP1251Igor писал(а): 19 ноя 2018, 19:15Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
Код: Выделить всё
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); }
-
Igor
- Сообщения: 7
- Зарегистрирован: 23 окт 2018, 19:08
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('.', '-'))//контрольная проверка
{
//тут работаем с необходимым элементом
}
}
}
}-
everyDayLast
- Сообщения: 11
- Зарегистрирован: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Здравствуйте, подскажите как можно получить координаты точек пересечения осей?
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
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();
}
}
}
-
everyDayLast
- Сообщения: 11
- Зарегистрирован: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
да, я уже написал, но у тебя покрасивше будет, спасибо!
я просто думал, что существует готовая команда )
я просто думал, что существует готовая команда )
-
everyDayLast
- Сообщения: 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, с текстовым файлом, в котором должны быть имена атрибутов.
первый вопрос все еще актуален ))
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подскажите как с помощью API узнать/изменить положение метки вида.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
everyDayLast
- Сообщения: 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;
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Подскажите как получить еденицы измерения длины, угла и прочего из настроек с помощью API
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Как запустить макрос из любой директории а не только из той что прописана в XS_MACRO_DIRECTORY?
Например чот-то типа такого
но RunMacro работает только с относительным путем.
Например чот-то типа такого
Код: Выделить всё
Tekla.Structures.Model.Operation.RunMacro(@"D:\my-macros.cs");
-
everyDayLast
- Сообщения: 11
- Зарегистрирован: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017
-
Montag
- Сообщения: 65
- Зарегистрирован: 14 фев 2017, 09:07
Re: API, проблемы и решения в Tekla Structures
попробуй вырубить интернет. если поможет то это из-за пиратской теклы. можно в антивируснике запретить ей отправлять/принимать пакеты.everyDayLast писал(а): 24 фев 2019, 10:04 Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017
-
everyDayLast
- Сообщения: 11
- Зарегистрирован: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Спасибо, но не то ((
-
Vitalii_work
- Сообщения: 26
- Зарегистрирован: 18 июл 2018, 14:18
Re: API, проблемы и решения в Tekla Structures
Плагин после указания главной и второстепенной детали ставит систему координат в начало главной детали.
Как заставить PluginBase не менять систему координат? Или возвращать ее обратно.
Как заставить PluginBase не менять систему координат? Или возвращать ее обратно.
-
everyDayLast
- Сообщения: 11
- Зарегистрирован: 12 янв 2019, 17:03
Re: API, проблемы и решения в Tekla Structures
Может быть так?
Код: Выделить всё
// first store current work plane
TransformationPlane currentPlane = myModel.GetWorkPlaneHandler().GetCurrentTransformationPlane();
---
тут где-то плагин изменяет систему координат
---
myModel.GetWorkPlaneHandler().SetCurrentTransformationPlane(currentPlane);
-
Vitalii_work
- Сообщения: 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);
-
Mikluha
- Сообщения: 4
- Зарегистрирован: 26 май 2021, 14:54
Re: API, проблемы и решения в Tekla Structures
Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
-
graysea
- Сообщения: 1
- Зарегистрирован: 22 июн 2021, 13:23
Re: API, проблемы и решения в Tekla Structures
BoundingBox это объём, и выбираются объекты которые в него попадают. Можно попробовать указать MaxPoint и MinPoint для BoundingBox'а в одной точке, получится или нет, не знаю. Но если и нет, то полученные объекты, даже те что рядом, можно проверить на соответствие их StartPoint и EndPoint указанной раннее точке Picker'ом.Mikluha писал(а): 26 май 2021, 15:51 Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)
В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.
Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.
Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.
Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?
Спасибо.
ЗЫ: Если это важно, Текла немолодой уже версии 21.1
-
Mikluha
- Сообщения: 4
- Зарегистрирован: 26 май 2021, 14:54
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" };
}-
Mikluha
- Сообщения: 4
- Зарегистрирован: 26 май 2021, 14:54
Re: API, проблемы и решения в Tekla Structures
Речь идет про знание возможностей апи.
Есть хорошее место для хранения связей между деталями внутри модели - называется сборка "Assembly", причем штатными встроенными средствами, без атрибутов и прочего такого. Но это применяется для деталей, которые в неком одном пространственном месте собираются в некое единое целое.
Предположим, есть модель, в которой тыщи деталей и сборок.
А есть ли нечто подобное сборкам, встроенное, чтобы пользователь мог сам логически "сцепить" (в некую подобную сборке структуру) пару-тройку отверстий, которые друг от друга в модели далеко и друг с другом не связаны? Так, чтобы:
1) вначале тык отверстие и еще одно и еще одно, а программа по ним создала некую связь, структуру подобную сборке. И сохранила эту структуру в модели.
2) на другой день пользователь открыл модель, тык отверстие, а программа по нему нашла два других (логически связанных пользователем ранее).
Есть ли такие встроенные средства? Без атрибутов со ссылками, без внешних хранишищ айди. Попроще чтобы, как "сборка".
Есть хорошее место для хранения связей между деталями внутри модели - называется сборка "Assembly", причем штатными встроенными средствами, без атрибутов и прочего такого. Но это применяется для деталей, которые в неком одном пространственном месте собираются в некое единое целое.
Предположим, есть модель, в которой тыщи деталей и сборок.
А есть ли нечто подобное сборкам, встроенное, чтобы пользователь мог сам логически "сцепить" (в некую подобную сборке структуру) пару-тройку отверстий, которые друг от друга в модели далеко и друг с другом не связаны? Так, чтобы:
1) вначале тык отверстие и еще одно и еще одно, а программа по ним создала некую связь, структуру подобную сборке. И сохранила эту структуру в модели.
2) на другой день пользователь открыл модель, тык отверстие, а программа по нему нашла два других (логически связанных пользователем ранее).
Есть ли такие встроенные средства? Без атрибутов со ссылками, без внешних хранишищ айди. Попроще чтобы, как "сборка".
-
Mikluha
- Сообщения: 4
- Зарегистрирован: 26 май 2021, 14:54
Re: API, проблемы и решения в Tekla Structures
Добавлю, что таких структур в модели нужно, чтобы было несколько, поэтому варианты "прописать у всех 3 дырок в атрибуте цифру 3" или "в атрибуте одной дырки прописать id другой дырки и так далее" - не пройдут.
-
Jayyy
- Сообщения: 3
- Зарегистрирован: 13 мар 2025, 08:00
Re: API, проблемы и решения в Tekla Structures
Доброго всем времени суток!
Подскажите пожалуйста, как можно получать названия свойств на русском языке?
Есть ProfileItemParameter из каталога, в нём в свою очередь свойство HEIGHT. А как я могу получить его на русском, чтобы была "Высота"?
Подскажите пожалуйста, как можно получать названия свойств на русском языке?
Есть ProfileItemParameter из каталога, в нём в свою очередь свойство HEIGHT. А как я могу получить его на русском, чтобы была "Высота"?

