Как программно выбрать штриховку "соответствующую" конкретному блоку?

Автор Тема: Как программно выбрать штриховку "соответствующую" конкретному блоку?  (Прочитано 15928 раз)

0 Пользователей и 8 Гостей просматривают эту тему.

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Всем привет. Суть задачи:
Выделяю множество элементов (блоки и штриховки), среди которых есть блок (который несет в себе определенную инфу) и ему соответствует определенная штриховка (см. скриншот ниже):

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

(Александр Наумович, извиняюсь за видео с ютуба. Просто оно записано не для форума, а для других целей, но здесь уместно для полного понимания вопроса, а нет времени перезаписывать скринкаст.)
Так вот, до недавнего времени в плагине имелся один именно такой блок с высотой/толщиной и одна конкретная штриховка с площадью, поэтому задача решалась просто:
Я получал толщину с блока с конкретным именем и площадь штриховки с конкретным стилем:

Извините, вам запрещён просмотр содержимого спойлеров.


Я понимаю, что не совсем корректно 2 раза пробегаться по выделенным объектам, но до сегодняшнего дня меня это все устраивало и работало все тоже хорошо (очень буду признателен и за предложения насчет улучшения сего момента).
Так вот, что сегодня случилось? :)
Дело в том, что возникла необходимость иметь несколько блоков с высотами/толщинами и несколько штриховок с площадями. То есть пар может быть несколько, а не одна!
И я вот думаю, как связать конкретный блок с конкретной штриховкой.
За целый день, который я провел за рулем, у меня возникло 3 идеи:
1. Определять попадает ли блок на штриховку (данный блок находится на непечатном слое, его можно кинуть поверх штриховки и таким образом программно определить принадлежность)
Я только полагаю, что это можно сделать программно, но не совсем понимаю, как именно.

2. Дать возможность пользователю создавать в каком-то атрибуте блока поле на площадь штриховки, потом программно доставать из блока значение атрибута.
Вроде как простой вариант, но нужно руками создавать поле, что не очень удобно.

3. Создать кастомную штриховку, которая будет нести в себе и инфу о высоте/толщине. :)
Думаю, что такое возможно, но это совсем, пока что, недосягаемо для меня.
Так вот, прошу совета, как лучше всего поступить в данной ситуации (совета с учетом, что потом будет создана тема, как воплотить совет в жизнь;))?

Отмечено как Решение Максим Маркевич 20-09-2016, 14:04:43

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И я вот думаю, как связать конкретный блок с конкретной штриховкой.
Например, через расширенные данные (XData).
1. Определять попадает ли блок на штриховку (данный блок находится на непечатном слое, его можно кинуть поверх штриховки и таким образом программно определить принадлежность)
Я только полагаю, что это можно сделать программно, но не совсем понимаю, как именно.
Что именно непонятно? Как вычислить габариты штриховки, найти её среднюю точку и поместить точку вставки блока в эту точку? Ты это не понимаешь?
3. Создать кастомную штриховку, которая будет нести в себе и инфу о высоте/толщине. :)
Можно в штриховку в расширенные данные вписать эту информацию. Но кое-что мне непонятно. Ты программно штрихуешь или это делает пользователь средствами AutoCAD? Если пользователь, то так сделать не получится.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Например, через расширенные данные (XData).
Пошел читать. :)
Что именно непонятно? Как вычислить габариты штриховки, найти её среднюю точку и поместить точку вставки блока в эту точку? Ты это не понимаешь?
Сейчас мне уже не понятно, зачем находить среднюю точку штриховки и зачем именно туда помещать блок?
Я думал, что он будет лежать в любом месте, но поверх ее, возможно даже частично. И мне было не понятно, как определить, находится ли в полученных габаритах штриховки точка вставки блока?
Можно в штриховку в расширенные данные вписать эту информацию. Но кое-что мне непонятно. Ты программно штрихуешь или это делает пользователь средствами AutoCAD? Если пользователь, то так сделать не получится.
Я ничего не знал о возможности вписки в штриховку каких-либо данных. Поэтому, если там все удобно, то не составит труда создать командный метод (с небольшим интерактивом для пользователя), который бы вставлял штриховку в автокад.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И мне было не понятно, как определить, находится ли в полученных габаритах штриховки точка вставки блока?
Ты не знаешь как определить находится ли точка внутри прямоугольника? ;)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Я ничего не знал о возможности вписки в штриховку каких-либо данных.
Эти данные можно вписать в любой объект/примитив AutoCAD. Структуру данных можешь определять сам.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Ты не знаешь как определить находится ли точка внутри прямоугольника?

