Как выполнить сечение CAD-модели (комментарии к странице) https://quaoar.su/blog/ CAD developer's blog. Tue, 19 Jun 2018 13:44:14 +0300 en-ru MaxSite CMS (http://max-3000.com/) Copyright 2024, https://quaoar.su/blog/ Dmitrii к "Как выполнить сечение CAD-модели" https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-742 https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-742 Fri, 07 May 2021 01:12:33 +0300 none@none.com (Dmitrii) Добрый день! По какому принципу можно сделать проекцию нескольких объектов так, чтобы иметь возможность понять какому объекту принадлежат спроецированные элементы?

Я думал, что нужно сделать проекцию каждого объекта в отдельности, но столкнулся с проблемой. При пообъектном проецировании не учитывается то, что проецируемое тело может перекрываться другим, как будто в сцене находится только один объект. Если же проецировать все интересующие тела разом, то не ясно как потом определить какому объекту принадлежат линии. Вот картинка демонстрирующая эти два подхода - https://i.ibb.co/3sHkZtw/pic.png

]]>
Dmitrii к "Как выполнить сечение CAD-модели" https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-744 https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-744 Fri, 07 May 2021 19:48:03 +0300 none@none.com (Dmitrii) Я нашел способ, как проецировать объекты по отдельности, чтобы знать какому объекту принадлежат линии проекции.

1) В polyAlgo необходимо добавить все объекты (напр. box и sphere):

Handle(HLRBRep_PolyAlgo) polyAlgo = new HLRBRep_PolyAlgo;

polyAlgo->Projector(projector);

polyAlgo->Load(sphere);

polyAlgo->Load(box);

polyAlgo->Update();

2) Для каждого тела (по отдельности) произвести получение геометрии, передовая в методы VCompound и OutLineVCompound нужные объекты. Ниже я получаю все линии проекция принадлежащие объекту sphere:

TopoDS_Shape vcompound;

vcompound = HLRToShape.VCompound(sphere);

if (!vcompound.IsNull())

BRep_Builder().Add(hlrShape, vcompound);

vcompound = HLRToShape.OutLineVCompound(sphere);

if (!vcompound.IsNull())

BRep_Builder().Add(hlrShape, vcompound);

3) Результат проекции для тела sphere: https://i.ibb.co/P1gyMrC/pic2.png (https://ibb.co/zPZgFmf)

Я все делаю верно или есть более хорошее решение?

]]>
Quaoar к "Как выполнить сечение CAD-модели" https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-745 https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-745 Fri, 07 May 2021 21:41:18 +0300 none@none.com (Quaoar) Дмитрий, признаюсь, не имею об этом ни малейшего понятия :) Но вопрос хороший, можно повесить вместе с найденным вами решением отдельным постом. Я начал смотреть исходники HLRTest.cxx, и мое внимание привлекла структура HLRTopoBRep_OutLiner, но я не успел с ней поэкспериментировать. Если HLR работает, то хорошо. Производительность там неоптимальная, в любом случае, но для одиночных деталей и маленьких сборок сгодится.

]]>
Dmitrii к "Как выполнить сечение CAD-модели" https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-747 https://quaoar.su/blog/page/kak-vypolnit-sechenie-cad-modeli#comment-747 Sat, 08 May 2021 13:00:03 +0300 none@none.com (Dmitrii) Было бы здорово найти оптимальное решение этой задачи. Я пытался найти, что-то на просторах сети на эту тему, но безрезультатно. Может стоит создать тему на официальном форуме?

Вы ищите какие-то зацепки непосредственно в исходниках? Я использую документацию, но к сожалению она скудна на описания и не ясно, что из себя представляет HLRTopoBRep_OutLiner.

]]>