Самый быстрый способ создания объектов Face и Edge в Sketchup - PullRequest
1 голос
/ 27 июля 2010

Мне нужно отобразить сетку из нескольких тысяч полигонов в Google Sketchup. Я считаю, что add_face имеет тенденцию становиться медленнее с увеличением числа граней в модели. Я полагаю, что это происходит из-за некоторого алгоритма обнаружения краев, который Sketchup работает за кулисами. Надеемся, что должен быть какой-то способ подавить это обнаружение ребер или другую обработку, которую выполняет Sketchup, пока все грани не будут добавлены в модель.

Я обнаружил, что add_faces_from_mesh и fill_from_mesh намного быстрее, но в итоге получаю сетку, состоящую из Surface экземпляров вместо объектов Face и Edge, которые я ищу.

Итак, какой самый быстрый способ создания модели, состоящей из Face и Edge объектов в Sketchup? Есть ли способ генерировать Edge и Face объекты из Surface объекта?

Обновление: Я только что прочитал здесь , что использование Model::start_transaction и Model::commit_transaction может быть использовано для ускорения, но я обнаружил, что улучшения не очень значительны. Что-нибудь еще, что я могу сделать?

Ответы [ 2 ]

1 голос
/ 26 декабря 2010

Просто чтобы уточнить - add_faces_from_mesh и fill_from_mesh действительно добавьте края и грани - однако поведение по умолчанию - создание сетки с мягкими и гладкими краями.Если у вас есть набор граней, соединенных мягкими краями, они будут обработаны SketchUp как поверхность, и в окне «Информация о сущности» будет указано «Поверхность» при выборе их.Однако - внутренне это все еще просто набор ребер и граней - SketchUp не имеет объекта Surface.

Что касается Model::start_transaction - вы должны указать true для второго аргумента disable_ui, чтобы увидеть любое увеличение скорости.Но, как вы заметили, SU очень медленно добавляет сущности - чем больше вы добавляете в коллекцию сущностей, тем медленнее получается.Абсолютно быстрый способ добавления сущностей - fill_from_mesh.

1 голос
/ 29 июля 2010

Я нашел add_faces_from_mesh и fill_from_mesh намного быстрее но я в конечном итоге с сеткой, состоящей из Surface экземпляров вместо Face и Edge объекты, которые я ищу.

Вызов add_faces_from_mesh или fill_from_mesh с параметром smooth_flags, явно установленным на ноль, корректно создает объекты Face и Edge. Документация Sketchup утверждает, что smooth_flags по умолчанию равен нулю ... мои испытания показывают иначе.

...