Метод трассировки луча? :) Я надеялся, что есть какой-то крутейший метод типа
Код - C# [Выбрать]
  1. public bool ПринадлежитЛиТочкаКонтуру(контур, точка)
В общем, я понял, что данный метод мне не подходит.
Эти данные можно вписать в любой объект/примитив AutoCAD. Структуру данных можешь определять сам.
Вот с этим обязательно поиграюсь. Раз структура формируемая, то это очень круто и удобно!! Спасибо!
Про Xdata: http://adn-cis.org/ispolzovanie-.netapidlya-dobavleniya-i-udaleniya-rasshirennyix-dannyix.html
Спасибо!! :)


Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
ИМХО, самый простой и наглядный способ соотнести блок и штриховку - цвет.
Назначить штриховке и блоку одинаковый цвет, так и соотносить.
Как альтернативу можно использовать группы, т.е. попарно объединять в группы.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как альтернативу можно использовать группы, т.е. попарно объединять в группы.
Кстати, очень неплохая идея. Есть только одна проблема - при копировании в другой чертеж (если в этом может возникнуть необходимость) группы "разваливаются", так как они softpointer и не копируются между чертежами.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
ИМХО, самый простой и наглядный способ соотнести блок и штриховку - цвет.
Есть во мне стереотипы и предрассудки насчет выделения цветом, но согласен, работать все будет, как-то даже очень просто!
Как альтернативу можно использовать группы, т.е. попарно объединять в группы.
Вот это мне уже совсем нравится!!! Просто я никогда программно с группами не работал. Может, есть какая заготовочка по обращению с группами (буду признателен)?

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Как средствами AutoCAD определить расположение точки относительно контура.
Спасибо.:) Что-то я поиском не добрался до этой темы.
Есть только одна проблема - при копировании в другой чертеж (если в этом может возникнуть необходимость) группы "разваливаются", так как они softpointer и не копируются между чертежами.
В принципе, если концепция использования исключает копирование в другой чертеж (как в моей ситуации), то вариант шикарнейший.
Буду разбираться!!
Александр Ривилис, Boxa.Shu уже огромное спасибо за мнение, ссылки и идеи!!
Поработаю с предложенным вариантами, доложу о результатах. Возможно, кому-то когда-то пригодится.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Максим МаркевичАвтор темы

  • ADN Club
  • ****
  • Сообщений: 254
  • Карма: 29
  • Skype: evthisrel
Хотел создать новую тему, но тут есть за что зацепиться.:)
Эти данные можно вписать в любой объект/примитив AutoCAD.
Если говорить о штриховке, то в ней изначально есть кое-какие данные:

Как я понял, их лучше не трогать?
Структуру данных можешь определять сам.
Сильно тут не разгонишься, как я понял:

Как раз-таки, приходится подстраиваться под структуру:

То есть доставать, например, потом строку, с ней работать. Конечно, все не так удобно, как я представлял. Но, в целом, если организовать окошко пользовательское добавления/проверки/удаления данных, то это все очень-очень круто!!!!!!
Решил, что буду пользоваться именно XData, так как это лучший способ из рассмотренных в теме. Ну ведь, реально, нет смысла использовать паровоз из штриховки и блока, если можно обойтись только штриховкой.
Вариант, который предложил Boxa.Shu с группами мне тоже очень понравился, но мне кажется, что он не будет таким удобным в обращении.

Онлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Как я понял, их лучше не трогать?
Правильно понял.
Сильно тут не разгонишься, как я понял:
Какой-то дурацкий перевод (это я не про тебя, а про картинку). Да еще и с ошибками.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение