Schöck
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla 2016i open API. Не работает LoadAttributes в чертежах для меток

Tekla 2016i open API. Не работает LoadAttributes в чертежах для меток

Ответ
Поиск в этой теме
Непрочитано 25.02.2019, 06:49 #1
Tekla 2016i open API. Не работает LoadAttributes в чертежах для меток
art_rrc
 
Минск
Регистрация: 28.01.2013
Сообщений: 379

Добрый день.
Возможно кто-то сталкивался. Хочу программно изменить набор атрибутов для объекта чертежа. Для ряда примитивов все работает как надо (текст, размер, сетка, и т.д.), но для меток ни в какую. Иногда грузится "standard", но не для всех. Очень смущает наличие "TSD.ModelObject" в "new Mark.MarkAttributes", не до конца понятно правильный ли я беру, но других кандидатов просто нет. Кто-то решал такую задачу. Еще буду признателен если кто-то протестирует в самых новых версиях, вдруг, это просто баг.
Заранее спасибо.
Код:
Код:
[Выделить все]
private void button12_Click(object sender, EventArgs e)
        {
            DrawingHandler drawingHandler = new DrawingHandler();
            if (drawingHandler.GetConnectionStatus())
            {
                Drawing curDrawing = drawingHandler.GetActiveDrawing();
                if (curDrawing != null)
                {
                    foreach (DrawingObject drawingObject in
                        drawingHandler.GetDrawingObjectSelector().GetSelected())
                    {
                        //Console.WriteLine(drawingObject.GetType().Name);
                        if (drawingObject is TSD.Mark)//
                        {
                            TSD.Mark curMark = drawingObject as TSD.Mark;
                            DrawingObjectEnumerator objs = curMark.GetRelatedObjects();

                            if (objs.MoveNext())//LeaderLine
                                if (objs.MoveNext())//Part, bolt, connection и т.д.
                                {
                                    TSD.ModelObject mo = objs.Current as TSD.ModelObject;
                                    if (objs.Current.GetType() == typeof(TSD.Part))
                                    {
                                        //.LoadAttributes - всегда FALSE, если не "standard"

                                        //1. //Не работает
                                        //curMark.Attributes.LoadAttributes("standard2");

                                        //2. //Не работает
                                        //curMark.Attributes = new TSD.Mark.MarkAttributes(mo);
                                        //curMark.Attributes.LoadAttributes("standard2");

                                        //3. //Не работает. Марка пропадает
                                        //Mark.MarkAttributes markAttributes = new Mark.MarkAttributes( mo, "standard2");                                           
                                        //curMark.Attributes = markAttributes;
                                        //curMark.Modify();

                                        //4. //Не работает.
                                        //Mark.MarkAttributes markAttributes = new Mark.MarkAttributes(mo);
                                        //curMark.Attributes = markAttributes;
                                        //curMark.Modify();
                                        //curMark.Attributes.LoadAttributes("standard2");
                                        //curMark.Modify();

                                        //Не влияют
                                        //curDrawing.Modify();
                                        //drawingHandler.UpdateDrawing(curDrawing);

                                        //Любой из вариантов со "standard" работает
                                        //////curMark.Attributes.LoadAttributes("standard");
                                        //Mark.MarkAttributes mba = new Mark.MarkAttributes(mo, "standard");
                                        //curMark.Attributes = mba;
                                        curMark.Modify();

                                    }
                                    else if (objs.Current.GetType() == typeof(TSD.Bolt))
                                    {
                                        //1. //Не работает
                                        //curMark.Attributes.LoadAttributes("standard2");
                                        //curMark.Modify();

                                        //2. //РАБОТАЕТ, но грузит абсолютно не то.  
                                        //curMark.Attributes = new TSD.Mark.MarkAttributes(mo);
                                        //curMark.Attributes.LoadAttributes("standard2");
                                        //curMark.Modify();

                                        //3. //Не работает. Марка пропадает
                                        //Mark.MarkAttributes markAttributes = new Mark.MarkAttributes(mo, "standard2");
                                        //curMark.Attributes = markAttributes;
                                        //curMark.Modify();
                                                                               
                                        //Работает, но грузит не то                           
                                        //curMark.Attributes.LoadAttributes("standard");
                                        //curMark.Modify();
                                    }
                                }
                        }
                        else if (drawingObject is TSD.WeldMark)//
                        {
                            TSD.WeldMark curMark = drawingObject as TSD.WeldMark;
                            //1. Не работает. Даже если "standard"
                            //curMark.Attributes.LoadAttributes("standard2");
                            //curMark.Modify();
                        }
                        else if (drawingObject is TSD.Text)//
                        {
                            TSD.Text curText = drawingObject as TSD.Text;
                            //1. Работает
                            curText.Attributes.LoadAttributes("standard2");
                            curText.Modify();
                        }
                        else if (drawingObject is TSD.StraightDimensionSet)//
                        {
                            TSD.StraightDimensionSet curText = drawingObject as TSD.StraightDimensionSet;
                            //1. Работает
                            curText.Attributes.LoadAttributes("standard2");
                            curText.Modify();
                        }
                        else if (drawingObject is TSD.Grid)//
                        {
                            TSD.Grid curGrid = drawingObject as TSD.Grid;
                            //1. Работает
                            curGrid.Attributes.LoadAttributes("standard2");
                            curGrid.Modify();
                        }
                        else
                        {
                            Console.WriteLine(drawingObject.GetType().Name);
                        }
                    }
                }
            }
}[/code]
Просмотров: 957
 
Непрочитано 26.02.2019, 06:22
#2
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 995
<phrase 1=


ну если я правильно понимаю, то первый вариант у вас не работает, потому что не существует атрибутов "стандарт2".
вот как-только вы его создаете, у вас все начинает работать, в смысле исчезает марка, потому что атрибуты "стандарт2" - пустые, но вы это интерпретируете как "не работает".
Попробуйте добавить эксепшен, посмотрите что напишет он вам.
Konstruktiv54 вне форума  
 
Автор темы   Непрочитано 26.02.2019, 10:10
#3
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
ну если я правильно понимаю, то первый вариант у вас не работает, потому что не существует атрибутов "стандарт2".
вот как-только вы его создаете, у вас все начинает работать, в смысле исчезает марка, потому что атрибуты "стандарт2" - пустые, но вы это интерпретируете как "не работает".
Попробуйте добавить эксепшен, посмотрите что напишет он вам.
Ну конечно набор атрибутов "standard2" у меня есть (тестировал расположение в /attributes, XS_DRIVER, XS_SYSTEM, XS_FIRM, XS_PROJECT). А Exception ничего не выдает, т.к. никакой ошибки нет. Получается всего лишь, что LoadAttributes = false, что никак не мешает дальнейшему выполнению кода. "не работает" - я интерпретирую не как "ошибка в коде", а как "не работает функция Open API".
Судя по информации, которую я собрал из разных источников - это баг. Поэтому тему можно считать закрытой. Единственное, что вызывает интерес - это исправлено ли это в последних версиях Tekla.
Спасибо, что уделили внимание моему вопросу
art_rrc вне форума  
 
Непрочитано 26.02.2019, 11:02
#4
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 995
<phrase 1=


я продолжаю утверждать, что markAttributes, созданные в третьем пункте работают, но они пустые, заполните их и будет вам счастье.
да, связь с файлом "стандарт2" отсутствует, как ее найти я не знаю, но вы можете внести нужные атрибуты в markAttributes.
https://youtu.be/FKCqq9bxrQo
Konstruktiv54 вне форума  
 
Автор темы   Непрочитано 26.02.2019, 14:19
#5
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Мне кажется, что я не утверждал обратного. Работают, но ручная корректировка меня в данном случае не интересует.
Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
созданные в третьем пункте работают
Проблема именно в в единовременной загрузке всех атрибутов в автоматическом режиме. Т.е. задача:
Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
да, связь с файлом "стандарт2" отсутствует
Но, как писал выше, видимо просто в Tekla 2016i баг. На данном этапе я могу просто отказаться от запланированного функционала для этого типа объектов. Прижмет - буду "парсить" файл и записывать вручную, как вы рекомендуете. Спасибо.
art_rrc вне форума  
 
Непрочитано 26.02.2019, 14:22
#6
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 995
<phrase 1=


я запускал на 2018i, эффект тот-же.
Я больше склонен думать, что это не баг, а просто мы чего-то не знаем )) хотя от этого не легче конечно )
Konstruktiv54 вне форума  
 
Автор темы   Непрочитано 26.02.2019, 14:59
#7
art_rrc


 
Регистрация: 28.01.2013
Минск
Сообщений: 379


Цитата:
Сообщение от Konstruktiv54 Посмотреть сообщение
я запускал на 2018i, эффект тот-же.
Я больше склонен думать, что это не баг, а просто мы чего-то не знаем )) хотя от этого не легче конечно )
Неделю назад я был полон энтузиазма достучаться до истины и также всегда склонен к такой мысли, что знаний не хватает и пробел нужно заполнить. Но стукнувшись головой по очереди во все двери, решил взять паузу по этому пункту и двигаться дальше.
art_rrc вне форума  
 
Непрочитано 26.02.2019, 15:23
#8
100k

Жалкий инженеришка-проектаст
 
Регистрация: 31.01.2010
Сообщений: 1,952


Цитата:
Сообщение от art_rrc Посмотреть сообщение
двигаться дальше
через закрытую дверь?
100k вне форума  
 
Непрочитано 08.03.2019, 17:55
#9
Konstruktiv54


 
Регистрация: 31.01.2007
Новосибирск
Сообщений: 995
<phrase 1=


Вопрос примерно по этой же теме, добавляю к размерной линии тег, но не могу настроить его отображение

dimBeam.Attributes.LeftUpperTag.Add(new TextElement(markText)); // работает
dimBeam.Attributes.LeftUpperTag.Frame.Type = FrameTypes.Hexagon; // не работает
dimBeam.Attributes.IncludePartCountInTagA = true; // не работает
dimBeam.LeftTagLineOffset = 3000; // не работает

тут нужен какой-то специальный подход?
Konstruktiv54 вне форума  
 
Непрочитано 10.03.2019, 17:13
#10
CuPo>I<a

Металлоконструкции
 
Регистрация: 28.02.2009
Златоуст
Сообщений: 476


а если к этому всему добавить dimBeam.Modify()?
CuPo>I<a вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Другие CAD системы > Tekla > Tekla 2016i open API. Не работает LoadAttributes в чертежах для меток

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Tekla 2016i. Как управлять заливкой фона размерного текста и меток на грани деталей Serge_Y Tekla 7 07.06.2017 13:02
Расстановка меток осей по образцу в tekla structures kisli Tekla 5 20.05.2016 00:49
Настройка меток армирования в Tekla struktures. kisli Tekla 4 08.12.2015 09:55
Настройка меток геометрических точек профиля для трассы. Civil 3d 2014 rus Ivo25 Вертикальные решения на базе AutoCAD 5 08.03.2015 11:53
Acaddoc.lsp - насколько вредный Alexander88 LISP 1 10.06.2014 09:29