| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Определение площади поверхности и объема тел в AutoCAD на VBA.

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

Ответ
Поиск в этой теме
Непрочитано 07.05.2009, 08:16 #1
Определение площади поверхности и объема тел в AutoCAD на VBA.
shumilovvv
 
Инженер технолог по проектированию магистральных нефтепрводов
 
Тюмень
Регистрация: 07.05.2009
Сообщений: 9

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

Инженер
 
Регистрация: 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
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 07.05.2009, 08:58
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


Объем для 3Д-солида получить не проблема: obj.Volume. Как получить площадь твердого тела чисто программно, без применения командных методов - не знаю.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.05.2009, 09:25
#4
AlexV

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


А что, разве чтение свойства примитива в коде программы - это не "чисто программно"?
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Автор темы   Непрочитано 07.05.2009, 09:37
#5
shumilovvv

Инженер технолог по проектированию магистральных нефтепрводов
 
Регистрация: 07.05.2009
Тюмень
Сообщений: 9


за obj.Volume спасибо, оказалось не сложным посчитать объем из моментов инерции теперь буду искать нахождение площади поверхности
shumilovvv вне форума  
 
Непрочитано 07.05.2009, 09:51
#6
AlexV

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


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

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

Последний раз редактировалось AlexV, 07.05.2009 в 09:56.
AlexV вне форума  
 
Непрочитано 07.05.2009, 09:54
#7
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


AlexV, по-моему, у объекта поверхность (Surface) отсутствует понятие площади.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.05.2009, 10:08
#8
AlexV

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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
AlexV, по-моему, у объекта поверхность (Surface) отсутствует понятие площади.
И правда, отсутствует... Плоские участки солида при explode превратятся в регионы, их площадь посчитать легко. А вот с криволинейными как быть..
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!
AlexV вне форума  
 
Непрочитано 07.05.2009, 11:37
#9
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


А в ObjectARX у 3DSolid площадь есть (намек на GeomProps - я там делал возможность вызова из VBA)
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 07.05.2009, 11:51
#10
shumilovvv

Инженер технолог по проектированию магистральных нефтепрводов
 
Регистрация: 07.05.2009
Тюмень
Сообщений: 9


Нашло расчетное решение! я конечно не математик но постараюсь по понятней.
Отношение площади к объему произвольного тела равно отношению площади к объему параллелепипеда в которое это тело вписано.
shumilovvv вне форума  
 
Непрочитано 07.05.2009, 12:56
#11
Дима_

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


Цитата:
Сообщение от shumilovvv Посмотреть сообщение
Нашло расчетное решение! я конечно не математик но постараюсь по понятней.
Отношение площади к объему произвольного тела равно отношению площади к объему параллелепипеда в которое это тело вписано.
Извините - но по моему это бред. Я в один и тот-же паралелепипед могу вписать бесконечное множество тел - и что у всех них будет одинаковое отношение объем/плащадь поверхности?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 07.05.2009, 13:14
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
Извините - но по моему это бред. Я в один и тот-же паралелепипед могу вписать бесконечное множество тел - и что у всех них будет одинаковое отношение объем/плащадь поверхности?
+1E+6
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 07.05.2009, 15:30
#13
shumilovvv

Инженер технолог по проектированию магистральных нефтепрводов
 
Регистрация: 07.05.2009
Тюмень
Сообщений: 9


Для тех кто не верит, могут не верить. Для тех кто сомневается, данный способ я наковырял из курса по интегральному исчислению проверил для пяти произвольных фигур получил тоже значение, что и выдает команда _area.
shumilovvv вне форума  
 
Непрочитано 07.05.2009, 16:15
#14
Sleekka

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


не любое тело можно вписать в параллелепипед - ето раз.
два: нужно сечь тело с опр. шагом и вычислять площадь сечений, а потом сложить площади и умножить на шаг.
Sleekka вне форума  
 
Непрочитано 07.05.2009, 16:17
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,833


Sleekka, скажи, а зачем это?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 07.05.2009, 16:28
#16
shumilovvv

Инженер технолог по проектированию магистральных нефтепрводов
 
Регистрация: 07.05.2009
Тюмень
Сообщений: 9


Цитата:
Сообщение от Sleekka Посмотреть сообщение
не любое тело можно вписать в параллелепипед - ето раз.
два: нужно сечь тело с опр. шагом и вычислять площадь сечений, а потом сложить площади и умножить на шаг.
object.GetBoundingBox какраз возвращает противоположные вершины этого самого параллелепипеда, по полученным точкам находим площадь и объем, объем тела поверхность которого мы ищем возвращает obj.Volume, днлим одно на другое и получаем площадь
shumilovvv вне форума  
 
Непрочитано 07.05.2009, 16:48
#17
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


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

Последний раз редактировалось Александр Ривилис, 07.05.2009 в 17:07.
Александр Ривилис вне форума  
 
Непрочитано 07.05.2009, 17:06
#18
Сергей Дубина


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


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

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Решение от Autodesk на .NET:
Код:
[Выделить все]
Autodesk.AutoCAD.DatabaseServices.Solid3d.Area
Александр Ривилис вне форума  
 
Непрочитано 07.05.2009, 17:45
#20
Дима_

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


Цитата:
Сообщение от shumilovvv Посмотреть сообщение
Для тех кто не верит, могут не верить. Для тех кто сомневается, данный способ я наковырял из курса по интегральному исчислению проверил для пяти произвольных фигур получил тоже значение, что и выдает команда _area.
А Вы посложнее фигурки не пробовали задавать, например такие:

Ваш метод действует только на "экструдированные" тела, сравните отношения объема к площади у шара, цилиндра и конуса (все диаметры и высоты по 100) - наверно "курс по интегральному исчеслению" Вы бегло прочли.
Миниатюры
Нажмите на изображение для увеличения
Название: 1.JPG
Просмотров: 466
Размер:	49.6 Кб
ID:	20026  
Вложения
Тип файла: dwg
DWG 2004
1.dwg (128.2 Кб, 4375 просмотров)
__________________
Когда в руках молоток все вокруг кажется гвоздями.

Последний раз редактировалось Дима_, 07.05.2009 в 17:58.
Дима_ вне форума  
 
Непрочитано 07.05.2009, 21:00
#21
Sleekka

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


2 Крыс
Это когда тела нету, а есть линии точки или 3dface.
Sleekka вне форума  
 
Автор темы   Непрочитано 08.05.2009, 07:49
#22
shumilovvv

Инженер технолог по проектированию магистральных нефтепрводов
 
Регистрация: 07.05.2009
Тюмень
Сообщений: 9


Цитата:
Сообщение от Дима_ Посмотреть сообщение
А Вы посложнее фигурки не пробовали задавать, например такие:

Ваш метод действует только на "экструдированные" тела, сравните отношения объема к площади у шара, цилиндра и конуса (все диаметры и высоты по 100) - наверно "курс по интегральному исчеслению" Вы бегло прочли.
Мнда… так оно и есть, данный способ работает только для тел полученных интегрированием по длиннее или по углу (_revolve и _extrude), для тел образованных булевой операцией вычитания это немного не канает, получаемая площадь несколько больше реальной, но использовать все же можно с некоторым приближением
будем вести поиск дальше...
shumilovvv вне форума  
 
Непрочитано 21.07.2014, 14:38
#23
KpuJI


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


сведения - площадь - права клавиша мишки - обект - и нажать на 3д тело
KpuJI вне форума  
 
Непрочитано 21.07.2014, 14:44
#24
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от KpuJI Посмотреть сообщение
сведения - площадь - права клавиша мишки - обект - и нажать на 3д тело
Перечитай название темы. Если непонятно, то я объясню что в ней идёт речь о получении площади и объема твердого тела при помощи VBA видимо с целью дальнейшего использования в программе.
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Определение площади поверхности и объема тел в AutoCAD на VBA.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
книги по VBA AutoCAD DY Программирование 30 15.02.2013 16:16
VBA AutoCad построение поверхности amrule Alexi Программирование 14 20.10.2006 13:33
AutoCAD LT 2005 и VBA Macros Vidas Программирование 10 03.05.2005 11:00