Как получить значение текстовых блоков объекта Callout?

Программирование для CATIA.

Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 13:12

Добрый день.

Возникла необходимость прочитать значения текстовых блоков callout'а на чертеже. Требуется "вытянуть" именно из текстового блока содержимое (например, для Detail view - "DETAIL A"; для Section view (видимо будет два блока с одинаковым содержанием) - "B").

Подскажите возможное решение, пожалуйста.
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение bit » 17 дек 2012 14:05

С++ или automation (VB)?
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 15:37

Automation
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 16:07

Нашел "ручное" решение:

1. Определить все callout'ы
2. Поочередно выделять каждый callout и среди него искать текстовые блоки.

Но автоматизировать почему-то не получается.
Пример кода (C#):
Код: Выделить всё
string _filter = "Drafting.Callout;scr";
_drawing_document.Selection.Clear();
_drawing_document.Selection.Search(ref _filter);
if (_drawing_document.Selection.Count > 0)
{
    List<INFITF.AnyObject> _lst_callouts = new List<INFITF.AnyObject>();
    for (int i = 1; i <= _drawing_document.Selection.Count; i++)
    {
        INFITF.AnyObject _ao =
            (INFITF.AnyObject)_drawing_document.Selection.Item(i).Value;
        _lst_callouts.Add(_ao);
       
        var v = _ao.get_Name(); // Вот здесь выясняется, что в _ao не callout, а DrawingView, которому принадлежит callout
    }
...

:-(
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение Artem » 17 дек 2012 17:14

в случае чего вспоминаем про альтернативу - viewtopic.php?f=140&t=3723
Последний раз редактировалось Artem 17 дек 2012 17:16, всего редактировалось 1 раз.
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 17:15

Про альтернативу я помню, но перебирать все текстовые блоки - долгий вариант..
Я не понимаю, почему не получается автоматизировать "ручной" вариант...
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение Artem » 17 дек 2012 17:26

callout походу от одного предка с GeneratedItem( или вообще от него унаследован )- та же ситуация, так что наверное придется через текст.
дополнительные свойства анализируй - шрифт наличие одной стрелки, оконцовку стрелки + текст(он же наверное из 1 буквы будет?)...а уже потом чекаем то или не то через селекшн+статусбар - отсеешь мне кажется большинство левого текста (если считаем проход по текстам и их свойствам "легкой" операцией а выделение и статус - тяжелой по времени)
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 17:37

К сожалению, никаких специфических атрибутов нет.. Но мне нужна гарантия, что текст принадлежит callout'у. Придется прибегать к альтернативе..
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение Artem » 17 дек 2012 18:01

еще одна альтернатива
Код: Выделить всё
Sub CATMain()
Dim drawingDocument1 As DrawingDocument
Set drawingDocument1 = CATIA.ActiveDocument
Dim selection1 As Selection
Set selection1 = drawingDocument1.Selection
'получаем список видимой текстовки через selection1.Search "CATDrwSearch.DrwText.Visibility=Visible,all"
selection1.Search "CATDrwSearch.DrwCallout,all"
Call selection1.VisProperties.SetShow(catVisPropertyNoShowAttr)
'а тут анализ текста который стал скрытым
Call selection1.VisProperties.SetShow(catVisPropertyShowAttr)
End Sub
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение Artem » 17 дек 2012 19:00

я ступил - наверное это старость....или пора прекращать пить (((
selection1.Search "CATDrwSearch.DrwCallout,all"
selection1.Search "CATDrwSearch.DrwText,sel"
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: Как получить значение текстовых блоков объекта Callout?

Сообщение file » 17 дек 2012 20:19

Странно, с текстовыми блоками такое проходит... То же самое пытался реализовать на callout'ах (http://www.plm-forum.ru/forum/viewtopic.php?f=140&t=3824&p=23138#p23127) чтобы потом для каждого callout'а получить тексты. Ладно.. По крайней мере текст. блоки определены. Осталось их приписать к соответствующим callout'ам :)
file
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 02 янв 2011 22:44


Вернуться в CAA-RADE

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

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