On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение



Пост N: 445
Откуда: Россия, Новосибирск
Рейтинг: 2
ссылка на сообщение  Отправлено: 19.10.07 08:34. Заголовок: Клиентская панель в браузере Инвентора


При создание пользовательской панели в браузере Инвентора используется функция (пример описан в хелпе Инвентора достаточно полно), используется функция:
Public Function CreateBrowserNodeDefinition( _
ByVal Label As String, _
ByVal Id As Long, _
ByVal Icon As ClientNodeResource, _
Optional ByVal ToolTipText As Variant, _
Optional ByVal ExpandedIcon As Variant, _
Optional ByVal StateIcon As Variant, _
Optional ByVal StateIconToolTipText As Variant _
) As ClientBrowserNodeDefinition
В ней вторым параметром идет id уникальный номер (идентификатор) принадлежащий исходному документу.
Вопрос
Как (какой функцией) програмно узнать все пользовательские id уже примененые (которые уже принадлежат данному документу)
Простой выбор из списка ClientBrouserNodeDefinition дает только все id документа верхнего уровня , и если имеется (для сборки) подсборка с такойже клиентской панелью , доступ к ее параметрам (возможен) но затруднен (большой временной).
Должна же быть функция (типа глобальная) которая возращает скмество всех id (идентификаторов) задействованных в документе.
При попытке создать пользовательский ресурс (Definition) с id номером которой УЖЕ есть в документе приводит к ошибке его создания.
Заранее благодарю.


Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 6 [только новые]





Пост N: 334
Откуда: Россия, Московская область
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.10.07 14:36. Заголовок: Re:


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

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 446
Откуда: Россия, Новосибирск
Рейтинг: 2
ссылка на сообщение  Отправлено: 19.10.07 17:16. Заголовок: Re:


brigval спасибо за ответ.
Я попробую воспользоваться данным советом, главное что бы это не привело к временным задержкам (правдо они должны быть минимальны).Честно говоря как то перебирать (конечно в практике 5 -6 id не так и долго) на err как то обидно, хотя и в данном случае , наверно единственно правильно (щас попробую))
Спасибо.
Обидно что нет функции по освобождению ресурса , это происходит при закрытиии открытии вновь , данного документа, но как то это не совсем устраивает. При Update документа и всех его Documents ошибка присутствует.
Update (где возможно) всех составляющих Panels ничего не дает.
Из за отсутствия открытой функции по определению таких идентификаторов ( это затрагивает, например к слову и объект Атрибуты и другие объекты с пользовательскими возможностями) очень ограничивает использование API Инвентора , и складывается такое впечатление что Доска (ну просто из за не "профессиональности" (за этим словом каждый может видеть свою проблему)) при каждом выходе нового релиза "чуть - чуть" приоткрывает внутренний код наружу, и кстати не всегда профессионально {ну в плане использованных функций}.
Обидно сравнивать даже рядом , возможности доступа к объектам в среде development SW и Доски.
Чисто сумбурно , но просто наболело.
Спасибо.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 447
Откуда: Россия, Новосибирск
Рейтинг: 2
ссылка на сообщение  Отправлено: 19.10.07 18:32. Заголовок: Re:


brigval
Еще раз огромное спасибо за совет, попробовал, на цикле While ..... <> err , все прекрасно работает , итерация на сборке с 12 панелями (в подсборках) не выявило временной задержки (итерация по id как Long = всего 12 (столько набролось id ClientBrowserdefinition в подсборках ) ).
Еще раз спасибо. Удалось создать динамическую панель в браузере Инвентора как пользовательскую с представление подключаемых Документов ( через dll как ActiveX обьект Client панели браузера).
А вот Атрибуты Nodes (их перебор и нахождение KeyReference) заметно тормозят.
Как то от Атрибутов (точнее определение их Reference как альтернатива связи с AutoCad блоками ) придется отказаться.
Всего хорошего!


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 335
Откуда: Россия, Московская область
Рейтинг: 0
ссылка на сообщение  Отправлено: 19.10.07 19:11. Заголовок: Re:


Витек
Я тоже заметил, что узлы браузера обрабатываются довольно медленно.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 75
Откуда: Волгоград
Рейтинг: 0
ссылка на сообщение  Отправлено: 22.10.07 09:32. Заголовок: Re:


По поводу генерации уникальных (на самом деле, конечно же, практически уникальных) последовательностей символов уже все решено. Есть такая вещь на платформе Windows, как GUID - глобальный унифицированный идентификатор. Каждый раз при его генерации образуется уникальная последовательность символов и букв (что-то вроде 1596574F-9EE1-4439-854B-DF503099CEAE - наверняка видели в реестре).

Type GUID
l1 As Long
l2 As Long
l3 As Long
l4 As Long
End Type

Declare Function CoCreateGuid Lib "OLE32.DLL" (lpGuid As GUID) As Long
Declare Function StringFromGUID2 Lib "OLE32.DLL" (lpGuid As GUID, ByVal
lpString As String, ByVal cbBytes As Integer) As Integer

Public Function MakeGuid() As String
Dim id As GUID
Dim sTemp$
Dim nLen%, hr&

hr = CoCreateGuid(id)
If (hr = 0) Then
sTemp = StrConv(String(38, Chr(0)), vbUnicode)
StringFromGUID2 id, sTemp, Len(sTemp)
sTemp = StrConv(sTemp, vbFromUnicode)
MakeGuid = sTemp
End If
End Function

Public Sub testGuid()
Debug.Print MakeGuid
End Sub


немного другой пример:

Благодаря ф-ции CoCreateGuid из Microsoft OLE библиотеки ole32.dll можно гуиды даже в Екселе генерить (VBA макросом):

Option Explicit
Option Compare Binary

Public Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(7) As Byte
End Type

Public Declare Function StringFromGUID2 Lib "ole32.dll" _
(rclsid As GUID, ByVal lpsz As Long, ByVal cbMax As Long) As Long
Public Declare Function CoCreateGuid Lib "ole32.dll" _
(rclsid As GUID) As Long

Public Function StGuidGen() As String
Dim rclsid As GUID
If CoCreateGuid(rclsid) = 0 Then
StGuidGen = StGuidFromGuid(rclsid)
End If
End Function

Public Function StGuidFromGuid(rclsid As GUID) As String
Dim rc As Long
Dim stGuid As String
stGuid = String$(40, vbNullChar)
rc = StringFromGUID2(rclsid, StrPtr(stGuid), Len(stGuid) - 1)
StGuidFromGuid = Left$(stGuid, rc - 1)
End Function



Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 448
Откуда: Россия, Новосибирск
Рейтинг: 2
ссылка на сообщение  Отправлено: 22.10.07 12:42. Заголовок: Re:


Ab
Cпасибо, за пример.
Нужно попробовать, но напрямую это не совсем то.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 3
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация вкл, правка нет