Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Denis от 01-11-2015, 16:39:58

Название: Получить информацию из блока
Отправлено: Denis от 01-11-2015, 16:39:58
Здравствуйте.
Путем долгих мучений я подошел к созданию блока из БД.Блок создается хорошо.
Теперь я хочу получать информацию из этого блока для работы другого плагина.
В приложении есть файл, в котором нарисовано устройство с разными входами/выходами. Мне нужно получить информацию например из строки с надписью Ref Loop Out.
Тут я запутался окончательно. Это же AttributeDefinition?
И,если нетрудно,можете подсказать ресурс с руководством по программированию Автокада
Заранее спасибо
Название: Re: Получить информацию из блока
Отправлено: Александр Ривилис от 01-11-2015, 16:54:04
В приложении есть файл, в котором нарисовано устройство с разными входами/выходами. Мне нужно получить информацию например из строки с надписью Ref Loop Out.
Тут я запутался окончательно. Это же AttributeDefinition?
Да. А что в этом удивительного? Это постоянный (константный) атрибут (почитай в документации AutoCAD что это такое: http://exchange.autodesk.com/autocadmep/rus/online-help/browse#WS1a9193826455f5ffa23ce210c4a30acaf-6c03.htm ):

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fimg-fotki.yandex.ru%2Fget%2F39232%2F7842324.4%2F0_10e876_1a15e548_orig.png&hash=adad481673d2a200f7d9ad9d1f7fa381)

И,если нетрудно,можете подсказать ресурс с руководством по программированию Автокада

А чем тебе этот сайт и форум не "руководство к действию"? ;)
Название: Re: Получить информацию из блока
Отправлено: Denis от 01-11-2015, 17:30:52
Спасибо за ответ!
Сайт конечно руководство к действию,но боюсь вас замучать)
Возник еще вопрос,в том же чертеже есть полилинии между блоками.Правильно ли я понимаю,что координаты полилиний находятся в абсолютной системе координат,а точки привязки для надписей в блоке в относительной системе координат непосредственно для блока?
Возможно ли и их перевести в абсолютную систему?
Название: Re: Получить информацию из блока
Отправлено: Александр Ривилис от 01-11-2015, 18:05:11
Правильно ли я понимаю,что координаты полилиний находятся в абсолютной системе координат,а точки привязки для надписей в блоке в относительной системе координат непосредственно для блока?
Почти. У полилинии есть своя объектная система координат (ОСК или OCS), которая не всегда совпадает с WCS (это то, что ты называешь "абсолютной", а в терминах AutoCAD она называется мировой - МСК)
Для того, чтобы преобразовать координату из системы координат блока в WCS нужно получить матрицу преобразования при помощи метода BlockReference.BlockTransform и преобразовать точку при помощи этой матрицы.
Название: Re: Получить информацию из блока
Отправлено: Denis от 01-11-2015, 23:00:53
Да,работает.Только вот столкнулся с еще одной проблемой.
Задача этого плагина - искать текст атрибута,который находится на заданном расстоянии от линии. Выходы левого блока и типы разъемов находятся без проблем.А вот со входами все хуже.
Строка по типу Ref In не определяется при поиске,причем если делаю диапазон больше,то нахожу Ref Loop Out например (то есть выход на той же линии).
Разница у них в Alignment Point. У кого то есть, у кого-то нет
При этой Автокад ругается, при такой надписи:
Код - C# [Выбрать]
  1. attr_in.HorizontalMode = TextHorizontalMode.TextLeft;

Может вы еще разницу увидите между этими атрибутами?
Название: Re: Получить информацию из блока
Отправлено: Denis от 01-11-2015, 23:08:18
Забыл добавить,что
Код - C# [Выбрать]
  1. attr_in.HorizontalMode = TextHorizontalMode.TextRight;
прекрасно работает
Название: Re: Получить информацию из блока
Отправлено: Александр Ривилис от 01-11-2015, 23:28:30
Задача этого плагина - искать текст атрибута,который находится на заданном расстоянии от линии. Выходы левого блока и типы разъемов находятся без проблем.А вот со входами все хуже.
Подход неправильный. Нужно ориентироваться не на AligmentPoint или Position, а на GeometricExtents. Получаешь прямоугольник, в который вписан текст (Extents3d), трансформируешь его по матрице преобразования из блока в WCS и находишь ближайший к нему конец линии.
Название: Re: Получить информацию из блока
Отправлено: Denis от 07-11-2015, 00:31:36
Спасибо!Получилось.
Попутно появилось еще два вопроса,один по теме,другой нет.
1)Можно ли поменять StartPoint и EndPoint полилинии местами?
2)
Этот вопрос не совсем по теме.
Можно ли задавать AttributeDefinition циклически? по умолчанию он добавляет только последний элемент,что и логично,они идут с одним именем.А как сделать динамически-изменяющееся имя в цикле я не знаю.

Буду очень благодарен,если поможете!
Название: Re: Получить информацию из блока
Отправлено: Александр Ривилис от 07-11-2015, 00:40:29
1)Можно ли поменять StartPoint и EndPoint полилинии местами?
Выполнить реверс полилинии? Можно. http://through-the-interface.typepad.com/through_the_interface/2012/09/reversing-the-direction-of-an-autocad-polyline-using-net.html А нужно ли это?
Можно ли задавать AttributeDefinition циклически?
Этого вопроса я не понял.
Название: Re: Получить информацию из блока
Отправлено: Denis от 07-11-2015, 23:09:18
1)На самом деле очень нужно временами.Я сейчас делаю заполнение кабжура,соответственно привязываюсь к стартовой и конечной точке полилинии. Если человек чертит не в том порядке,в котором я задумывал,то кабжур получается неправильным.
2)Вопрос снят,я сам дурак.  Автокаду не нравилось одинаковые тэги комментариев.
Название: Re: Получить информацию из блока
Отправлено: Александр Ривилис от 07-11-2015, 23:15:16
Я сейчас делаю заполнение кабжура
Если ты решил, что тут собрались одни электрики, то ты ошибаешься. Мне пришлось хорошо погуглить и напрячь мозги, чтобы понять, что речь идёт о "кабельном журнале". ;)
Название: Re: Получить информацию из блока
Отправлено: Denis от 08-11-2015, 16:06:15
Не подумал,извиняюсь)
Название: Re: Получить информацию из блока
Отправлено: CADbloke от 25-11-2015, 05:39:22
Sorry this is in English, I am in Australia. I must be the only other person here who knows what your blocks are. I am working on software for this that makes cable schedules from these drawings: http://www.tvCAD.tv (http://www.tvCAD.tv). If you sign up to the email list at the bottom you can reply to the email I send you with any questions about blocks for broadcast wiring diagrams. I will use Google to translate from Russian if you don't write in English so it is not a problem.

Your block looks a little like a VidCAD block? Your Attributes need to have unique Tags (unique within the block) and not be Constant for them to hold different information. See the attached drawing for an idea of what I mean.
Название: Re: Получить информацию из блока
Отправлено: Denis от 25-11-2015, 10:01:05
Hello.Iwrote down a letter to you on tvCAD's site.My block definetely looks like VidCad block, but with changes in sizes.Also I added functions for hard and soft-options there.Let's have a private chat at mail.