Страница 1 из 1

Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 11 окт 2010 11:54
snerge
Помогите написать макрос для для открытия выбранной детали сборки во внешнем окне, а то отдельной команды не нашел, а открытие через контекстное меню детали - долго. Хочу это действие на кнопку посадить.

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 11 окт 2010 18:59
[PTM]
а если самому записать действия,которые нужны,с помощью встроенного macros record?

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 12 окт 2010 06:49
snerge
Пробовал, не работает.

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 21 окт 2010 13:43
Artem
Sub CATMain()
CATIA.StartCommand "Open in New Window"
End Sub

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 22 окт 2010 13:46
snerge
Спасибо работает, но только если выбранная деталь или подсборка в режиме конструирования.
Подправил себе под русский интерфейс -
CATIA.StartCommand "Открыть в новом окне"
Хочется еще добавить в макрос команду перевести выбранную деталь или сборку в режим конструирования предварительно перед открытием в новом окне.
Посмотрел в записи макроса это выглядит так:
product8.ApplyWorkMode DESIGN_MODE
Как это свойство назначить выбранным деталям?

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 03 ноя 2010 11:38
Wireless_Fidelity
Свойство назначается не деталям, а соответствующим им продуктам (в дереве они отображаются как "родительские" и, как правило, имеют такое же имя, что и деталь). Поэтому перед вызовом соответствующего метода нужно эти продукты найти.

Код: Выделить всё
' получение доступа к объекту выделения для активного документа
Dim objSelection as Selection
Set objSelection = CATIA.ActiveDocument.Selection

' проверка, выделен ли хоть один объект
if (objSelection.Count = 0) then
    Exit Sub
End if

' обработка первого выделенного объекта. при необходимости возможно организовать цикл.
Dim SelectedObject as Object
Set SelectedObject = objSelection.Item(1).Value

' определение типа выделенного объекта
Dim strObjectType as String
strObjectType = TypeName(SelectedObject)

Dim PartProd as Product    ' продукт, в котором содержится парт

' проверка типа выбранного объекта
if (strObjectType = "Product") then

    ' выбран продукт
    Set PartProd = SelectedObject

elseif (strObjectType = "Part") then

    ' выбран парт, ищем соответствующий ему продукт (который является его родителем)
    if (TypeName(SelectedObject.Parent) = "PartDocument") then

        ' парт получен из парт документа, получаем продукт оттуда же
        Set PartProd = SelectedObject.Parent.Product

     elseif (TypeName(SelectedObject.Parent = "Product") then

        ' парт лежит в продукте
        Set PartProd = SelectedObject.Parent

    else

        ' "родитель" парта не является ни документом, ни продуктом, выходим.
        Exit Sub
    end if

else
    ' не выбран ни продукт, ни парт, выходим
    Exit Sub
end if

' меняем режим
objProd.ApplyWorkMode DESIGN_MODE

' запускаем команду
' CATIA.StartCommand "Открыть в новом окне"


Господа, пользуйтесь пожалуйста тегом [CODE] для вставки примеров кода,
а длинные куски кладите под [SPOILER]
booSter

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 09 ноя 2010 08:20
snerge
Спасибо за участие.
Запустил макрос в кате, она ругается на строчку
"elseif (TypeName(SelectedObject.Parent = "Product") then"

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 12 ноя 2010 13:09
snerge
Нашел аналогичное решение на форуме http://www.catiav5forum.de
http://www.catiav5forum.de/wbb3/wbb/ind ... #post24402

Код: Выделить всё
Sub CATMain()

Dim oSelPart As Selection
Set oSelPart = CATIA.ActiveDocument.Selection

Dim InputObjectType(0)
InputObjectType(0) = "Part"

Status = oSelPart.SelectElement2(InputObjectType, "Select a Part", false)

If (Status = "Cancel") Then
Msgbox "Macro Canceled!",vbcritical
Exit Sub
end if

Dim oPart As Part
Set oPart = oSelPart.Item2(1).Value

Dim oProduct As Product
InputObjectType(0) = "Product"
Set oProduct = oSelPart.SelectElement2(InputObjectType, "Select a Part", true)
oProduct.ApplyWorkMode 2

Dim partDocument1 As PartDocument
Set partDocument1 = oPart.Parent
Set productDocument1 = CATIA.Documents.Open(partDocument1.FullName)

Set Viewer = Catia.ActiveViewer
Viewer.Reframe

End Sub

Незабываем оформляться,пользуясь тегом [CODE] для вставки примеров кода,
а длинные куски кладите под [SPOILER]

[PTM]



Почему то у меня и этот скрипт не работает (хотя брал на их форуме попроще скрипыт все ок), может лицензия не полная или компонент какой на комп не установлен. Проверте кто нибудь на своей машине рабочие ли эти два скрипта?

Re: Макрос для открытия детали сборки во внешнем окне.

СообщениеДобавлено: 13 ноя 2010 02:12
Wireless_Fidelity
Ругается потому, что есть опечатка (не хватает закрывающей скобочки) :-(

Код: Выделить всё
elseif (TypeName(SelectedObject.Parent) = "Product") then


Тот код, который Вы нашли на другом форуме, открывает в отдельном окне документ выбранной детали, причём выбор этот должен осуществляться уже в ходе выполнения макроса (внизу окна CATIA в строке состояния отобразится сообщение "Select a Part").

Для того, чтобы он заработал, нужно изменить строки в самом начале (тип переменной должен быть Variant):

Код: Выделить всё
Dim oSelPart As Variant
Set oSelPart = CATIA.ActiveDocument.Selection