как считать геометрию в CATProduct? Есть ли Bounding Box?

Программирование для CATIA.

как считать геометрию в CATProduct? Есть ли Bounding Box?

Сообщение Черешня » 20 сен 2010 23:34

моя очень стыдно,моя очень глЮпый :crazy:

с САА плотно работаю не так давно, помощи ждать было неоткуда...но вот наконец-то форум нашла)

зреет вот такой вопрос - как считать геом.размеры из CATProduct? в идеале надо что-то типа Bounding Box'а - существует ли такое и как его достать?
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 20 сен 2010 23:46

...ну хоть пошлите интеллигентно по ссылке - где искать правды.....пожалуйста! @}->--
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 21 сен 2010 21:04

Проясню ситуацию,как могу: :MAMBA:
Создание новой панели и кнопки я осилила - теперь необходимо,чтобы при нажатии на данную кнопку создавался файлик (ну текстовый,чтоб не долго мучиться) и в него записывались все размеры детали (длина, ширина, радиусы - ну все,что можно достать!)
Изображение

И такой вопрос еще:
Где-нибудь, как-нибудь можно узнать BoundigBox для детали - ну,в смысле ее ограничивающий параллелепипед?
Изображение
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение [PTM] » 21 сен 2010 21:20

BoundigBox в настройках можно включить,а вот как вытащить в CAA незнаю
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2139
Images: 40
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 21 сен 2010 21:30

[PTM] писал(а):BoundigBox в настройках можно включить,а вот как вытащить в CAA незнаю

...а как, подскажите ,пожалуйста.... :-[
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение [PTM] » 21 сен 2010 21:35

tools/options/general/display/navigatiaon/display manipulation bounding box
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2139
Images: 40
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 21 сен 2010 21:38

[PTM] писал(а):tools/options/general/display/navigatiaon/display manipulation bounding box

.. нацарапала на стикере :MAIL:
СПАСИБО! :give_heart:
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Virty » 22 сен 2010 14:42

Есть старенький скрипт по адресу:

http://www.2htts.com/CATBlog/index.php?itemid=24

06/07/01: Bounding Box Script - for defining material stock size
This is a script that creates an associative bounding box to a solid or joined surface. It adds 1mm wall stock and uses an axis system for orientation.

Работоспособность этого скрипта не проверял.
Аватара пользователя
Virty
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 26 янв 2009 19:55

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение ExtraRight » 22 сен 2010 15:01

Ещё попробуйте команду "Creates Rough Stock" (найти можно через View - Command List). Правда она работает только на уровне парта вроде бы и создаёт "описывающую коробку" для тела.
Аватара пользователя
ExtraRight
Forum Manager
 
Сообщения: 1575
Зарегистрирован: 11 сен 2007 18:50
Откуда: Нижний Новгород
Blog: View Blog (8)

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение RIMs » 22 сен 2010 17:28

Черешня:
при построении детали создается много промедуточных скетчей и фич (пад, покет, сплиты и т.д.), предположим вы зашли в каждый скетч и пад и собрали все размеры, вам достанется большая гора мусора которую сложно будет отсортировать.
Можно попробовать создать рэперные элементы, и считывать их программой. Например базовые точки,линии скидывать в отдельныей Геом Сэт и потом с ним работать (измерять). Но проще всего, мне кажется, строить модель основываясь на параметрах и потом эти параметры просто считать.
RIMs
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 20 мар 2009 22:27

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 22 сен 2010 21:44

завтра постараюсь перепробовать все!!!! :good2: спасибо)
В CATIA удалось включить Bounding Box... но программно пока не нашла способ его выдрать :dash2: да и пока факт существования такого способа сомнителен :SCRATCH:
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение booSter » 23 сен 2010 15:36

А какой из CAA API предполагается использовать для решения VB или C++ ?
Сделаешь доброе дело за деньги - скажут спасибо,
Сделаешь бесплатно - сядут на шею...
©пёрто
Аватара пользователя
booSter
Moderator
 
Сообщения: 227
Images: 15
Зарегистрирован: 09 фев 2008 16:48
Откуда: Minsk

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 23 сен 2010 21:38

booSter писал(а):А какой из CAA API предполагается использовать для решения VB или C++ ?

на С++...наСИльники мы....
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение RIMs » 24 сен 2010 01:15

Virty писал(а):Есть старенький скрипт по адресу:
http://www.2htts.com/CATBlog/index.php?itemid=24
.

Шикарно скрипт работает! и шикарно написан, оттуда выкинуть визуализацию в катии и просто взять параметры длин, перемножить, получить объем и вывести все это на экран
RIMs
Новичок
Новичок
 
Сообщения: 43
Зарегистрирован: 20 мар 2009 22:27

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение bit » 24 сен 2010 12:54

Если на С++ то можно посмотреть в стандартных примерах как работает CAAESmiUserOperationWithMATPComputation::GetBoundingBox
bit
Участник
Участник
 
Сообщения: 166
Images: 3
Зарегистрирован: 24 июл 2008 11:45
Откуда: Минск

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 25 сен 2010 14:50

[PTM] писал(а):tools/options/general/display/navigatiaon/display manipulation bounding box

ExtraRight писал(а):Ещё попробуйте команду "Creates Rough Stock" (найти можно через View - Command List). Правда она работает только на уровне парта вроде бы и создаёт "описывающую коробку" для тела.

Нуууу, с точки зрения САА оно не помогло, но зато знания в CATIA поприбавилось! много интересного попутно посмотрела, спасибо :HI: @}->--

Virty писал(а):Есть старенький скрипт по адресу:

http://www.2htts.com/CATBlog/index.php?itemid=24

Эх, скрипт действуют только на уровне CATPart'ов....
А идея-то подходящая!...
Так что поиски продолжаются :dash1:

bit писал(а):Если на С++ то можно посмотреть в стандартных примерах как работает CAAESmiUserOperationWithMATPComputation::GetBoundingBox

...а вот и занятие на понедельник нашлось)
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 27 сен 2010 19:36

bit писал(а):Если на С++ то можно посмотреть в стандартных примерах как работает CAAESmiUserOperationWithMATPComputation::GetBoundingBox

ПОЛУЧИЛОООООООООСЬ! :gratz: :-* :good2:
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение [PTM] » 15 окт 2010 18:21

замечу,что для тех у кого нет CAA можно использовать UDF
BoundingBlockUDF.CATPart
HalfBoundingBlock1UDF
более подходящую выбирайте сами.
udf находятся
..\startup\Tooling\CCV\FillingSurfaces\
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2139
Images: 40
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Черешня » 17 окт 2010 22:26

[PTM] писал(а):замечу,что для тех у кого нет CAA можно использовать UDF
BoundingBlockUDF.CATPart
HalfBoundingBlock1UDF
более подходящую выбирайте сами.
udf находятся
..\startup\Tooling\CCV\FillingSurfaces\

...эм?!...погуглю,что это вообще такое...
Аватара пользователя
Черешня
Новичок
Новичок
 
Сообщения: 22
Зарегистрирован: 20 сен 2010 23:22

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение heze » 14 окт 2015 22:59

Virty писал(а):Есть старенький скрипт по адресу:

http://www.2htts.com/CATBlog/index.php?itemid=24

06/07/01: Bounding Box Script - for defining material stock size
This is a script that creates an associative bounding box to a solid or joined surface. It adds 1mm wall stock and uses an axis system for orientation.

Работоспособность этого скрипта не проверял.


Уважаемые выложите сею реликвию у кого есть, а то ссылка не фурычит. Или может есть варианты поновее?
heze
Новичок
Новичок
 
Сообщения: 32
Зарегистрирован: 22 авг 2015 01:49

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Wireless_Fidelity » 15 окт 2015 09:36

heze писал(а):
Virty писал(а):Есть старенький скрипт по адресу:

http://www.2htts.com/CATBlog/index.php?itemid=24

06/07/01: Bounding Box Script - for defining material stock size
This is a script that creates an associative bounding box to a solid or joined surface. It adds 1mm wall stock and uses an axis system for orientation.

Работоспособность этого скрипта не проверял.


Уважаемые выложите сею реликвию у кого есть, а то ссылка не фурычит. Или может есть варианты поновее?


Не проверял:

Код: Выделить всё
Sub CATMain()
 
    Dim oCATIA As Application
     Set oCATIA = CATIA
 
    Dim oPartDocument As PartDocument
     Set oPartDocument = Get_PartDocument
 
    If oPartDocument Is Nothing Then
 
        Exit Sub
 
    End If
   
     Dim oSelection As Selection
     Set oSelection = oPartDocument.Selection
     oSelection.Clear
   
     Dim COGArray
     COGArray = Get_COG(oPartDocument)
   
     Dim PrincipalAxes_temp
     PrincipalAxes_temp = Get_PrincipalAxes(oPartDocument)
   
     Dim PrincipalAxes
     PrincipalAxes = PrincipalAxesCorrection(PrincipalAxes_temp)
   
     Dim oPart As part
     Set oPart = oPartDocument.part
   
     If oPart.MainBody.Shapes.Count = 0 Then
         MsgBox "The PartBody Is Empty Exiting Script."
         End
     End If
   
     Dim oHybridBodies As HybridBodies
     Set oHybridBodies = oPart.HybridBodies
   
     Dim oHybridBody As HybridBody
   
     On Error Resume Next
         Set oHybridBody = oHybridBodies.Item("Inertia_Bounding_Box")
       
         If Err.Number = 0 Then
             oSelection.Add oHybridBody
             oSelection.Delete
             oSelection.Clear
         End If
     On Error GoTo 0
   
     Set oHybridBody = oHybridBodies.Add
     oHybridBody.Name = "Inertia_Bounding_Box"
   
     Dim oHybridShapeFactory As HybridShapeFactory
     Set oHybridShapeFactory = oPart.HybridShapeFactory
   
     Dim oHybridshapePointCoord As HybridShapePointCoord
     Set oHybridshapePointCoord = Build_COG(oHybridShapeFactory, COGArray)
 
    Dim InertiaAxis(2) As Line
   
     Set InertiaAxis(0) = Build_InertiaAxis(oHybridShapeFactory, oHybridshapePointCoord, PrincipalAxes, 1)
     Set InertiaAxis(1) = Build_InertiaAxis(oHybridShapeFactory, oHybridshapePointCoord, PrincipalAxes, 2)
     Set InertiaAxis(2) = Build_ThirdDirection_InertiaAxis(oHybridShapeFactory, oHybridshapePointCoord, InertiaAxis(0), InertiaAxis(1))
   
     Dim oExtremum(5) As HybridShapeExtremum
     Set oExtremum(0) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 1, InertiaAxis(0), InertiaAxis(1), InertiaAxis(2))
     Set oExtremum(1) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 0, InertiaAxis(0), InertiaAxis(1), InertiaAxis(2))
     Set oExtremum(2) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 1, InertiaAxis(1), InertiaAxis(2), InertiaAxis(0))
     Set oExtremum(3) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 0, InertiaAxis(1), InertiaAxis(2), InertiaAxis(0))
     Set oExtremum(4) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 1, InertiaAxis(2), InertiaAxis(0), InertiaAxis(1))
     Set oExtremum(5) = Build_Extremums(oPart.MainBody, oPart, oHybridShapeFactory, 0, InertiaAxis(2), InertiaAxis(0), InertiaAxis(1))
 
    Dim oPolyLine As HybridShapePolyline
     Set oPolyLine = Build_PolyLine(oHybridShapeFactory, oExtremum)
 
    Dim oFinalExtremums(5) As HybridShapeExtremum
   
     Set oFinalExtremums(0) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 1, InertiaAxis(0))
     Set oFinalExtremums(1) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 0, InertiaAxis(0))
     Set oFinalExtremums(2) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 1, InertiaAxis(1))
     Set oFinalExtremums(3) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 0, InertiaAxis(1))
     Set oFinalExtremums(4) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 1, InertiaAxis(2))
     Set oFinalExtremums(5) = Build_Extremums(oPolyLine, oPart, oHybridShapeFactory, 0, InertiaAxis(2))
   
     Dim oFinalPlanes(5) As HybridShapePlaneNormal
   
     Set oFinalPlanes(0) = Build_Planes(oHybridShapeFactory, oFinalExtremums(0), InertiaAxis(0))
     Set oFinalPlanes(1) = Build_Planes(oHybridShapeFactory, oFinalExtremums(1), InertiaAxis(0))
     Set oFinalPlanes(2) = Build_Planes(oHybridShapeFactory, oFinalExtremums(2), InertiaAxis(1))
     Set oFinalPlanes(3) = Build_Planes(oHybridShapeFactory, oFinalExtremums(3), InertiaAxis(1))
     Set oFinalPlanes(4) = Build_Planes(oHybridShapeFactory, oFinalExtremums(4), InertiaAxis(2))
     Set oFinalPlanes(5) = Build_Planes(oHybridShapeFactory, oFinalExtremums(5), InertiaAxis(2))
 
    Dim oBaseLine As HybridShapeLinePtDir
     Set oBaseLine = Build_LinePtDir(oHybridShapeFactory, oHybridshapePointCoord, oFinalPlanes(0), oFinalPlanes(1))
   
     Dim oExtrudedSurface As HybridShapeExtrude
     Set oExtrudedSurface = Build_ExtrudedSurface(oHybridShapeFactory, oBaseLine, oFinalPlanes(2), oFinalPlanes(3))
 
    Dim oFinalBoundingBox As HybridShapeExtrude
     Set oFinalBoundingBox = Build_ExtrudedSurface(oHybridShapeFactory, oExtrudedSurface, oFinalPlanes(4), oFinalPlanes(5))
     oHybridBody.AppendHybridShape oFinalBoundingBox
   
 End Sub
 
Private Function Build_ExtrudedSurface(oHybridShapeFactory As HybridShapeFactory, oAnyobject As AnyObject, oLimitPlane1 As HybridShapePlaneNormal, oLimitPlane2 As HybridShapePlaneNormal) As HybridShapeExtrude
 
    Dim oDirection As HybridShapeDirection
     Set oDirection = oHybridShapeFactory.AddNewDirection(oLimitPlane1)
   
     Set Build_ExtrudedSurface = oHybridShapeFactory.AddNewExtrude(oAnyobject, 100, 100, oDirection)
     Build_ExtrudedSurface.FirstUptoElement = oLimitPlane1
     Build_ExtrudedSurface.SecondUptoElement = oLimitPlane2
     Build_ExtrudedSurface.FirstLimitType = 2
     Build_ExtrudedSurface.SecondLimitType = 2
   
     Build_ExtrudedSurface.Compute
 
End Function
 
Private Function Build_LinePtDir(oHybridShapeFactory As HybridShapeFactory, oPoint As HybridShapePointCoord, oLimitPlane1 As HybridShapePlaneNormal, oLimitPlane2 As HybridShapePlaneNormal) As HybridShapeLinePtDir
   
     Dim oDirection As HybridShapeDirection
     Set oDirection = oHybridShapeFactory.AddNewDirection(oLimitPlane1)
     Set Build_LinePtDir = oHybridShapeFactory.AddNewLinePtDir(oPoint, oDirection, 1000, -1000, True)
     Build_LinePtDir.FirstUptoElem = oLimitPlane1
     Build_LinePtDir.SecondUptoElem = oLimitPlane2
     Build_LinePtDir.Compute
   
 End Function
 
Private Function Build_Planes(oHybridShapeFactory As HybridShapeFactory, oFinalExtremum As HybridShapeExtremum, InertiaAxis As Line) As HybridShapePlaneNormal
 
    Set Build_Planes = oHybridShapeFactory.AddNewPlaneNormal(InertiaAxis, oFinalExtremum)
     Build_Planes.Compute
 
End Function
 
Private Function Build_PolyLine(oHybridShapeFactory As HybridShapeFactory, oExtremum) As HybridShapePolyline
 
    Set Build_PolyLine = oHybridShapeFactory.AddNewPolyline
 
    Dim iIndex As Integer
     Dim oReference As Reference
     For iIndex = 0 To UBound(oExtremum)
   
         Build_PolyLine.InsertElement oExtremum(iIndex), iIndex + 1
       
     Next
     Build_PolyLine.Compute
     Build_PolyLine.Name = "ExtremumPolyline"
 
End Function
 
Private Function Build_Extremums(oAnyobject As AnyObject, oPart As part, oHybridShapeFactory As HybridShapeFactory, MinMax As Long, hybridShapeLinePtDir1 As Line, Optional HybridShapeLinePtDir2 As Line, Optional HybridShapeLinePtDir3 As Line) As HybridShapeExtremum
 
    Dim oHybridshapeDirection(2) As HybridShapeDirection
     Set oHybridshapeDirection(0) = oHybridShapeFactory.AddNewDirection(hybridShapeLinePtDir1)
     Set oHybridshapeDirection(1) = oHybridShapeFactory.AddNewDirection(HybridShapeLinePtDir2)
     Set oHybridshapeDirection(2) = oHybridShapeFactory.AddNewDirection(HybridShapeLinePtDir3)
   
     Dim oReference As Reference
     Set oReference = oPart.CreateReferenceFromObject(oAnyobject)
 
    Set Build_Extremums = oHybridShapeFactory.AddNewExtremum(oReference, oHybridshapeDirection(0), MinMax)
   
     If Not HybridShapeLinePtDir2 Is Nothing Then
   
     Build_Extremums.Direction2 = oHybridshapeDirection(1)
     Build_Extremums.ExtremumType2 = 1
   
     End If
   
     If Not HybridShapeLinePtDir3 Is Nothing Then
   
     Build_Extremums.Direction3 = oHybridshapeDirection(2)
     Build_Extremums.ExtremumType3 = 1
   
     End If
 
    Build_Extremums.Compute
   
 End Function
 
Private Function Build_ThirdDirection_InertiaAxis(oHybridShapeFactory As HybridShapeFactory, oPoint As HybridShapePointCoord, DirLine1 As HybridShapeLinePtDir, DirLine2 As HybridShapeLinePtDir) As HybridShapeLineNormal
 
    Dim oHybridShapePlane2Lines As HybridShapePlane2Lines
     Set oHybridShapePlane2Lines = oHybridShapeFactory.AddNewPlane2Lines(DirLine1, DirLine2)
     oHybridShapePlane2Lines.Compute
   
     Set Build_ThirdDirection_InertiaAxis = oHybridShapeFactory.AddNewLineNormal(oHybridShapePlane2Lines, oPoint, 10000, -10000, True)
     Build_ThirdDirection_InertiaAxis.Compute
     Build_ThirdDirection_InertiaAxis.Name = "InertiaAxis-3"
   
 End Function
 
Private Function Build_InertiaAxis(oHybridShapeFactory As HybridShapeFactory, oPoint As HybridShapePointCoord, PrincipleAxis, InertiaAxis As Integer) As HybridShapeLinePtDir
 
    Dim dPrincipleAxis(2) As Double
 
    Select Case InertiaAxis
         Case 1
             dPrincipleAxis(0) = PrincipleAxis(0)
             dPrincipleAxis(1) = PrincipleAxis(1)
             dPrincipleAxis(2) = PrincipleAxis(2)
         Case 2
             dPrincipleAxis(0) = PrincipleAxis(3)
             dPrincipleAxis(1) = PrincipleAxis(4)
             dPrincipleAxis(2) = PrincipleAxis(5)
         Case Else
             MsgBox "Error, Value Must Be 1 or 2."
     End Select
   
     Dim oHybridshapeDirection As HybridShapeDirection
     Set oHybridshapeDirection = oHybridShapeFactory.AddNewDirectionByCoord(dPrincipleAxis(0), dPrincipleAxis(1), dPrincipleAxis(2))
   
     Set Build_InertiaAxis = oHybridShapeFactory.AddNewLinePtDir(oPoint, oHybridshapeDirection, 10000, -10000, True)
     Build_InertiaAxis.Compute
     Build_InertiaAxis.Name = "InertiaAxis-" & InertiaAxis
   
 End Function
 
Private Function Build_COG(oHybridShapeFactory As HybridShapeFactory, COGArray) As HybridShapePointCoord
 
    Set Build_COG = oHybridShapeFactory.AddNewPointCoord(COGArray(0) * 1000, COGArray(1) * 1000, COGArray(2) * 1000)
     Build_COG.Compute
     Build_COG.Name = "COG"
   
 End Function
 Private Function Get_COG(oPartDocument As PartDocument)
 
    Dim oSPAWorkbench As SPAWorkbench
     Dim oMeasureable As Measurable
     Dim oInertias As Inertias
     Dim oInertia 'As Inertia
     Dim COGArray(2)
   
     Set oSPAWorkbench = oPartDocument.GetWorkBench("SPAWorkbench")
     Set oInertias = oSPAWorkbench.Inertias
   
     oInertias.Add oPartDocument.part.MainBody
     Set oInertia = oInertias.Item(1)
     oInertia.GetCOGPosition COGArray
   
     Get_COG = COGArray
 
    oInertias.Remove oInertia.Name
   
     Set oInertia = Nothing
     Set oInertias = Nothing
     Set oMeasureable = Nothing
     Set oSPAWorkbench = Nothing
 
End Function
 
Private Function Get_PrincipalAxes(oPartDocument As PartDocument)
 
    Dim oSPAWorkbench As SPAWorkbench
     Dim oMeasureable As Measurable
     Dim oInertias As Inertias
     Dim oInertia 'As Inertia
     Dim PrincipalAxes(8)
   
     Set oSPAWorkbench = oPartDocument.GetWorkBench("SPAWorkbench")
     Set oInertias = oSPAWorkbench.Inertias
   
     oInertias.Add oPartDocument.part
     Set oInertia = oInertias.Item(1)
     oInertia.GetPrincipalAxes PrincipalAxes
 
    Get_PrincipalAxes = PrincipalAxes
   
     oInertias.Remove oInertia.Name
   
     Set oInertia = Nothing
     Set oInertias = Nothing
     Set oMeasureable = Nothing
     Set oSPAWorkbench = Nothing
 
End Function

Private Function PrincipalAxesCorrection(PrincipalAxes_temp)
 
    Dim PrincipalAxes(8)
    'Correct the X axis
    PrincipalAxes(0) = PrincipalAxes_temp(0)
    PrincipalAxes(1) = PrincipalAxes_temp(3)
    PrincipalAxes(2) = PrincipalAxes_temp(6)

    'Correct the Y axis
    PrincipalAxes(3) = PrincipalAxes_temp(1)
    PrincipalAxes(4) = PrincipalAxes_temp(4)
    PrincipalAxes(5) = PrincipalAxes_temp(7)

    'Correct the Z axis
    PrincipalAxes(6) = PrincipalAxes_temp(2)
    PrincipalAxes(7) = PrincipalAxes_temp(5)
    PrincipalAxes(8) = PrincipalAxes_temp(8)
   
    PrincipalAxesCorrection = PrincipalAxes
 
End Function
 Private Function Get_PartDocument() As PartDocument
 
    Dim oCATIA As Application
     Dim oDocument As Document
     Dim oSelection As Selection
     Dim oPart As part
 
    Set oCATIA = CATIA
 
    On Error Resume Next
 
        Set oDocument = CATIA.ActiveDocument
   
         If Err.Number <> 0 Then
   
             MsgBox "There Is No Active Document In The Current Session, Exitting Script."
             End
   
         End If
   
     On Error GoTo 0
 
    Set oSelection = oDocument.Selection
     oSelection.Clear
 
    '---------------------------------------------------'
 
    If (InStr(oDocument.Name, ".CATPart")) = 0 Then
 
        oSelection.Search ("type=Part,in")
   
         On Error Resume Next
   
             Set oPart = oSelection.FindObject("CATIAPart")
       
             If Err.Number <> 0 Then
       
                 MsgBox "A Part or Part Instance Must be Active." & vbLf & "Exiting The Script"
                 oSelection.Clear
           
                 Exit Function
       
             End If
       
         On Error GoTo 0
 
    Else
 
        Set oPart = oDocument.part
 
    End If
 
    oSelection.Clear
 
    '---------------------------------------------------'
 
    Set Get_PartDocument = oPart.Parent
 
    Set oPart = Nothing
     Set oSelection = Nothing
     Set oDocument = Nothing
     Set oCATIA = Nothing
   
 End Function
Аватара пользователя
Wireless_Fidelity
Активный участник
Активный участник
 
Сообщения: 394
Зарегистрирован: 10 апр 2010 00:11

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение Artem » 15 окт 2015 09:52

http://files.engineering.com/getfile.as ... .CATScript
-тот самый...ламповый
animae scrinium servitus
Аватара пользователя
Artem
Активный участник
Активный участник
 
Сообщения: 387
Зарегистрирован: 14 сен 2007 07:14

Re: как считать геометрию в CATProduct? Есть ли Bounding Box

Сообщение [PTM] » 04 мар 2023 15:10

http://www.ema3.com/CATIA_V5_MACRO/V5_index.php

ссылка на первоисточник
Изображение
Аватара пользователя
[PTM]
Moderator
 
Сообщения: 2139
Images: 40
Зарегистрирован: 13 сен 2007 13:03
Откуда: Rzn
Blog: View Blog (15)


Вернуться в CAA-RADE

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

cron