REMOVEALLPROXY

Автор Тема: REMOVEALLPROXY  (Прочитано 94121 раз)

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

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #135 : 13-05-2016, 08:33:14 »
На битбукете обновил версию исходников. Обозначенная выше ошибка исправлена, проект переделан так, чтобы при компиляции на выходе получался Bundle-пакет. Помимо аглицкого описания расширения присутствует и на русском. Откомпилированная версия так же обновлена (https://bitbucket.org/Andrey-Bushman/cadproxy/downloads ).

Есть незначительное замечание по коду.
А именно использование Polyline3d вместо Polyline, как в оригинале у Александра, для  отрисовки габаритов прокси,( если конечно кому-то нужен именно такой режим отображения)

Все дело в том, что Polyline для 4х вершин создает один объект в базе данных, внутри которого размещены все вершины.
а Polyline3d или Polyline2d создадут по 6 объектов DbObject
https://yadi.sk/i/6krjM-vtrg24c


Что скорее всего нежелательно для больших чертежей.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #136 : 13-05-2016, 10:14:38 »
Спасибо, гляну.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #137 : 13-05-2016, 10:30:08 »
А именно использование Polyline3d вместо Polyline, как в оригинале у Александра, для  отрисовки габаритов прокси,( если конечно кому-то нужен именно такой режим отображения)
Стоп... В строке 110 кода функции ExplodeProxyInBTR я вижу использование AcDb3dPolyline. Мой C#-вариант идентичен. Поторопился я тебе плюсик ставить... :)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #138 : 13-05-2016, 10:37:54 »
Александр Наумович, а почему вы в упомянутом выше фрагменте кода, создающем 3D-полилинию не захотели для неё вызывать метод SetDatabaseDefaults()? Ведь вы в коде инициализировали не все свойства, которые настраивает SetDatabaseDefaults()... Т.е. не подправленными остались значения для Linetype scale, Visibility, Plot style name и Line weight.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #139 : 13-05-2016, 10:48:43 »
Мой C#-вариант идентичен.
хм. а я смотрел не исходник, а прогнал ExplodeProxy2007.arx в 2008 автокаде. Более новые версии не смотрел.
так вот там рамки polyline создались.

В любом случае polyline на 4 вершины примерно в 6 раз меньше памяти займет чем Polyline3d.
 т.к. все объекты входящие в Polyline3d(3dPolylineVertex, SequenceEnd) это Entity, которые хранят информацию о стилях и т.д. ну ты понял - лишнюю инфу))))

https://yadi.sk/i/NBdjWBeArgBZ9

Кружком обведены координаты, а все остальные свойства в комплекте))))))
Еще обрати внимание на ползунок, свойств для вершин и SequenceEnd примерно в 2 раза больше. и все храниться в чертеже.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #140 : 13-05-2016, 11:01:05 »
Еще обрати внимание на ползунок, свойств для вершин и SequenceEnd примерно в 2 раза больше. и все храниться в чертеже.

и сравни это с вершинами Polyline
AddVertexAt(int index, Point2d pt, double bulge, double startWidth, double endWidth);

явно Polyline3d проигрывает Polyline по компактности ;-)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #141 : 13-05-2016, 11:02:02 »
В любом случае polyline на 4 вершины примерно в 6 раз меньше памяти займет чем Polyline3d.
Однако Polyline использует 2D-точки в то время как прокси может быть смещённым и повёрнутым относительно всех трёх осей.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: REMOVEALLPROXY
« Ответ #142 : 13-05-2016, 11:03:29 »
А именно использование Polyline3d вместо Polyline, как в оригинале у Александра, для  отрисовки габаритов прокси,( если конечно кому-то нужен именно такой режим отображения)
У меня AcDb3dPolyline. И сделано это умышленно, так как габариты могут в пространстве располагаться как угодно. AcDbPolyline пришлось бы крутить в пространстве. Да и вообще это как раз тот случай, когда полезной информации минимум, т.к. это информация о габаритном контейнере, а не о виде прокси-примитива. Заниматься дополнительной оптимизаций я счел лишним, но это не мешает тебе поступить иначе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #143 : 13-05-2016, 11:04:18 »
И сделано это умышленно, так как габариты могут в пространстве располагаться как угодно.
То, о чём я и писал в предыдущем сообщении.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #144 : 13-05-2016, 11:07:40 »
Polyline использует 2D-точки в то время как прокси может быть смещённым и повёрнутым относительно всех трёх осей.

И? В коде построения габаритной рамки это не учитывается(не используется), а создается габаритный прямоугольник лежащий на одном уровне ;-)

У любой Entity есть свойство:
Matrix3d Ecs
в том числе у Polyline и даже SequenceEnd
смещай, поворачивай и масштабируй)

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: REMOVEALLPROXY
« Ответ #145 : 13-05-2016, 11:10:29 »
Привалов Дмитрий
Ну по-хорошему нужно было бы строить ящик (AcDb3dSolid), чтобы он соответствовал габаритному контейнеру. Но кому это нужно? 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: REMOVEALLPROXY
« Ответ #146 : 13-05-2016, 11:14:55 »
У любой Entity есть свойство:
Matrix3d Ecs
в том числе у Polyline и даже SequenceEnd
смещай, поворачивай и масштабируй)
Ну по-хорошему нужно было бы строить ящик (AcDb3dSolid), чтобы он соответствовал габаритному контейнеру. Но кому это нужно? 
Оба варианта содержат разумное зерно, однако пока меня вполне устраивает и текущий вариант. Исходники в открытом доступе, так что любой желающий может их скопировать и подправить как ему нравится.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #147 : 13-05-2016, 11:17:48 »
Ну по-хорошему нужно было бы строить ящик (AcDb3dSolid), чтобы он соответствовал габаритному контейнеру. Но кому это нужно? 
скорее всего не нужно, на крайний случай можно и Polyline выдавить с помощью свойства Thickness

насколько я понял GeometricExtents выдаст габарит без учета Ecs т.е. это 2 габаритные точки мин и макс, без всякого поворота. Или я не прав?

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 533
  • Карма: 117
Re: REMOVEALLPROXY
« Ответ #148 : 13-05-2016, 11:31:08 »
насколько я понял GeometricExtents выдаст габарит без учета Ecs т.е. это 2 габаритные точки мин и макс, без всякого поворота. Или я не прав?

Т.е. я подозреваю ,что габаритный куб не повернут также, как и сам примитив в пространстве. И скорее всего он всегда без поворота и учитывает габариты проекций примитивов по плоскостям координатной системы.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: REMOVEALLPROXY
« Ответ #149 : 13-05-2016, 11:43:14 »
Грани габаритного контейнера всегда параллельны осям МСК (кроме случая когда примитив внутри блока, вставленного с поворотом).
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение