Тема: Как получить размеры всех или выделеных "solid"ов?

Подскажите как это сделать.

Re: Как получить размеры всех или выделеных "solid"ов?

- создать набор из SOLID'ов
  - организовать цикл по обработке элементов   набора
  - для каждого SOLID'а выбрать координаты вершин и по ним подсчитать размеры

Re: Как получить размеры всех или выделеных "solid"ов?

Если можно то хотелось бы немного подробнее, хотя-бы на примере одного.В моем случае тела это параллограммы(панели ДСП).

Re: Как получить размеры всех или выделеных "solid"ов?

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

Sub SelSolid()
     ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.ActiveSelectionSet
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = "SOLID"
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
    ssetObj.SelectOnScreen groupCode, dataCode
    Dim vSolid As AcadSolid
    Dim X_Size As Double
    Dim Y_Size As Double
    On Error Resume Next
    For Each vSolid In ssetObj
        MsgBox "X = " & Get_X(vSolid)
        MsgBox "Y = " & Get_Y(vSolid)
    Next vSolid
End Sub
Private Function Get_X(vSolid As AcadSolid) As Double
    Dim Coord As Variant
    Dim X_Size As Double
    Coord = vSolid.Coordinates
    X_Size = Coord(3) - Coord(0)
    Get_X = X_Size
End Function
Private Function Get_Y(vSolid As AcadSolid) As Double
    Dim Coord As Variant
    Dim Y_Size As Double
    Coord = vSolid.Coordinates
    Y_Size = Coord(4) - Coord(1)
    Get_Y = Y_Size
End Function

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

Re: Как получить размеры всех или выделеных "solid"ов?

Я только учусь програмировать, мне так и не удалось запустить эту программу. Не создаётся набор "Solid"ов.

Re: Как получить размеры всех или выделеных "solid"ов?

Мне кажется что это из за того что у меня AutoCad 2005 русофицирован, по этому не совпадает тип объекта.

Re: Как получить размеры всех или выделеных "solid"ов?

Катюша, для ДСП есть готовое решение:
см. www.mebelsoft.com/dsp.htm

Re: Как получить размеры всех или выделеных "solid"ов?

Спасибо за ссылку но я хочу научиться писать программы сама, лучше помогите разобраться с фильтрами. Не работает FilterData "solid".

Re: Как получить размеры всех или выделеных "solid"ов?

Я этот велосипед лет эдак 5 назад уже изобрел :)

Re: Как получить размеры всех или выделеных "solid"ов?

> Катюша
Не знаю в чем причина, но русификация Автокада
здесь явно ни при чем, его как не русифицируй, изнутри он все равно английский...
Как именно не работает фильтр? Какая ошибка выскакивает? А наличествуют ли SOLID'ы в чертеже?

Re: Как получить размеры всех или выделеных "solid"ов?

С фильтром разобралась работает "3DSOLID".
Теперь не работает :
    On Error Resume Next
    For Each vSolid In ssetObj
        MsgBox "X = " & Get_X(vSolid)
        MsgBox "Y = " & Get_Y(vSolid)
    Next vSolid
End Sub
Private Function Get_X(vSolid As AcadSolid) As Double
    Dim Coord As Variant
    Dim X_Size As Double
    Coord = vSolid.Coordinates
    X_Size = Coord(3) — Coord(0)
    Get_X = X_Size
End Function
Private Function Get_Y(vSolid As AcadSolid) As Double
    Dim Coord As Variant
    Dim Y_Size As Double
    Coord = vSolid.Coordinates
    Y_Size = Coord(4) — Coord(1)
    Get_Y = Y_Size
End Function
Пытаюсь разобраться.

Re: Как получить размеры всех или выделеных "solid"ов?

> Катюша
Так у вас не SOLID, a 3DSOLID!
Это же другой компот.
Для начала поменяйте тип примитива в функциях:
Private Function Get_X(vSolid As Acad3DSolid) As Double
Далее надо разобраться с координатами вершин, чтобы получить осмысленный результат.

Re: Как получить размеры всех или выделеных "solid"ов?

А я разобралась.
Sub SelSolid()
     ' Create the selection set
    Dim ssetObj As AcadSelectionSet
    Set ssetObj = ThisDrawing.ActiveSelectionSet
    Dim gpCode(0) As Integer
    Dim dataValue(0) As Variant
    gpCode(0) = 0
    dataValue(0) = "3dSOLID"
    Dim groupCode As Variant, dataCode As Variant
    groupCode = gpCode
    dataCode = dataValue
    ssetObj.SelectOnScreen groupCode, dataCode
    Dim vSolid As Acad3DSolid
    For Each vSolid In ssetObj
     vSolid.GetBoundingBox minExt, maxExt
     x = maxExt(0) - minExt(0)
     y = maxExt(2) - minExt(2)
     z = maxExt(1) - minExt(1)
     MsgBox "x=" & x & "y=" & y & "z=" & z
    Next vSolid
End Sub

Re: Как получить размеры всех или выделеных "solid"ов?

> Катюша
А если solid непрямоугольный и непараллельный плоскостям xyz? Или это уже не входит в вашу задачу?:)

Re: Как получить размеры всех или выделеных "solid"ов?

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

Re: Как получить размеры всех или выделеных "solid"ов?

> Катюша
А вы проверяли результат прямым измерением на чертеже?

> Сидор Лютый
Вопрос вполне правомерный!

Re: Как получить размеры всех или выделеных "solid"ов?

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

Re: Как получить размеры всех или выделеных "solid"ов?

Моя обрабатывает ;)

Re: Как получить размеры всех или выделеных "solid"ов?

> Сергей
Если не секрет, каким образом?

Re: Как получить размеры всех или выделеных "solid"ов?

Если в двух словах, то достигается "минимальный" либо объем либо площадь "боундингбокса". Это кратко ...

Re: Как получить размеры всех или выделеных "solid"ов?

Инструменты могут быть разными...

Re: Как получить размеры всех или выделеных "solid"ов?

Т.е. получаем оптимальную заготовку для криволинейной детали, на тот случай если деталь "криво" расположена от-но осей координат ...

Re: Как получить размеры всех или выделеных "solid"ов?

А я тоже придумала как это сделать. Причем намного проще.

Re: Как получить размеры всех или выделеных "solid"ов?

На следующей неделе и моя начнет обрабатывать. И еще учет кромки и разных типов ДСП там будет...

Re: Как получить размеры всех или выделеных "solid"ов?

Уважеамый mebelsoft не могли-бы вы скинуть мне исходники своей программы "мини-мебель" в том виде как она сейчас , просто ради любопытства, нераспространение гарантирую.
  Заранее благоларю.
varn2006@mail.ru