• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

работа со стилями линий и текста

Автор Alexey_Ovtses, 25.04.13, 13:45:11

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Alexey_Ovtses

нужно определить имя стиля линии например отрезка (стиль внедренный)
дальше по имени стиля отрезок перекрашивается в системный стиль

определить получается только номер стиля (ikLineSegment.Style)

возможно по номеру можно определить параметры стиля и его имя,
но в SDK не нашел функций для работы с библиотеками стилей

Ответ на рисунке.
+ Благодарностей: 1

Alexey_Ovtses

Спасибо, функции нашел, но все равно не получается прочесть стили записанные в документ. функция ksGetLibraryStylesArray читает только библиотечные стили а мне нужно прочитать стили в документе

LPDISPATCH ksGetLibraryStylesArray (BSTR libraryName,
short libraryType);
функция просит параметр libraryName - полное имя библиотеки стилей

попробовал использовать функцию ksGetStyleParam

long ksGetStyleParam (short type, short styleId, LPDISPATCH param);
type тип стиля,
styleId номер стиля,
param указатель на интерфейс соответствующего типа.

но не могу определить параметр styleId, определяю стиль long ksGetObjectStyle( long obj ); но если его подставлять в styleId происходит выход за диапазон данных shor (styleId - short , ksGetObjectStyle - long)

может я что то не так делаю?

пример кода: так получается прочитать стили только из библиотеки
Dim l As Kompas6API5.ksDynamicArray = ka.ksGetLibraryStylesArray("c:\Program Files\ASCON\KOMPAS-3D V14\Sys\Graphic.lcs", 1)
MsgBox(l.ksGetArrayCount())

так стиль объекта прочитать не получается
Dim i5CurveStyleParam As Kompas6API5.ksCurveStyleParam = ka.GetParamStruct(Kompas6Constants.StructType2DEnum.ko_CurveStyleParam)
MsgBox(kdfrw.ksGetStyleParam(1, kdfrw.ksGetObjectStyle(ikCircle.Reference), i5CurveStyleParam))
MsgBox(i5CurveStyleParam.name)

Подскажите что делать?

А, что ksGetObjectStyle возвращает?
И типы переменных должны в функцию передаваться соответствующей длины, а если учесть что старшая и младшая часть переменной во внутреннем представлении поменяны местами, то что попадает в функцию?

Alexey_Ovtses

ksGetObjectStyle возвращает тип long функция ksGetStyleParam принимает тип short

вот что интересное получилось прогнал диапазон short от -32768 до 32767 в функции ksGetStyleParam, нужная мне линия нашлась с номером -32761, а в функции ksGetObjectStyle номер выдает 32775 выходящий за диапазон, может есть какое то правило перевода

Скорее всего стиль который Вы ищите styleId=7.

Alexey_Ovtses

номер 7 выдает утолщенную, номер -32761 выдает именно то что нужно

Alexey_Ovtses

получилось вычислить styleNumber по такой формуле -32768 + Math.Abs(32768 - kdfrw.ksGetObjectStyle(ikLineSegment.Reference))

По моему старший бит отвечает за знак, 32775>32767 значит для типа short число отрицательное, равное положительному 7, но если старший бит установить в 1 то получится число -32761.
+ Благодарностей: 1