Файл stl имеет слишком большой размер для импорта в качестве твердого тела

Обновлено: 04.07.2024

Вы можете открыть и вставить файлы из ряда других приложений по моделированию в SpaceClaim для редактирования, а также сохранить свои конструкции SpaceClaim в файлах разных типов. Если вы часто работаете с файлами, отличными от файлов SpaceClaim, мы рекомендуем вам задать параметры файлов для оптимизации процесса импорта и экспорта в соответствии с вашими потребностями.

Настройка параметров импорта и экспорта

Нажмите SpaceClaim Options (Параметры SpaceClaim) в меню File (Файл) для отображения окна SpaceClaim Options (Параметры SpaceClaim).

Щелкните File Options (Параметры файлов) на панели навигации слева.

Выберите тип файла на панели слева, чтобы изменить параметры только для этого типа файла.

Ниже перечислены описания всех параметров.

При попытке ввести значение, которое выходит за пределы допустимого диапазона, на панели Options (Параметры) или в диалоговом окне Options (Параметры) в SpaceClaim возле поля отобразится красный восклицательный знак. Наведите курсор на значок, чтобы увидеть подсказку с допустимыми значениями для параметра.

Задание общих параметров файлов

Щелкните General (Общие) на панели слева.

Установите приведенные ниже флажки:

Load model in background (Загружать модель в фоновом режиме): задание ориентации больших конструкций при их загрузке.

Load lightweight only (Загружать только легковесные компоненты): открытие внешних компонентов в качестве легковесных графических представлений при открытии SCDOC-файлов. Этот параметр отключен, если флажок Load model in background (Загружать модель в фоновом режиме) снят.

Вы не можете отключить (Off) отображение легковесного компонента с помощью флажка в дереве структуры. Легковесные компоненты, в том числе состояние их отображения, невозможно изменить.

  • По умолчанию для данного параметра задано значение OFF (Откл.), что означает, что в случае изменения ссылки, предназначенной только для чтения, при сохранении создается версия.
  • Если данная функция включена, то при сохранении измененные ссылки, предназначенные только для чтения, пропускаются и отображается предупреждение.

Create multiple documents when importing assemblies (Создавать несколько документов при импорте сборок): открытие или вставка сборки, отличной от сборки SpaceClaim, в виде нескольких документов. Сохраняя свою конструкцию, щелкните References (Ссылки), чтобы указать расположение для сохранения документов.

Use matching SpaceClaim documents for faster import (Использовать совпадающие документы SpaceClaim для ускорения импорта): установите этот флажок, если конструкция включает внешний компонент, который был ранее импортирован и преобразован в формат SCDOC-файла SpaceClaim, и вы хотите повторно использовать этот ранее импортированный файл.

Если решение SpaceClaim встроено в производственное производитель, этот флажок игнорируется. В сценарии использования в производстве общепринято изменять геометрию, чтобы наладить производственные процессы и сохранить модель под тем же именем. Установка этого флажка может привести к перезаписи производственной версии.

Automatically save imported documents (Автоматически сохранять импортированные документы): немедленное сохранение открытого или вставленного файла, отличного от файла SpaceClaim, в виде SCDOC-файла. (Если этот флажок не установлен, открытые или вставленный файлы сохраняются только после сохранения конструкции.) Убедитесь, что флажок Save imported document and load as lightweight (Сохранить импортированный документ и загрузить его как легковесный компонент) НЕ установлен, если вы не хотите сохранить импортированные документы.

Improve imported data (Улучшать импортированные данные): улучшение файла при открытии или вставке. Вы можете установить в SpaceClaim флажки Clean and simplify geometry (Очищать и упрощать геометрию), Stitch nearby surfaces together (Сшивать соседние поверхности) и Find coincident surfaces (Находить совпадающие поверхности) в пределах указанного допуска. Если снять этот флажок, файл будет импортирован без улучшений, поэтому он отобразится быстрее, но при этом вам может понадобиться вручную применить улучшения.

Use lightweight assemblies for imported documents (Использовать легковесные сборки для импортированных документов): при установке этого флажка вы можете выбрать один из перечисленных ниже методов загрузки:

Save imported document and load as lightweight (Сохранить импортированный документ и загрузить его как легковесный компонент): если этот флажок установлен, импортированный файл будет открыт в памяти. SCDOC-файл будет создан для каждой части файла, сохранен, а затем загружен в качестве легковесного компонента, что позволит выгрузить тяжеловесные данные из памяти. Вы получите полностью легковесную сборку. Если после этого щелкнуть правой кнопкой мыши один из легковесных компонентов и выбрать команду Load Component (Загрузить компонент), часть очень быстро загрузится в полном объеме. Кроме того, при использовании этого метода отображается цвет импортированных частей. Цвета не сохраняются, если используются приведенные ниже методы. С легковесной моделью невозможно импортировать информацию PMI Технологическая информация об изделии. PMI можно импортировать, если установить флажок Import Part Manufacturing Information (Импортировать технологическую информацию о детали) при импорте файлов CATIA. .

Assembly structure and lightweight geometry (Структура сборки и легкая геометрия): этот метод позволяет импортировать документ, как при использовании метода выше, с созданием легковесных частей в SpaceClaim, но без создания и сохранения SCDOC-файлов. В результате этот параметр использует меньший объем памяти при импорте по сравнению с описанным выше методом. Однако если выполнить команду Load Component (Загрузить компонент) с одним из легковесных компонентов, понадобится повторно импортировать весь документ, чтобы получить все данные для компонента. Компонент Объект Термин, который используется для ссылки на какой-либо объект в эскизе 2D или чертеже 3D. в конструкции, включая компонент конструкции высшего уровня. Каждый компонент содержит какое-либо количество объектов, таких как твердые тела и поверхности, и может содержать подкомпоненты. Компонент может рассматриваться как деталь. Компоненты можно сохранять как отдельный файл. Внешний компонент — это другая конструкция, вставленная как компонент вашей конструкции. Превращение компонента во внутренний предотвращает внесение изменений в файл внешнего компонента. Внешний компонент также можно создать, сохранив компонент как отдельный файл. См. «Легковесные компоненты», « Сборка Иерархия компонентов и подкомпонентов, отображающая связь в конструкции, как показано в дереве Structure (Структура). В производстве — узел, собранный из изготовленных деталей. См. «Инструмент Assembly (Сборка)», «Компонент» » может загружаться очень медленно. Этот метод рекомендуется применить, если вы намереваетесь использовать только легковесные грани, а не тяжеловесную геометрию, либо если вы работаете с импортированными документами меньшего размера. Так как SCDOC-файл не создается и не сохраняется, вы можете отключить (Off) отображение этих легковесных компонентов с помощью флажка в дереве структуры.

Assembly structure only (Только структура сборки): создаются только имя и иерархия компонента. Легковесные грани не создаются.

Import hidden components and geometry (Импортировать скрытые компоненты и геометрию): открытие или вставка скрытых компонентов в файлах CATIA v5, Parasolid Ядро геометрического моделирования Parasolid. Вы можете открывать и вставлять детали и сборки, а также экспортировать детали и сборки. , Pro/ENGINEER, SolidWorks и SketchUp, а также отключение их видимости в дереве структуры.

Раздел Objects to be imported (Импортируемые объекты) включает флажки для приведенных ниже элементов:

В этой небольшой заметке пойдет речь о том, как легко и просто можно убить производительность приложения с помощью библиотеки STL. Охватить всю библиотеку в рамках этого топика не возможно, поэтому будет рассмотрен только один компонент – контейнер std::string. В качестве примера будет показана цена инициализации std::string и, как следствие, продемонстрировано, к чему может привести неоптимальное использование библиотеки. Все нижесказанное особенно остро относится к области gamedev-а.


Итак, в качестве примера возьмем примитивную функцию вычисления хэш-значения строки. Приведу две реализации – одну в c-style, вторую – stl-style с использованием std::string. Ссылка на исходный код тестового примера.

  1. uint32 hash_c( const char * str)
  2. uint32 h = 0;
  3. const int len = strlen(str);
  4. for ( int i = 0; i < len; ++i)
  5. h = 31*h + str[i];
  6. return h;
  7. >
  8. uint32 hash_stl( const std:: string & str)
  9. uint32 h = 0;
  10. for (std:: string ::const_iterator it = str.begin(); it != str.end(); ++it)
  11. h = 31*h + + *it;
  12. return h;
  13. >

Прошу обратить внимание на то, что в функции фактически будут передаваться си-шные строки (const char*), таким образом, во втором случае будет происходить создание временного объекта std::string. Повторюсь, суть тестов – показать цену инициализации STL-строки.

Теперь замерим скорость выполнения функций, для достоверности результатов тестов сделаем циклы вычислений из 256*1024 проходов. Для каждой функции будет замерена производительность на разных размерах строки в 8, 16 и 32 байт (об этом будет подробнее описано чуть ниже).

Примечание: пример собирался компилятором от 2010 студии из командной строки, ключики компилятора приведены рядом.

  1. cl /EHsc /O2 main.cpp
  2. *************************************
  3. string length: 8 bytes
  4. const char *: 6.20 msec, hash: 312017024
  5. std:: string : 12.62 msec, hash: 312017024, 2.04x
  6. total allocs: 0
  7. *************************************
  8. string length: 16 bytes
  9. const char *: 11.78 msec, hash: 2657714432
  10. std:: string : 131.21 msec, hash: 2657714432, 11.14x
  11. total allocs: 262144
  12. *************************************
  13. string length: 32 bytes
  14. const char *: 23.20 msec, hash: 3820028416
  15. std:: string : 144.64 msec, hash: 3820028416, 6.24x
  16. total allocs: 262144

Здесь начинается самое интересное. По результатам тестов видно, что самая маленькая просадка в производительности составляет 2 раза, самая большая – 11 раз. При этом для строк с размером более 16 байт появляются дополнительные аллокации на heap-е. На 32-х байтных строках затраты на выделения памяти немного нивелируются на фоне вычислений и просадка составляет чуть меньше — почти в 2 раза ниже, чем на строках длиной 16 байт. Откуда появляются аллокации?

std::string имеет свой внутренний буфер для хранения строки, размер которого зависит от реализации STL. К примеру, в реализации STL из состава MS Visual Studio 2010 размер этого буфера равен 16 байт, о чем можно убедиться, заглянув в заголовочные файлы библиотеки (переменная _BUF_SIZE). При инициализации std::string происходит проверка на размер строки и в случае, если он меньше размера внутреннего буфера, строка сохраняется в этом буфере, иначе – происходит выделение памяти нужного размера на heap-е, и уже туда копируется строка. Как видим, при каждой инициализации std::string как минимум происходит копирование данных, а также дополнительные аллокации в случаях, если размер строки превышает размер внутреннего буфера std::string. Именно поэтому мы можем наблюдать падение производительности в релизной сборке вплоть до 11 раз в купе с аллокациями, которые приводят к фрагментации памяти. Последний момент является серьезной проблемой в мире консолей, где объем оперативной памяти жестко фиксирован и отсутствует виртуальная память.

Теперь, пожалуй, стоит привести результаты тестов в дебаг сборке.

  1. cl /EHsc /MDd /RTC1 /ZI main.cpp
  2. *************************************
  3. string length: 8 bytes
  4. const char *: 24.74 msec, hash: 312017024
  5. std:: string : 4260.18 msec, hash: 312017024, 172.23x
  6. total allocs: 262144
  7. *************************************
  8. string length: 16 bytes
  9. const char *: 34.87 msec, hash: 2657714432
  10. std:: string : 7697.69 msec, hash: 2657714432, 220.76x
  11. total allocs: 524288
  12. *************************************
  13. string length: 32 bytes
  14. const char *: 58.38 msec, hash: 3820028416
  15. std:: string : 14169.49 msec, hash: 3820028416, 242.70x
  16. total allocs: 524288

Отлично! Просадка производительности в эпичные 240 раз! Что и следовало ожидать. Конечно, в критических ситуациях можно изменить Debug Information Format c /ZI (edit & continue) на более быстрый /Zi, а также выключить различные проверки на срыв стека и неинициализированные переменные (/RTC1), и тем самым добиться более высокой производительности, но в таком случае пропадет весь смысл дебаг сборки.

Мораль. STL, без сомнения, инструмент удобный и мощный, однако нужно иметь представление о том, как он устроен и, из ходя из этого, тщательно выбирать места где его использование не приведет к печальным последствиям. И это относится не только к std::string, но и к другим компонентам. Поэтому, прежде чем использовать STL, нужно дважды думать про аллокации на heap-е, про фрагментацию памяти и про локальность данных.

Данный вопрос очень часто возникает при переброске модели из сеточного формата в CAD
Сейчас он встал по переписке с пользователем DEM
Известные и опробованные мной варианты на сегодняшний день.
1) Распознавание сеточной геометрии средствами солидворкс. По моему работает оно довольно плохо, во всяком случае у меня никогда не получалось
2) Rhino - команды mesh to surface . Данная программа замечательна тем, что ориентирована одинаково неплохо на оба типа геометрии, то есть имеет наборы команд и для того и для другого, а также поддерживает пару десятков разнообразных форматов обеих типов. Пробовал - в целом хорошо на простой геометрии
3) Salome-Platfrom. В geom модуле File>Import>Выбрать stl, Затем Repair>Union Faces.
Получается нормально для плоских поверхностей без скруглений. После применения New Entity > explode возникает 2 Faces и куча Edges оставшихся от сетки. Далее можно попробовать выделить Faces с нажатым shift и применить New Entity > Build для получения общей Shell
Можно попробовать Repair >Remove extra edges с опциями. В общем данная программа по сути конструктор и дает доступ ко всем составным частям твердотельной модели, зависит только от знаний пользователя. Файл stl прикладываю в архиве
Какие есть еще варианты?

Последний раз редактировалось ETCartman, 18.05.2016 в 04:09 .

Salome-Platfrom
ТО что надо.
Скорее всего в пайтоне тоже есть какой то модуль который работает с сетками, он скорее всего тоже может преобразовывать.
Там в принципе алгоритм для плоских фигур довольно простой.

Скорее всего в пайтоне тоже есть какой то модуль который работает с сетками

Нет, я вообще питоном мало занимался. Только поставил и запустил эту штуку

Все открытое что есть, типа freecad и occ (и все что появится в будущем) - основано на том же Salome, то есть на открытой библиотеке opencascade
В Salome тоже есть интерфейс к пайтон и поддерживаются скрипты с включением любой функции которая есть в интерфейсе. Также есть генератор макросов из процесса интерактивной работы
DEM можете выложить модель stl из скада чтобы попробовать ее преобразовать и размешировать (например из треугольной сетки в структурированную)
Естественно все данные кроме геометрии будут утеряны. И колонны тоже я подозреваю будут утеряны после перевода в stl
Еще таким образом можно получить тела из оболочек. То есть после преобразования оболочек ограничивающих замкнутую полость можно получить уже тела.

ETCartman
Но ведь существуют и другие форматы открытые, типа iges\dxf\msh

Форматы геометрии есть сеточные (представление всего треугольниками) и нативные (условно точные) как STEP/IGES. Первые сравнительно просто программируются но могут терять точность в процессе преобразований. Самые мощные программы для работы с сеточной геометрией - это Blender3d и 3dMax. Это не CAD программы - их назначение это арт и визульное представление объектов.
Opencascade единственная в своем роде открытая библиотека которая работает с нативными форматами. То есть их и закрытых библиотек во всем мире по пальцам можно пересчитать, потому что это программы с очень сложной математикой, требующие долгой профессиональной разработки большими коллективами и длительного тестирования. Естественно, большинство открытых решений просто берет opencascade за основу. Хотя есть мелкие программки типа SolveSpace и gcad3d которые сами чего то делают, но там очень бедная функциональность как правило и они на многое не претендуют.
dxf это по сути сеточный формат в 3д, для 3д не удобный. msh это формат сетки в GMSH, но там речь идет о конечно-элементной сетке. Для работы с твердотельной геометрией в GMSH также встроен Opencascade
Выложите пожалуйста какой нибудь практический stl модели из скада - я попробую преобразовать его в твердотельную геометрию с возможностью последующей доработки в CAD

Последний раз редактировалось ETCartman, 18.05.2016 в 10:26 .

в dxf тела хранятся как бинарный объекты

ETCartman
Вот два файла.
В Salome-Platfrom к сожалению не нашел возможности, преобразования сетки в суфрайсы(у меня под винду версия).
Думаю наверное все таки будет самым оптимальным установить python и pythonocc
Потом с помощью библиотеки работать с данными.
Можно будет и отображать результаты расчетов и сетку делать, т.к. для python и интерфейс GMSH есть.

И под винду и под линукс работает одинаково. Сетка автоматом переводится в поверхности при импорте (рисунок 1 в топ посте) далее задача - сделать их плоскими просто (убрать треугольники)
PS после объединения поверхностей нужно выделить фичу в дереве и выбрать ПКМ Show Only (иначе показывается все - в том числе и сетка)
Вот скрины для выложенного файла 1.stl
К загруженному stl применяется Remove Extra Edges с опцией Union Faces (чтобы видеть результат надо применить к этой фиче show only)
Полученная поверхность может быть перемеширована под другую сетку (показано на рисунке - алгоритм Netgen1D-2D с рекомбайном треугольников в квадраты)
Также выкладываю zip с файлом HDF

Последний раз редактировалось ETCartman, 18.05.2016 в 15:45 .

ETCartman
А msh может подгрузить Salome-Platfrom.
И еще там по сложнее файл был, его уже по этапам надо будет конвертить??

msh 1 и 2 (3 планируется) - внутренний сеточный КЭ формат GMSH и больше нигде не поддерживается.
Для модели номер 2 разница в том что загрузка stl выполняется долго. Такие вещи в Salome (как и в GMSH) лучше делать скриптами в BATCH режиме (в этом случае программа не подвисает и можно оперировать очень большими сетками)
Хотя в данном случае я делал все интерактивно (просто свернул окно программы и оно грузилось само по себе полчаса). Программа забрала примерно 1,5 ГБ оперативки (64 бит версия). Операция слития сурфайсов заняла несколько секунд.
Меширование лучше делать с крупной сеткой сначала (если много элементов надо в настройках поменять предельное количество отображаемых элементов).
Netgen не очень скоростной мешер (примерно раз в 5 медленнее коммерческих) Где то я читал что его можно приблизить по скорости к коммерческим (просто отключить какие то опции типа всяких проверок, но я не в курсе как)

Последний раз редактировалось ETCartman, 18.05.2016 в 18:07 .

Блин круто.
Надоть подумать, что все таки лучше использовать.
Либо Salome-Platfrom либо FreeCad.
Еще надо придумать как сохранять информацию о стержнях.
В общем то похоже создание своего препроцессора вполне возможно.

На самом деле такое преобразование работает хорошо только для простых плоских сеток. Использовать конечно перспективней Salome потому что это оригинальная программа от производителей открытой библиотеки (французско - нижегородской компании), а Freecad всего лишь попытка одиночек-любителей на основе той же самой библиотеки получить некий универсальный CAD.
Функциональность Salome намного выше и она заточена как раз на построение сеток для профессиональных расчетов.
На самом деле сложная сеточная геометрия транслируется в твердотельную с множеством артефактов и дефектов. И ее приходится дорабатывать много вручную перед тем как построить сетку. В Salome есть целое семество функций Repair для этой цели - но оно тоже помогает не всегда. То же самое верно для Rhino, который предназначен для архитекторов и модели выдает не очень корректные с точки зрения автоматической генерации сетки (например много дублирующихся линий, дыры в поверхностях и тд). Я пробовал считать на основе райновских моделей - получается очень со скрипом и тоже надо вручную дорабатывать (что сложнее чем построить с нуля иногда).
Мне смысл передачи stl из SCAD не очень понятен. Тогда уж логичней строить все в Salome или в каком то другом профессиональном твердотельном CAD с последующим мешированием в Salome и передачей сетки (с группами узлов и элементов) в SCAD (либо автоматическим формированием текстового файла SCAD на основе данных Salome)
Так чтобы свободно гонять сетки туда сюда - это сложно и граничные условия будут каждый раз теряться.
Salome идет в паре с расчетной программой Code-Aster, для сквозного проектирования и расчета. Можете изучить этот механизм (на основе именованных групп) и приметь то же к SCAD. Получится как бы интерфейс к SCADу
Кроме того сам Salome поддерживает создание пользовательского интерфейса, так что все операции можно встроить прямо в его окна. Там есть примеры такого рода.
Второй вариант работы с STL сеткой в Salome - это импортировать ее сразу в mesh модуль. В этом случае импорт происходит почти мгновенно (так как не требуется распознание и перевод сетки в твердотельные треугольные поверхности). В mesh модуле есть свои операции - например можно автоматом объединить треугольники для получения структурированной сетки. Можно задать группы, проверить всевозможные параметры качества и так далее (перекинуть в другие программы)

Последний раз редактировалось ETCartman, 19.05.2016 в 01:07 .

Что то не получается через Salome получить суфрайсы.
Последовательность у меня следующая.
1. Запускаю программу Salome.
2. Захожу в модуль MESH
3. Файл импорт stl
4. Захожу в модуль Geom
5. Выбираю Repair>Union Faces
И выскакивает окошко.

логично не получается. потому что что union faces команда geom модуля для геометрии. а если вы загрузили сетку в mesh модуле - то у вас геометрии нет (потому что сетка геометрией не является сама по себе). чтобы применять команды geom модуля нужно импортировать stl в нем же

логично не получается. потому что что union faces команда geom модуля для геометрии. а если вы загрузили сетку в mesh модуле - то у вас геометрии нет (потому что сетка геометрией не является сама по себе). чтобы применять команды geom модуля нужно импортировать stl в нем же

А прям в программе нельзя это сделать.
А то получается что стержни теряются.

все в одной программе, только модули разные. в первом случае из геом модуля грузится сеточный формат stl и распознается как геометрия (занимает некоторе время)
После чего выполняются преобразования полученной геометрии в geom модуле (можно достроить модель, добавить убавить - работать будете как в CAD с геом примитивами типа сурфайсов) После преобразований в геом модуле можно перейти в меш модуль и автоматически разбить нужную сетку на сурфайсах.
во втором случае сетка импортируется в mesh модуле как сетка и с ней можно выполнять любые преобразования из тех, что есть в mesh модуле (например рекомбинировать, сглаживать сетку, объединять ее с другой сеткой, создавать группы и тд) При этом естественно геом модуль сетку не видит, потому как это сеточная геометрия а не nurbs
Также во freecad есть модуль сеточный и есть твердотельный (на основе библиотек Salome) и они не пересекаются.
вот 1 мин видео первого способа во вложении

Последний раз редактировалось ETCartman, 19.05.2016 в 17:56 .

Я правильно понял задачу - нужно из скадовской сетки получить один полигон с отверстиями и сохранить это в dxf?

Часто скачивая ту или иную модель сталкиваемся с ситуацией, что в ней что-то не устраивает, или хочется изменить. Но когда стандартными средствами попытаться открыть формат STL в CAD программе, мы получаем лишь его графическую оболочку, которую невозможно редактировать. В этом уроке разберем как легко и просто открыть, распознать, внести изменения и редактировать STL-модель а так же как перевести ее в твердое тело.

Видеокурс по этой теме

Видеокурс «Моделирование в SOLIDWORKS. Полное руководство»

Видеокурс «Моделирование в SOLIDWORKS. Полное руководство»

Как открыть stl в SolidWorks

Запускаем программу SolidWorks и нажимаем: Файл > Открыть

Во всплывающем новом окне переходим к Все файлы и указываем STL формат.

STL-модель в SolidWorks

После данной операции появляется кнопка “Параметры”. Нажимаем на ее.

STL-модель в SolidWorks

Импорт stl в SolidWorks

По умолчанию в программе установлена опция импортировать этот формат как графическое тело, и, если не изменить эту опцию, программа всегда будет открывать, грубо говоря, пустую картинку.

STL-модель в SolidWorks

Как перевести stl в твердое тело SolidWorks

Указываем тип импортирования как твердое тело. Выбираем единицы измерения миллиметры (или же другой нужный формат).

STL-модель в SolidWorks

После того как параметры установлены, выбираем необходимый STL-файл и нажимаем на кнопку “Открыть”.

Читайте также: