Практический семинар Tekla Structures 2017

API, проблемы и решения в Tekla Structures

AndrejjerdnA
Сообщения: 103
Регистрация: 18 сен 2014, 07:20

Re: API, проблемы и решения в Tekla Structures

Сообщение AndrejjerdnA » 07 янв 2017, 19:05

Никто не сможет подсказать как получить вот эти значения? (см. выделенное на приложенном файле) Что-то никак не соображу...
Вложения
Скриншот 07-01-2017 190056.png

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 не дописали почеловечески.
Во всяком случае для физической модели я делаю нечто подобное и там данные обновляются.
Посоветуйте, пожалуйста где я допустил ошибку?
Последний раз редактировалось smonder 10 фев 2017, 01:07, всего редактировалось 1 раз.

Аватара пользователя
Danila_ZLT
Сообщения: 603
Регистрация: 02 окт 2012, 12:14
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение Danila_ZLT » 09 фев 2017, 16:32

И работает данный код?
"
}
nextPart->Modify();
}"
это точно тут?
Автоматизируем хаос... Недорого...

smonder
Сообщения: 11
Регистрация: 11 июл 2012, 01:27

Re: API, проблемы и решения в Tekla Structures

Сообщение smonder » 10 фев 2017, 01:10

Вы правы, пытался упростить код и допустил опечатку.
Уже исправил в своем предыдущем сообщении, спасибо.

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 15 фев 2017, 00:33

подскажите плиз как найти пересечение сегмента LineSegment с Part?

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 15 фев 2017, 07:44

как-то так...
Intersect.PNG

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 15 фев 2017, 10:50

здесь пересечение с Plane и BoundingBox. Мне нужно получить массив точек пересеченик отрезка с любым объектом типа Part. Есть идея через GetSolid().GeFaceEnmerator() пробежть по всем Face. По проще варианта никто не знает?

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 15 фев 2017, 11:19

чем BB не устраивает?

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 15 фев 2017, 11:57

мне нужы точки пересечения с деталью а не с BoundingBox этой детали. Решил это так myPart.GetSolid().Intersect(point1, point2)

sergtsw
Сообщения: 1
Регистрация: 26 фев 2017, 20:26

Re: API, проблемы и решения в Tekla Structures

Сообщение sergtsw » 26 фев 2017, 20:33

Подскажите, как средствами API определить, что в Solid есть отверстие (не вырез, выходящий на край элемента). "myPart.GetSolid().Intersect(point1, point2)" отрабатывает пересечение с solid, но не учитывает отверстия, те не учитывает внутренний контур (отверстие).

smonder
Сообщения: 11
Регистрация: 11 июл 2012, 01:27

Re: API, проблемы и решения в Tekla Structures

Сообщение smonder » 17 апр 2017, 10:40

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

Сообщение meart » 30 июн 2017, 08:17

подскажите пожалуйста, есть ли возможность создать
несколько кнопок на панели инструментов для одного плагина (или макроса) с вызовом разных его функций?
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн

Pavel Karpovich
Сообщения: 8
Регистрация: 09 дек 2017, 11:47
Откуда: Минск
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение Pavel Karpovich » 09 дек 2017, 12:17

Добрый день! Буду рад вашей помощи.
Есть простой макрос подтягивания стен/колонн к плите перекрытия. Всё отлажено и всё работает.
Захотелось закинуть код в плагин. Но появилось одно, но! Как сделать простой независимый плагин, т.е. чтобы форма открывалась, можно было выделить элементы и выполнить действия над ними, но плагин в модели не создавался (аналог exe приложения)
Поковырял свойство [InputObjectDependency(PluginBase.InputObjectDependency.NOT_DEPENDENT)] - оно не позволяет выделить элементы в модели (могу ошибаться)
Может быть есть мысли по этому поводу, какие свойства плагина ещё можно посмотреть? Или делать exe. и вызывать его через макрос?

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 11 дек 2017, 06:33

[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;
}

На форму можно положить любые кнопки и обработчики для них сделать. Будет работать как приложение

Pavel Karpovich
Сообщения: 8
Регистрация: 09 дек 2017, 11:47
Откуда: Минск
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение Pavel Karpovich » 13 дек 2017, 09:58

CuPo>I<a, спасибо всё получилось. Теперь всё ок!

Pavel Karpovich
Сообщения: 8
Регистрация: 09 дек 2017, 11:47
Откуда: Минск
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение Pavel Karpovich » 23 янв 2018, 09:37

Добрый день! Ещё один небольшой вопрос! Может кто-нибудь знает, как можно достучаться до revision handling (https://yadi.sk/i/n6X6pRJG3RhCcF) для каждого чертежа? В api в принципе не нашёл упоминания о revision для чертежей. Или это является разновидностью атрибутов чертежа, которые каким-то хитрым способом можно получить?

GerasimovJulia
Сообщения: 2
Регистрация: 08 май 2018, 13:21

Re: API, проблемы и решения в Tekla Structures

Сообщение GerasimovJulia » 15 июн 2018, 01:19

Добрый день! Подскажите, пожалуйста, пытаюсь вызвать плагин-компонент из другого плагина. Вот код вставки:
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

Сообщение dobrzhanskyi » 04 июл 2018, 16:46

Здравствуйте,столкнулся с проблемой отладки плагина.

Когда пробую сделать 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

Сообщение Pavel Karpovich » 13 июл 2018, 11:55

dobrzhanskyi. В принципе никаких проблем с отладкой не возникает. Если бы скинули свой плагин, я бы глянул исходный код. Только так можно выцепить проблему. Если это ещё актуально.

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 18 июл 2018, 14:38

Подскажите как с помощью API включить/отключить привязки в чертеже? Ну или хотябы получить состояние привязок. В Tekla.Structures.DrawingInternal есть

Код: Выделить всё

[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

Сообщение Vitalii_work » 18 июл 2018, 14:53

dobrzhanskyi я создавал отдельный проект с точкой входа чтоб постоянно не перезагружать теклу для отладки. InputDefinition создавал специально для отладки, в каждом плагине создавал метод start() изапускал его из приложения для отладки. А в методе run всего одна строчка start();

meart
Сообщения: 494
Регистрация: 04 мар 2013, 18:09

Re: API, проблемы и решения в Tekla Structures

Сообщение meart » 26 июл 2018, 08:14

Добрый день!
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так :roll: :

Код: Выделить всё

	Tekla.Structures.Model.Operations.Operation.MoveObject(object, new Vector(1000, 0, 0));
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 26 июл 2018, 12:23

meart писал(а):
26 июл 2018, 08:14
Добрый день!
Подскажите пожалуйста, как можно перемещать программно сборки в модели.
Эта штука почему-то не работает и/или я что-то делаю не так :roll: :
Попробовал.. Действительно не перемещает. Возможно стоит свой алгоритм перемещения сборки создать.

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 26 июл 2018, 13:05

макросом

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 30 июл 2018, 14:38

Подсажите как получить толщину головки болта?

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 30 июл 2018, 15:01

а для чего?

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 30 июл 2018, 15:14

CuPo>I<a писал(а):
30 июл 2018, 15:01
а для чего?
Нужно найти точки болта на чертеже
Вложения
1.PNG
1.PNG (9.75 КБ) 15535 просмотров

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 31 июл 2018, 06:15

Vitalii_work писал(а):
30 июл 2018, 15:14
CuPo>I<a писал(а):
30 июл 2018, 15:01
а для чего?
Нужно найти точки болта на чертеже
а зачем?)
вот так, например, можно (только эта падлюка "хвостик" не видит. Но его можно вытащить из каталога болтов для конкретного болта):

Код: Выделить всё

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());
            }
Вложения
Безымянный.png

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 31 июл 2018, 16:34

CuPo>I<a писал(а):
31 июл 2018, 06:15
Vitalii_work писал(а):
30 июл 2018, 15:14
CuPo>I<a писал(а):
30 июл 2018, 15:01
а для чего?
Нужно найти точки болта на чертеже
а зачем?)
вот так, например, можно (только эта падлюка "хвостик" не видит. Но его можно вытащить из каталога болтов для конкретного болта):

Код: Выделить всё

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());
            }
Нужно для простановки размеров на чертеже. Через пересечение с солидом я тоже так думал, но проблема если нет болта - только отверстие, то в чертеже линия болта рисутся на расстоянии толщины головки болта от первого пересечения с деталью а в другую сторону на 20мм от последнего пересечения с деталью. А без болта нет и солида для определения толщины головки болта) У меня хвостик видит. Думаю у тебя не хватает линии пересечения LineSegment lineSegment = new LineSegment(ls1, ls2); или ручки болтов далеко находятся. Вытянуть из каталога тощину головки болта без экспорта каталога, а потом его конвертирования c json в object я не нашел как это сделать. Если подскажешь как, то буду благодарен)
Вложения
1.PNG

Аватара пользователя
CuPo>I<a
Сообщения: 846
Регистрация: 26 дек 2011, 12:41
Откуда: Златоуст
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение CuPo>I<a » 01 авг 2018, 06:13

"У меня хвостик видит"
Какая текла?
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал

В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 01 авг 2018, 14:11

CuPo>I<a писал(а):
01 авг 2018, 06:13
"У меня хвостик видит"
Какая текла?
2016i
CuPo>I<a писал(а):
01 авг 2018, 06:13
Вроде как данные из каталога можно только через экспорт получить. Я, во всяком случае, так делал

В чертежах размеры не ставил программно. Как это должно выглядеть? Где там завязки с толщиной головки? Покажи картинку
Часто бывает что приходится образмеривать отверстия когда они находятся не в плане а как показана на скриншоте. Можно было бы просто размер ставить в пересечение болта с деталью но тогда линия размера будет закрывать ось болта частично, По этому хочу найти точки болтов на чертеже. но они не соответствуют этим же точкам в моделию В чертеже не учитывается шайба под болтом.
Вложения
2.PNG
1.PNG

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 08 авг 2018, 14:00

Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()

meart
Сообщения: 494
Регистрация: 04 мар 2013, 18:09

Re: API, проблемы и решения в Tekla Structures

Сообщение meart » 08 авг 2018, 14:13

Vitalii_work писал(а):
08 авг 2018, 14:00
Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
Попробуйте: Tekla.Structures.Model.Operations.Operation.ObjectMatchesToFilter Method (ModelObject, FilterExpression)
«Есть только две бесконечные вещи: Вселенная и глупость. Хотя насчет Вселенной я не вполне уверен.» А. Эйнштейн

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 08 авг 2018, 14:27

meart писал(а):
08 авг 2018, 14:13
Vitalii_work писал(а):
08 авг 2018, 14:00
Есть объект фильтр типа Tekla.Structures.Filtering.Filter и деталь типа Tekla.Structures.Model.Beam. Как проверить попадает ли эта деталь в фильтр? Только без полного перебеора с помощью GetFilteredObjectsWithType()
Попробуйте: Tekla.Structures.Model.Operations.Operation.ObjectMatchesToFilter Method (ModelObject, FilterExpression)
Спасибо!

ainis
Сообщения: 2
Регистрация: 06 окт 2013, 06:33

Re: API, проблемы и решения в Tekla Structures

Сообщение ainis » 22 авг 2018, 10:15

Приветствую уважаемых участников форума!
Подскажите, пожалуйста как средствами API из модели получить используемые в ней болты, гайки и шайбы? Заранее благодарен.

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 30 авг 2018, 09:51

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

Сообщение CuPo>I<a » 31 авг 2018, 06:42

Сам перешёл на такую систему: Создаю отчёт в xml стандартными шаблонами (через редактор шаблонов), потом этот xml разбираю в коде C#. Работает намного быстрее, чем запрос свойств непосредственно с объектов модели.

ainis
Сообщения: 2
Регистрация: 06 окт 2013, 06:33

Re: API, проблемы и решения в Tekla Structures

Сообщение ainis » 01 сен 2018, 06:31

Montag писал(а):
30 авг 2018, 09:51
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;}
}

Спасибо!

Pavel Karpovich
Сообщения: 8
Регистрация: 09 дек 2017, 11:47
Откуда: Минск
Контактная информация:

Re: API, проблемы и решения в Tekla Structures

Сообщение Pavel Karpovich » 17 сен 2018, 14:11

Добрый день! Может быть кто-нибудь знает, как получить выделенные в модели точки?
Выделенные объекты получаю через Tekla.Structures.Model.UI.ModelObjectSelector().GetSelectedObjects(), а как можно получить, к примеру, выделенные точки контурной пластины?

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 11 окт 2018, 18:47

Помогите решить проблему.
Есть форма наследуемая от ApplicationFormBase. На форме есть TextBox с AttributeTypeName = Distance. Как заставить этот TextBox вести себя также как и в плагинах? Чтоб была валидация введенного значения и както привязать его к свойству с типом Distance.

Igor
Сообщения: 7
Регистрация: 23 окт 2018, 19:08

Re: API, проблемы и решения в Tekla Structures

Сообщение Igor » 23 окт 2018, 19:48

Пытаюсь посредством АПИ вставить в модель компонент-плагин сварной балки (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();

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 24 окт 2018, 12:13

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

Сообщение Igor » 24 окт 2018, 16:53

TSM.Model model = new TSM.Model();
model.CommitChanges();
Нет, нет) это всё имеется. Я просто выдрал кусок кода из программы, которая по входящим координатам расставляет балки в модели. Прокатные балки расставляются. Сварные я хотел ставить этим компонентом, но не получается. Ещё пробовал ставить их самодельным компонентом типа деталь (две точки) точно таким же кодом. Компонент встает, но на первую точку и вертикально, как-будто игнорирует вторую координату. Не могу найти примеры кода именно вот с такими "двухточечными компонентами".

meart
Сообщения: 494
Регистрация: 04 мар 2013, 18:09

Re: API, проблемы и решения в Tekla Structures

Сообщение meart » 25 окт 2018, 08:56

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

Сообщение Igor » 26 окт 2018, 18:13

У вас не верное название и номер вставляемого компонента.
Спасибо, теперь сработал компонент!

aabilous
Сообщения: 5
Регистрация: 18 июн 2018, 16:12

Re: API, проблемы и решения в Tekla Structures

Сообщение aabilous » 31 окт 2018, 17:10

Всем привет! Не знает кто есть ли в Tеклы в АPI событие, которое срабатывает на ее закрытие, или оповещает о его закрытии? Я что-то ищу по документации и найти не могу. (мне нужно, реагировать в плагине на закрытие Теклы.)

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 31 окт 2018, 23:41

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

Сообщение 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.
Вложения
soru.png

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 15 ноя 2018, 13:01

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.
do you want to get name of fileattribute applied to connection? did I understand you correctly?

Igor
Сообщения: 7
Регистрация: 23 окт 2018, 19:08

Re: API, проблемы и решения в Tekla Structures

Сообщение Igor » 18 ноя 2018, 18:34

Подскажите, а есть ли возможность выбрать в модели сборку по её имени? Пока у меня получается только перебирать все объекты и проверять совпадает ли их имя с необходимым, но в большой модели это, конечно, делается очень медленно. Вариант с предварительным созданием фильтров выбора не подходит.

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 19 ноя 2018, 12:46

Igor писал(а):
18 ноя 2018, 18:34
Подскажите, а есть ли возможность выбрать в модели сборку по её имени? Пока у меня получается только перебирать все объекты и проверять совпадает ли их имя с необходимым, но в большой модели это, конечно, делается очень медленно. Вариант с предварительным созданием фильтров выбора не подходит.
проще всего через FilterExpression

Код: Выделить всё

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

Сообщение Igor » 19 ноя 2018, 19:15

Montag писал(а):
19 ноя 2018, 12:46
проще всего через FilterExpression
Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 20 ноя 2018, 00:02

Igor писал(а):
19 ноя 2018, 19:15
Montag писал(а):
19 ноя 2018, 12:46
проще всего через FilterExpression
Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
Да.. есть такие приколы с кириллецей..) нужно конвертонуть в 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);
        }

Igor
Сообщения: 7
Регистрация: 23 окт 2018, 19:08

Re: API, проблемы и решения в Tekla Structures

Сообщение Igor » 23 ноя 2018, 16:53

Возможно ли как-то перебрать все сварные швы сборки? Я думал это делается легко через Assembly.GetChildren(), но он вообще ничего не возвращает.

kanber_kav
Сообщения: 2
Регистрация: 14 ноя 2018, 00:00

Re: API, проблемы и решения в Tekla Structures

Сообщение kanber_kav » 23 ноя 2018, 22:16

Montag писал(а):
15 ноя 2018, 13:01
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.
do you want to get name of fileattribute applied to connection? did I understand you correctly?
Yes.
I want to get connection names. For use in other connections.

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 04 дек 2018, 22:11

Подскажите как решить такую проблему: Пишу плагин для чертежей , на форме есть combobox с такими настройками

Код: Выделить всё

            // 
            // 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;
его поле в StructuresData:

Код: Выделить всё

           [TSP.StructuresField("cb__weld_type")]
           public int cb__weld_type;
при запуске плагина если выбрать "тип0" в data.cb__weld_type поподает число -2147483648 (насколько я понял это мин интежер), а при выборе "тип1" и "тип2" все отлично работает в data.cb__weld_type поподает 1 и 2. Как сделать так, чтоб в data.cb__weld_type при "тип0" попадало чсло 0, а не -2147483648 ?

Аватара пользователя
100k
Сообщения: 172
Регистрация: 12 фев 2014, 11:04

Re: API, проблемы и решения в Tekla Structures

Сообщение 100k » 06 дек 2018, 14:12

Сделать проверку, если <=0 присвоить 0

dolzh
Сообщения: 2
Регистрация: 16 янв 2016, 17:09

Re: API, проблемы и решения в Tekla Structures

Сообщение dolzh » 12 дек 2018, 17:30

Как решаете проблемы с выбором текста такого рода как Ст3сп5 и Ст3пс5 ?
После конвертации вашим методом будут выбраны оба объекта.
Montag писал(а):
20 ноя 2018, 00:02
Igor писал(а):
19 ноя 2018, 19:15
Montag писал(а):
19 ноя 2018, 12:46
проще всего через FilterExpression
Вот спасибо, только теперь узнал про этот класс. Но столкнулся с новой проблемой: если в имени (или, например, в номере позиции) марки встречается буква кириллицы, то фильтр не работает. Без кириллицы всё отлично. Вы не знаете как с этим бороться?
Да.. есть такие приколы с кириллецей..) нужно конвертонуть в 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);
        }

Igor
Сообщения: 7
Регистрация: 23 окт 2018, 19:08

Re: API, проблемы и решения в Tekla Structures

Сообщение Igor » 12 янв 2019, 09:34

Как решаете проблемы с выбором текста такого рода как Ст3сп5 и Ст3пс5 ?
После конвертации вашим методом будут выбраны оба объекта.
Действительно, после конвертации вместо русских букв возвращаются вопросы, которые Tekla видит как любые символы. Но проблема легко решается дополнительной проверкой строки с необходимым параметром. Главное сверять строку ещё ту, которая не проходила конвертацию. Например, в модели у меня имеются две марки: пс-1 и сп-1, но следующий код выделит только необходимую:

Код: Выделить всё

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

Сообщение everyDayLast » 12 янв 2019, 17:10

Здравствуйте, подскажите как можно получить координаты точек пересечения осей?

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 13 янв 2019, 20:29

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 » 19 янв 2019, 21:19

да, я уже написал, но у тебя покрасивше будет, спасибо!
я просто думал, что существует готовая команда )

everyDayLast
Сообщения: 11
Регистрация: 12 янв 2019, 17:03

Re: API, проблемы и решения в Tekla Structures

Сообщение everyDayLast » 21 янв 2019, 20:05

Разбираюсь с плагином армирования, возникли вопросы:
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

Сообщение Vitalii_work » 29 янв 2019, 17:21

Подскажите как с помощью API узнать/изменить положение метки вида.
Вложения
Image 1.png
Image 1.png (7.61 КБ) 13788 просмотров

everyDayLast
Сообщения: 11
Регистрация: 12 янв 2019, 17:03

Re: API, проблемы и решения в Tekla Structures

Сообщение everyDayLast » 31 янв 2019, 17:28

Не очень разнообразный выбор вариантов
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

Сообщение Vitalii_work » 08 фев 2019, 16:42

Подскажите как получить еденицы измерения длины, угла и прочего из настроек с помощью API
Вложения
Image 1.png

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 14 фев 2019, 22:08

Как запустить макрос из любой директории а не только из той что прописана в XS_MACRO_DIRECTORY?
Например чот-то типа такого

Код: Выделить всё

 Tekla.Structures.Model.Operation.RunMacro(@"D:\my-macros.cs");
но RunMacro работает только с относительным путем.

everyDayLast
Сообщения: 11
Регистрация: 12 янв 2019, 17:03

Re: API, проблемы и решения в Tekla Structures

Сообщение everyDayLast » 24 фев 2019, 10:04

Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017

Montag
Сообщения: 65
Регистрация: 14 фев 2017, 09:07

Re: API, проблемы и решения в Tekla Structures

Сообщение Montag » 24 фев 2019, 12:27

everyDayLast писал(а):
24 фев 2019, 10:04
Текла вылетает при попытке подключиться к процессу для отладки, никто не сталкивался с такой проблемой? TS 2018, VS2017
попробуй вырубить интернет. если поможет то это из-за пиратской теклы. можно в антивируснике запретить ей отправлять/принимать пакеты.

everyDayLast
Сообщения: 11
Регистрация: 12 янв 2019, 17:03

Re: API, проблемы и решения в Tekla Structures

Сообщение everyDayLast » 24 фев 2019, 14:31

Спасибо, но не то ((

Vitalii_work
Сообщения: 26
Регистрация: 18 июл 2018, 14:18

Re: API, проблемы и решения в Tekla Structures

Сообщение Vitalii_work » 02 мар 2019, 21:03

Плагин после указания главной и второстепенной детали ставит систему координат в начало главной детали.
Как заставить PluginBase не менять систему координат? Или возвращать ее обратно.

everyDayLast
Сообщения: 11
Регистрация: 12 янв 2019, 17:03

Re: API, проблемы и решения в Tekla Structures

Сообщение everyDayLast » 04 мар 2019, 12:29

Может быть так?

Код: Выделить всё

               
// 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

Сообщение Vitalii_work » 04 мар 2019, 13:24

everyDayLast писал(а):
04 мар 2019, 12:29
Может быть так?

Код: Выделить всё

               
// first store current work plane 
TransformationPlane currentPlane = myModel.GetWorkPlaneHandler().GetCurrentTransformationPlane();
---
тут где-то плагин изменяет систему координат
---
myModel.GetWorkPlaneHandler().SetCurrentTransformationPlane(currentPlane);
Проблема была в том что в методе Run не надо писть model.CommitChanges . Если написать model.CommitChanges() то почемуто значек системы координат перерисовывается в первую точку главной детали но сама система координат не меняется. В общем просто удалил model.CommitChanges и все заработало норм.

Mikluha
Сообщения: 4
Регистрация: 26 май 2021, 14:54

Re: API, проблемы и решения в Tekla Structures

Сообщение Mikluha » 26 май 2021, 15:51

Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)

В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.

Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.

Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.

Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?

Спасибо.

ЗЫ: Если это важно, Текла немолодой уже версии 21.1

graysea
Сообщения: 1
Регистрация: 22 июн 2021, 13:23

Re: API, проблемы и решения в Tekla Structures

Сообщение graysea » 22 июн 2021, 13:30

Mikluha писал(а):
26 май 2021, 15:51
Доброе время суток! Простите за возможно крамольный вопрос по коду шарпа, но... новичку не стыдно)

В модели есть несколько точек. В них (и только в них) приходят начала (или концы) нескольких балок. Да, точки могут быть достаточно близко, в нескольких сантиметрах. Но все-таки это разные места и туда сходятся другие балки.

Нужно дать пользователю Picker'ом выбирать одну их таких точек, и чтобы выделились на экране и затем вернулось в программу перечисление только тех балок, у которых начало или конец в выбранной пользователем точке.

Пробовал (после создания пикера и выбора точки пикером) делать выбор нескольких объектов через GetObjectsByBoundingBox, но он как-то по-инопланетному (непонятно мне) выбирает и те объекты, что нужно, и те, что в точках рядом. А нужны только балки, имеющие начало или конец в выбранной точке. Может быть это как-то связано с системами координат, не знаю.

Т.е. выбрали одну точку - и выделились только все балки, что в нее приходят(уходят). И вернулись в виде перечисления. Как это можно сделать простым и незамысловатым способом? Может я упустил какой-то стандартный способ, а он есть? Как это сделать?

Спасибо.

ЗЫ: Если это важно, Текла немолодой уже версии 21.1
BoundingBox это объём, и выбираются объекты которые в него попадают. Можно попробовать указать MaxPoint и MinPoint для BoundingBox'а в одной точке, получится или нет, не знаю. Но если и нет, то полученные объекты, даже те что рядом, можно проверить на соответствие их StartPoint и EndPoint указанной раннее точке Picker'ом.

Mikluha
Сообщения: 4
Регистрация: 26 май 2021, 14:54

Re: API, проблемы и решения в Tekla Structures

Сообщение Mikluha » 05 июл 2021, 04:37

graysea, спасибо. Примерно так и сделал, хотя изначально объектов он выбирает много всяких лишних.

Еще вопрос. Научился выгружать через API нужный мне хитрый шейп в файл .tsc
А как его редактировать-то? Через что? Ну или конвертировать хотя бы во что-нибудь туда-обратно.
Подскажите, люди добрые.

Глеб Гулин
Сообщения: 1
Регистрация: 13 сен 2023, 21:30

Re: API, проблемы и решения в Tekla Structures

Сообщение Глеб Гулин » 14 сен 2023, 00:27

Доброго времени суток, уважаемые колеги. Может мне кто то что то подскажет. Мучаюсь с одной проблемой.
У меня стоит задача печатать чертежи сборок в 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" };
				}
Вопрос. Могу ли я подобным образом получить dwg и dxf? Я так понимаю, что подобное я могу сделать только экспортом. Но вот незадача. В классе DrawingHandler есть только методы. связанные с PrintDrawing, и совсем нет что то типа ExportDrawing. Неужели в библиотеке не предусмотрели такую потребность?(( Может кто то сталкивался?

Mikluha
Сообщения: 4
Регистрация: 26 май 2021, 14:54

Re: API, проблемы и решения в Tekla Structures

Сообщение Mikluha » 26 мар 2024, 17:51

Речь идет про знание возможностей апи.

Есть хорошее место для хранения связей между деталями внутри модели - называется сборка "Assembly", причем штатными встроенными средствами, без атрибутов и прочего такого. Но это применяется для деталей, которые в неком одном пространственном месте собираются в некое единое целое.

Предположим, есть модель, в которой тыщи деталей и сборок.

А есть ли нечто подобное сборкам, встроенное, чтобы пользователь мог сам логически "сцепить" (в некую подобную сборке структуру) пару-тройку отверстий, которые друг от друга в модели далеко и друг с другом не связаны? Так, чтобы:

1) вначале тык отверстие и еще одно и еще одно, а программа по ним создала некую связь, структуру подобную сборке. И сохранила эту структуру в модели.
2) на другой день пользователь открыл модель, тык отверстие, а программа по нему нашла два других (логически связанных пользователем ранее).

Есть ли такие встроенные средства? Без атрибутов со ссылками, без внешних хранишищ айди. Попроще чтобы, как "сборка".

Mikluha
Сообщения: 4
Регистрация: 26 май 2021, 14:54

Re: API, проблемы и решения в Tekla Structures

Сообщение Mikluha » 26 мар 2024, 17:58

Добавлю, что таких структур в модели нужно, чтобы было несколько, поэтому варианты "прописать у всех 3 дырок в атрибуте цифру 3" или "в атрибуте одной дырки прописать id другой дырки и так далее" - не пройдут.

Ответить
phpbb3 styles

Вернуться в «3D моделирование в Tekla Structures»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей