Площадь 3д тела в автокаде
Перейти к содержимому

Площадь 3д тела в автокаде

  • автор:

Определение площади поверхности и объема тел в AutoCAD на VBA.

В свободное от работы время разрабатываю 3D САПР на базе AutoCAD.
Возникла проблема нахождения объема и площади поверхности деталей, для расчета количества антикоррозионного покрытия и пр.
ActiveX модель AutoCAD` не поддерживает таких данных на прямую, но существуют команды (_area, _massprop).
Вопрос, возможно ли получить из базы нужные данные, вычислить или необходимо скрестить VBA с AutoLisp?

Просмотров: 19686

shumilovvv
Посмотреть профиль
Найти ещё сообщения от shumilovvv

Регистрация: 02.10.2008
Сообщений: 3,685

Если примитив — 3d solid, то у него есть свойства volume. Из справки:

Sub Example_Volume() Dim boxObj As Acad3DSolid Dim length As Double, width As Double, height As Double Dim center(0 To 2) As Double center(0) = 5#: center(1) = 5#: center(2) = 0 length = 5#: width = 7: height = 10# Set boxObj = ThisDrawing.ModelSpace.AddBox(center, length, width, height) Dim NewDirection(0 To 2) As Double NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1 ThisDrawing.ActiveViewport.direction = NewDirection ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport ZoomAll Dim Volume As Double Volume = boxObj.Volume MsgBox "Объем " & Volume, , "Volume Пример" End Sub

__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка — ложка понарошку,
А по правде, — это лом!

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810

Объем для 3Д-солида получить не проблема: obj.Volume. Как получить площадь твердого тела чисто программно, без применения командных методов — не знаю.

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Регистрация: 02.10.2008
Сообщений: 3,685
А что, разве чтение свойства примитива в коде программы — это не «чисто программно»?

__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка — ложка понарошку,
А по правде, — это лом!

Инженер технолог по проектированию магистральных нефтепрводов

Регистрация: 07.05.2009
Сообщений: 9

за obj.Volume спасибо, оказалось не сложным посчитать объем из моментов инерции теперь буду искать нахождение площади поверхности

shumilovvv
Посмотреть профиль
Найти ещё сообщения от shumilovvv

Регистрация: 02.10.2008
Сообщений: 3,685
Сообщение от shumilovvv

за obj.Volume спасибо, оказалось не сложным посчитать объем из моментов инерции теперь буду искать нахождение площади поверхности

Ну, моменты инерции-то здесь причем. А площадь поверхности. Может, как то скопировать все грани и снять площадь с них? Хотя как это сделать программно. Может, скопировать солид, заэксплодить и пройтись по объектам-поверхностям?

Однако, метод explode к солидам отчего-то не применим, в отличие от команды автокада.

__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка — ложка понарошку,
А по правде, — это лом!

Последний раз редактировалось AlexV, 07.05.2009 в 09:56 .

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
AlexV, по-моему, у объекта поверхность (Surface) отсутствует понятие площади.

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Регистрация: 02.10.2008
Сообщений: 3,685
Сообщение от Кулик Алексей aka kpblc
AlexV, по-моему, у объекта поверхность (Surface) отсутствует понятие площади.

И правда, отсутствует. Плоские участки солида при explode превратятся в регионы, их площадь посчитать легко. А вот с криволинейными как быть..

__________________
. Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка — ложка понарошку,
А по правде, — это лом!

программист, рыцарь ObjectARX

Регистрация: 09.05.2005
Сообщений: 2,406
А в ObjectARX у 3DSolid площадь есть (намек на GeomProps — я там делал возможность вызова из VBA)

Александр Ривилис
Посмотреть профиль
Посетить домашнюю страницу Александр Ривилис
Найти ещё сообщения от Александр Ривилис

Инженер технолог по проектированию магистральных нефтепрводов

Регистрация: 07.05.2009
Сообщений: 9

Нашло расчетное решение! я конечно не математик но постараюсь по понятней.
Отношение площади к объему произвольного тела равно отношению площади к объему параллелепипеда в которое это тело вписано.

shumilovvv
Посмотреть профиль
Найти ещё сообщения от shumilovvv

Регистрация: 22.02.2007
Сообщений: 2,840
Сообщение от shumilovvv

Нашло расчетное решение! я конечно не математик но постараюсь по понятней.
Отношение площади к объему произвольного тела равно отношению площади к объему параллелепипеда в которое это тело вписано.

Извините — но по моему это бред. Я в один и тот-же паралелепипед могу вписать бесконечное множество тел — и что у всех них будет одинаковое отношение объем/плащадь поверхности?

__________________
Когда в руках молоток все вокруг кажется гвоздями.

программист, рыцарь ObjectARX

Регистрация: 09.05.2005
Сообщений: 2,406
Сообщение от Дима_

Извините — но по моему это бред. Я в один и тот-же паралелепипед могу вписать бесконечное множество тел — и что у всех них будет одинаковое отношение объем/плащадь поверхности?

Александр Ривилис
Посмотреть профиль
Посетить домашнюю страницу Александр Ривилис
Найти ещё сообщения от Александр Ривилис

Инженер технолог по проектированию магистральных нефтепрводов

Регистрация: 07.05.2009
Сообщений: 9

Для тех кто не верит, могут не верить. Для тех кто сомневается, данный способ я наковырял из курса по интегральному исчислению проверил для пяти произвольных фигур получил тоже значение, что и выдает команда _area.

shumilovvv
Посмотреть профиль
Найти ещё сообщения от shumilovvv

Регистрация: 24.07.2005
Сообщений: 1,335

не любое тело можно вписать в параллелепипед — ето раз.
два: нужно сечь тело с опр. шагом и вычислять площадь сечений, а потом сложить площади и умножить на шаг.

LISP, C# (ACAD 200[9,12,13,14])

Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,810
Sleekka, скажи, а зачем это?

__________________
Моя библиотека lisp-функций

Обращение ко мне — на «ты».
Все, что сказано — личное мнение.

Кулик Алексей aka kpblc
Посмотреть профиль
Посетить домашнюю страницу Кулик Алексей aka kpblc
Найти ещё сообщения от Кулик Алексей aka kpblc

Инженер технолог по проектированию магистральных нефтепрводов

Регистрация: 07.05.2009
Сообщений: 9
Сообщение от Sleekka

не любое тело можно вписать в параллелепипед — ето раз.
два: нужно сечь тело с опр. шагом и вычислять площадь сечений, а потом сложить площади и умножить на шаг.

object.GetBoundingBox какраз возвращает противоположные вершины этого самого параллелепипеда, по полученным точкам находим площадь и объем, объем тела поверхность которого мы ищем возвращает obj.Volume, днлим одно на другое и получаем площадь

shumilovvv
Посмотреть профиль
Найти ещё сообщения от shumilovvv

программист, рыцарь ObjectARX

Регистрация: 09.05.2005
Сообщений: 2,406
Сообщение от shumilovvv

Для тех кто не верит, могут не верить. Для тех кто сомневается, данный способ я наковырял из курса по интегральному исчислению проверил для пяти произвольных фигур получил тоже значение, что и выдает команда _area.

Контрпример: Есть шар. Из него вырезан по оси цилиндр. Площадь целого шара и шара без цилиндра разная (в площадь включается еще и площадь боковой поверхности цилиндра). Зато и целый шар и «выгрызенный» вписываются в один и тот же параллелепипед (точнее куб). Что скажешь?
P.S.: Кстати, object.GetBoundingBox даст правильный параллелепипед только если «тело» ориентировано по осям. А если оно повернуто, скажем, на 45 градусов относительно оси Z? И это тело — длинный цилиндр?:-)

Последний раз редактировалось Александр Ривилис, 07.05.2009 в 17:07 .

Александр Ривилис
Посмотреть профиль
Посетить домашнюю страницу Александр Ривилис
Найти ещё сообщения от Александр Ривилис

Регистрация: 06.04.2009
Сообщений: 705

Могу предложить приближенное решение.
У объекта solid из приведенного выше примера значение объема obj.volume равно 350. В коммандную строку через SendCommand отправляешь строчку для создания оболочки из твоего солида с толщиной напрмер 0,01 (чем меньше тем точнее) от корня кубического объема тела (или задать конкретную толщину покрытия, изоляции и т.д.)
Потом выдернуть этот объектик и посмотреть его объемчик. Ну а дальше S=V/t.

Сергей Дубина
Посмотреть профиль
Найти ещё сообщения от Сергей Дубина

программист, рыцарь ObjectARX

Инженерный блог

Этот блог создан с целью публикации интересных инженерных и научных материалов.

17 марта 2011 г.

Определяем массу и площадь поверхности деталей в AutoCAD

image

Известно, что AutoCAD позволяет определить объем трехмерных твердых тел. При помощи команды _massprop можно получить различные геометрические характеристики тела. В окне отображения этих свойств обращает на себя внимание такая особенность, как наличие параметров объема и массы, друг другу численно равных. Получается, что тело имеет некоторую единичную плотность, но ее значение редактировать нельзя.

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

На помощь мне пришел ARX-плагин от Александра Ривилиса, опытного разработчика программ для продуктов Autodesk. Этот плагин называется GeomProps (по ссылке скачивается архив), который позволяет снимать с выделенных в AutoCAD объектов свойства длины, площади поверхности и объема. И самое главное, то что этот плагин позволяет вводить в расчет линейный масштабный коэффициент, благодаря которому можно получить результат в требуемых единицах.

Перед расчетом следует увеличить разрядность основных единиц измерения в чертеже. Пять знаков после запятой будет достаточно.

image

Расчет массы тела

Определим массу тела и обода турбинной диафрагмы. Плотность стали равна близко 7,85 г/см3, единицы чертежа – миллиметры, а мы хотим получить значение массы детали в килограммах.

Чтобы самим посчитать массу тела из легированной стали, нужно объем тела в кубических миллиметрах (полученный командой _massprop) умножить на 7,85 и разделить на 10^6.

А чтобы посчитать массу тела при помощи плагина GeomProps нужно взять в расчет масштабный коэффициент, который линейный, а не кубический. Потому масштабный коэффициент равен (7,85/10^6)^(1/3) = 0,01987 (приблизительно).

image

В поле “Объем” мы получим значение, численно равное массе заданного трёхмерного тела в килограммах, в данном случае мы получили массу деталей, равную 365 кг. Если мы выделяем несколько тел, то плагин показывает сумму их характеристик.

Приведем здесь таблицу с усредненной плотностью и масштабным коэффициентом GeomProps для основных конструкционных и строительных материалов.

Самоучитель AutoCAD 3D

В процессе моделирования иногда возникает необходимость в получении информации о создаваемом (созданном) объекте.

Для этой цели можно воспользоваться инструментами, доступ к которым также возможен при выборе опций из меню:

Расстояние – измерение расстояний между двумя или несколькими точками в пространстве;

Радиус – вычисление радиусов кругов и дуг;

Угол – определение углов между двумя или несколькими точками;

Объем – вычисление объема 3D объектов;

Площадь – вычисление площади и периметра некоторых типов объектов, например 3D тел;

Геометрия и масса – вычисление массы и инерционных характеристик 3D тел;

Список – получение информации о выбранных объектах из базы данных рисунка;

Техника работы с инструментами довольно проста: для получения требуемой информации необходимо активизировать соответствующий инструмент и выполнить предложенные действия по подсказкам КС.

Например, для определения ориентации объекта относительно рабочей плоскости XY, а также измерения длины его ребра, необходимо активизировать инструмент Расстояние и указать две точки: 1 и 2, как это показано на рис. 3.20.а.

Рис. 3.20. Измерение расстояния, углов и координат точки

При измерении расстояний AutoCAD автоматически определяет значение угла в плоскости XY и значение угла от плоскости XY. Справочная информация с полученными данными отображается в окне команд, рис. 3.21.

Рис. 3.21. Окно команд с информацией об объекте

Для определения координат точки в пространстве, после активизации инструмента Координаты, необходимо просто указать эту точку в графической зоне экрана. Результат также выводится в окне команд в текущем формате единиц измерения.

На практике в большинстве случаев определять положение новой точки удобней и проще, используя управление ПСК. Например, координаты точки будут иметь значения по осям 0,0,0, если предварительно перенести ПСК в эту точку, используя опцию управления ПСК Начало, рис. 3.20.б.

При вычислении площади занимаемой 3D телом, все точки должны лежать в плоскости, параллельной плоскости XY текущей ПСК.

Площадь 3д тела в автокаде

Программа позволяет получать данные о площади, периметре и свойствах массы для области, ограниченной выбранными объектами или последовательностью точек. Можно рассчитать и вывести на экран данные о площади и периметре для последовательности точек. Можно также получить данные о площади, периметре и свойствах массы для любого из нескольких типов объектов.

Совет Самый быстрый способ вычисления площади, ограничиваемой несколькими обхектами в 2D, состоит в использовании команды ГРАНИЦЫ. С помощью команды ГРАНИЦЫ можно выбрать точку в пределах площади с целью создания замкнутой полилинии или области. Далее можно использовать палитру «Свойства» или команду СПИСОК с целью получения площади и периметра полилинии или области.

Использование команды ПЛОЩАДЬ С помощью команды ПЛОЩАДЬ можно задавать серии точек или выбирать объект. Если требуется найти общую площадь нескольких объектов, можно задать режим суммирования или вычитания последовательно вычисляемых площадей. Для выбора объектов в данном случае нельзя пользоваться рамкой выбора и секущей рамкой. Вычисленные значения площади и периметра сохраняются в системных переменных AREA и PERIMETER.

Вычисление площади области, ограниченной точками Можно вычислить площадь произвольной замкнутой области, определенной указанием набора двумерных или трехмерных точек. Все точки должны лежать в плоскости, параллельной плоскости XY текущей ПСК.

  • Круг. Площадь и длина окружности.
  • Эллипс, замкнутая полилиния, многоугольник, планарный замкнутый сплайн и область. Площадь и периметр. Для широкой полилинии вычисляется площадь, ограниченная ее осевой линией.
  • Разомкнутые объекты (разомкнутые сплайновые кривые, разомкнутые полилинии и т.п.). Площадь и длина. Площадь вычисляется в предположении, что начало и конец объекта соединены отрезком.
  • 3D тела AutoCAD. Общая площадь объекта.

Пример: Подсчет площадей в различных случаях

Можно производить измерение площади нескольких областей, как ограничиваемых точками, так и заключенных внутри объектов. Например, можно определить суммарную площадь комнат на плане этажа.

Из подсчитанной суммарной площади можно производить вычитание площади одной или нескольких областей. В следующем примере вначале определяется полная площадь этажа, а затем из нее вычитается площадь, занимаемая комнатой.

Пример: Вычитание площади из суммарной площади

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

Диалог в командной строке выглядит так:

Первая угловая точка или [Объект/Добавить/Вычесть]: д

Первая угловая точка или [Объект/Вычесть]: о

(Режим СЛОЖЕНИЕ) Выбрать объекты: Выберите полилинию (1)

Площадь = 0.34, Периметр = 2.71

Общая площадь = 0.34

(Режим СЛОЖЕНИЕ) Выбрать объекты: Нажмите ENTER

Первая угловая точка или [Объект/Вычесть]: о

Первая угловая точка или [Объект/Добавить]: о

(Режим ВЫЧИТАНИЕ) Выбрать объекты:Выберите нижнюю окружность (2)

Площадь = 0.02, Длина окружности = 0.46

Общая площадь = 0.32

(Режим ВЫЧИТАНИЕ) Выбрать объекты: Выберите верхнюю окружность (3)

Площадь = 0.02, Длина окружности = 0.46

Общая площадь = 0.30

(Режим ВЫЧИТАНИЕ) Выбрать окружность или полилинию: Нажмите ENTER

Первая угловая точка или [Объект/Добавить]: Нажмите ENTER

Площадь пластины можно также получить в палитре «Свойства» или (если предварительно преобразовать ее в область командой ОБЛАСТЬ и удалить из области отверстия) с помощью команды СПИСОК.

Совет Калькулятор QuickCalc используется для преобразования единиц площади одной системы в единицы другой системы. Дополнительную информацию см. в разделе Использование калькулятора QuickCalc .

Расчет массовых характеристик

С помощью команды МАСС-ХАР для 3D тел и 2D областей можно проанализировать их массовые характеристики, в том числе объем, площадь, момент инерции, центр тяжести и т. п. При этом результаты вычислений можно сохранить в текстовом файле.

  • Построение и объединение областей
  • Коротко о свойствах объектов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *