Изменить вид вырезанного текста в CATIA
В настоящее время я работаю с CATIA V5 и хочу использовать макросы (VBA), но у меня есть некоторые проблемы!
Мой вопрос: как изменить текст разреза? (см. изображение)
Я пытался использовать: myView.Texts.item(1) для доступа к этому "тексту", но я думаю, что CATIA не считает его текстовым...
Я хочу изменить этот текст без вмешательства пользователя (без выбора), могу ли я это сделать?
3 ответа
Сценарии IME, VBA в рабочей среде разработки довольно сложны на первый взгляд... MyTexts - это набор объектов DrawingText.
MyDrawingText.Text = "MyNewTextValue"
Основная проблема, с которой вы столкнетесь, - получить дескриптор конкретного текстового объекта, который вы хотите изменить. Я обнаружил, что лучший способ обойти это - отсканировать всю коллекцию DrawingTexts в DrawingView и применить уникальное имя, DrawingText.Name="UniqueObjectName"
или вы создаете текст для рисования из сценария, и вы можете легче получить дескриптор объекта DrawingText, чтобы поместить туда любое значение, которое вы хотите. Создание уникальных имен делает ваш рисунок более надежным для будущих сценариев
MyView.Texts.Count
также будет полезно получить номер элемента, если последний создал объект (ы) DrawingText.
Я рад дополнительно объяснить, если вам нужно. Удачи!
Обновление / редактирование. Как уже упоминалось выше, создание сценариев с помощью рабочей среды разработки не всегда является простым. Оказывается, тексты выноски не совсем живут в DrawingTexts
коллекция DrawingView
, но они живут где-то внутри вида чертежа... В этом случае вы пытаетесь отредактировать "идентификатор" вида разреза. Это свойство также не предоставляется через VBA.
Существует хак / обходной путь, который заключается в поиске текста для рисования в родительском представлении, а затем с некоторой логикой, с которой вам нужно придумать, отсканируйте Selection
для текстов, которые вы хотите изменить. Тогда вы должны переименовать, пока вы на этом, так легче вернуться и найти их снова.
Вот пример, начинающийся с разрешения объекта переднего вида (родительский вид вида в разрезе)
Sub ChangeCallout()
'---- Begin resolution script for object : Front View
Dim drawingDocument1 As DrawingDocument
Set drawingDocument1 = CATIA.ActiveDocument
Dim drawingSheets1 As DrawingSheets
Set drawingSheets1 = drawingDocument1.Sheets
Dim drawingSheet1 As DrawingSheet
Set drawingSheet1 = drawingSheets1.Item("Sheet.1")
Dim drawingViews1 As DrawingViews
Set drawingViews1 = drawingSheet1.Views
Dim drawingView1 As DrawingView
Set drawingView1 = drawingViews1.Item("Front view") 'this is the parent view of the section view
'---- End resolution script
Dim sel As Selection
Set sel = drawingDocument1.Selection
Dim CalloutText As drawingText
sel.Clear 'clear the selection / good practice
sel.Add drawingView1 'add the parent view to the selection
sel.Search "Drafting.Text,sel" 'this will search the current selection for all drawing texts and add them to the selection
Dim thing As Variant
Dim i As Integer
For i = 1 To sel.Count
Set thing = sel.Item2(i)
Set CalloutText = thing.Value
'do some things/logic here to determine if this is a callout with some Ifs or Case statements
'CalloutText.Name = "Useful Unique Name"
'CalloutText.Text = "New Callout Label" 'whatever you want to rename it to
Next
End Sub
Текст разреза определяется именем вида, для его изменения необходимо изменить имя вида, как описано ниже:
Sub CATMain()
Dim oDraw As DrawingDocument
Set oDraw = CATIA.ActiveDocument
Dim oSectionView As DrawingView
Set oSectionView = oDraw.Sheets.ActiveSheet.Views.ActiveView
oSectionView.SetViewName "Prefix ", "B", " Suffix"
End Sub
Для сканирования текстов выноски вы можете использовать строки ниже. Это выберет тексты, относящиеся только к выноске, и не отсканирует все тексты.
Sub CATMain()
Dim drawingDocument1 As Document
Set drawingDocument1 = CATIA.ActiveDocument
Dim selection1 As Selection
Set selection1 = drawingDocument1.Selection
selection1.Search "CATDrwSearch.DrwCallout,all"
selection1.Search "Drafting.Text,sel"
Dim i As Integer
For i = 1 To selection1.Count
MsgBox selection1.Item(i).Value.text
Next
End Sub