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

Cвойства DrawingDimension

СообщениеДобавлено: 14 апр 2009 14:46
MisterX
Всем доброго времени суток,

поискал по форуму, вроде бы не нашел следующей информации...

Очень хотелось бы автоматически заменять размер шрифта всех проставленных в чертеже размеров, однако такого свойства SetFontSize как например у объекта DrawingText, у объекта DrawingВшьутышщт нет, через Selection к шрифту размера добраться тоже не удалось...
Может кто-нибудь подскажет как к нему добраться другой дорогой?

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 15:42
Artem
Однако если заграница поможет завести этот код проставляемся напополам:
Код: Выделить всё
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Any, ByVal wParam As Any, ByVal lParam As Any) As Long
Private Declare Function SFS Lib "CATAnnotationModeler" Alias "?SetFontSize@CATDrwAnnCompTextProperties@@UAEJABN@Z" (ByVal adress As Long, ByVal data As Double) As Long

Sub CATMain()
Dim drawingDocument1 As DrawingDocument
    Set drawingDocument1 = CATIA.ActiveDocument
    Dim selection1 As Selection
    Set selection1 = drawingDocument1.Selection
   
    Dim aa As SelectedElement
    Dim dd As DrawingDimension
    Dim ss As DrawingDimValue

    selection1.Search "CATDrwSearch.DrwDimension,all"
    Set aa = CATIA.ActiveDocument.Selection.Item(1)
    Set dd = aa.Value
    Dim lb As Long, pa As Long
lb = LoadLibrary("CATAnnotationModeler")
MsgBox pa
pa = GetProcAddress(lb, "?SetFontSize@CATDrwAnnCompTextProperties@@UAEJABN@Z")
MsgBox pa
Dim d1 As Long
Dim d2 As Long
d2 = ObjPtr(dd) 'VarPtr тож нифига не хочетт
Dim d3 As Double
d3 = 12.4
ssss = CallWindowProc(pa, 0, ByVal d2, ByVal VarPtr(d3), ByVal 0&)
FreeLibrary lb
End Sub

клик ок ту терминейт однако :dash1:

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 15:50
booSter
2-Artem
Поправь пост плз., а то он не совсем читабельный.
Спасибо :good:

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:00
Artem
В примере (рейде) CATIDrwDimDimension для этого дела приводиться к CATIDrwTextProperties...Хмм может GetValue у DrawingDimension попробовать.....(кой возвращает тип DrawingDimValue - собственно урезанная по функционалу работа с текстом размера ведется через него)
В CATDraftingInterfaces.dll - где собственно обьявлены все обьекты драфтинга методов для их обработки не обнаружено. На CATAnnotationModeler -вышел через .dic файл....Есть подозрение зря....Может капнуть другую длл?

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:01
booSter
Для того чтобы дёрнуть за CATDrwAnnCompTextProperties::SetFontSize в памяти должен уже существовать правильно инициализированный экземпляр CATDrwAnnCompTextProperties. Собственно указатель на этот экземпляр нужно передавать первым параметром в SetFontSize

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:15
Artem
Первым в функцию как раз передается указатель на обьект размера - в примере рейда у него(CATIDrwDimDimension) запрашивается интерфейс CATIDrwTextProperties......Я таки подозреваю что реализованы методы этого интерфейса в CATAnnotationModeler.dll (может кстати и неправильно подозреваю )......Ну а вообще чисто гипотетически -можно же дернуть метод интерфейса обьекта из длл напрямик в VB?....Если в курсе адреса обьекта?

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:20
Artem
Дико извиняюсь - код подправил(вместо самого обьекта на ссылку)....

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:26
booSter
Интерфейс - это абстракция... с которой должна быть связанна т.н. имплементация (или реализация). В терминах РЭЙДа она ещё называется компонент. Судя по названию CATDrwAnnCompTextProperties - это компонент реализующий САА-интерфейс CATIDrwTextProperties.
Так вот передавать нужно указатель на компонент, и если удастся обнаружить каким образом достать из указателя на интерфейс компонент, то есть надежда это всё оживить.

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:32
Artem
Т.е. d2 = ObjPtr(dd) - не есть гуд? Ну ладно..так то можно сделать дллку прослойку на рейде и дергать уже из нее(только вот с совместимостью версий будут проблемы)

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:51
booSter
Именно.
Ибо dd - есть суть указатель на интерфейс (обёрнутый в структуру VARIANT), а нужен указатель на имплементацию.
Для некоторых реализаций COM, где класс имплементации напрямую наследуется от класса интерфейса этот номер бы возможно и проканал, но в САА, где большинство интерфейсов имплементируются через TIE-прослойку это не работает...
Нужно искать способ "проткнуть" этот самый TIE и таки достать указатель на вожделенный компонент-имплементацию.

Re: Cвойства DrawingDimension

СообщениеДобавлено: 17 апр 2009 16:55
Artem
Спасибо за консультацию...посмотрю конечно, но сердцем чую, что не потяну........(А вот с дополнительной длл может что и получится...)

Re: Cвойства DrawingDimension

СообщениеДобавлено: 22 апр 2009 12:39
MisterX
В CAA это конечно круто все выглядит, но есть одна загвоздка - у меня используемый язык - VB и соответственно встроенный в КАТЮ редактор... :dash1: