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

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

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

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

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

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

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

Пользовательские данные в документе Компас.

Автор A.n.d.r.e.w, 09.10.24, 08:59:09

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

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

A.n.d.r.e.w

Привет форум.
Есть нужда сохранить свой блок данных в 2д документе.
На ум приходит создание табличного атрибута в документе
с напихиванием данных в него, но как-то это не очень нравится.
Может есть какой-то правильный способ?

lavgirb

Цитата: A.n.d.r.e.w от 09.10.24, 08:59:09Привет форум.
Есть нужда сохранить свой блок данных в 2д документе.
На ум приходит создание табличного атрибута в документе
с напихиванием данных в него, но как-то это не очень нравится.
Может есть какой-то правильный способ?
А штатные атрибуты не подойдут? Цель то какая?
А то, может и текстовый файл с имененем, как у чертежа сойдёт. Записывать и читать быстрее. Можно и без установленного КОМПАС.

A.n.d.r.e.w

Цитата: lavgirb от 09.10.24, 09:33:49Цель то какая?
у меня библиотека таким образом работает..
пользователь вводит через панель свойств кучу разных параметров невизуальных
которые должны сохраняться в документе. Эти параметры упаковываются просто в блок памяти
который надо куда-то засунуть. Отдельный файл это еще неудобнее чем атрибут.
Сейчас делают восьмистолбцовый табличный атрибут целых значений и пишу туда.
Каждая ячейка 4 байта. Округляю до количества целых строк в верх.
При чтении наоборот вычитываю ячейки в стрим, отрезаю пустой хвост.

Валерий Изранов

 A.n.d.r.e.w, а почему вы не хотите использовать специально предназначенные для этого Access, Excel?
Excel очень бодро создает любые ячейки,округляет и обрезает хвосты.
Помимо этого у него огромная масса возможностей.
Начальные навыки работы за 4 часа.

A.n.d.r.e.w

Достаточно хорошо знаком с этими продуктами. Но цель моей библиотеки не анализировать данные и раскладывать по ячейкам, вы не правильно меня поняли. Мне просто нужно сохранить кусок памяти в документе Компас. Моей библиотеке нужно это. Этот документ я могу переслать партнеру у которого стоит такая же библиотека, которая сможет эти данные вычитать и работать с ними. Что в этих данных и как они используются не важно. Просто вопрос как прикрутить кусок памяти к документу Компас.

Валерий Изранов

Компас прилично чертит и отвратительно умеет работать с памятью.
Найдите другой путь.

A.n.d.r.e.w

Цитата: Валерий Изранов от 09.10.24, 12:04:41Компас прилично чертит и отвратительно умеет работать с памятью.
Найдите другой путь.
Мне кажется одно с другим очень тесно связано. Ды, были релизы с утечками приличными, но вроде сейчас норм.
Те же атрибуты это доп память под пользовательские данные.
В макрообъектах как 2д так и в 3д можно сохранять свои данные какие хошь.
А просто в документе нельзя получается (

Валерий Изранов

Искренне  желаю вам успехов в трудном деле.

A.n.d.r.e.w


Lemieux

+ Благодарностей: 2

Toptotal

Цитата: A.n.d.r.e.w от 09.10.24, 08:59:09Есть нужда сохранить свой блок данных в 2д документе.
Я записываю данные и файлы в поток ntfs. На этом сделан плагин mPDM.wdx , данные из потока можно перенести в свойства документа компас и обратно, по сути то же что и ячейка данных в таблице..

UU

Цитата: Lemieux от 09.10.24, 13:37:05Чем не устраивает  IUserDataStorage?
100% устраивает, можно, что хочешь запихнуть и пароль поставить.

Lemieux

Цитата: UU от 09.10.24, 22:07:53что хочешь запихнуть
У него есть свои ограничения, но для для работы с КОМПАС он отлично подходит.

UU

Цитата: Lemieux от 10.10.24, 08:50:31У него есть свои ограничения, но для для работы с КОМПАС он отлично подходит.
Любые ограничения можно обойти если подумать.

Lemieux

Цитата: UU от 10.10.24, 09:07:52Любые ограничения можно обойти если подумать.
Хватит разводить демагогию. Думать Вы собрались. Попробуйте там сохранить не КОМПАС-объект.

UU

Легко, я использовал для того, чтобы данные записывать.
изображение_2024-10-10_111708083.png

A.n.d.r.e.w

Цитата: Lemieux от 09.10.24, 13:37:05Чем не устраивает  IUserDataStorage?

На первый взгляд устраивает. Попробую раскурить )

A.n.d.r.e.w

Раскурил. Подходит!

делаю так:


procedure Test;
  var
    doc: IKompasDocument;
    stgm: IUserDataStoragesMng;
    stgs: IUserDataStorages;
    stg: IUserDataStorage;
    str: WideString;
    data: OleVariant;
    id, i: integer;
    MS: TMemoryStream;
    b: byte;

  const
    stgName='dko_storage';
    stgItemName='dko_data';
    stgPass='123';
    TestFile='C:\Program Files\ASCON\KOMPAS-3D v21\SDK\test';

  begin

    doc:=(IDispatch( CreateKompasApplication ) as iapplication) .ActiveDocument;

    //получим менеджера хранилищ
    stgm:= doc.UserDataStoragesMng;

    //проверим есть ли у документа коллекция хранилищ
    stgs:=stgm.Item[doc];

    //если нет то создадим
    if stgs=nil then
      stgs:=stgm.Add(doc);

    //проверим есть ли уже наше хранилище
    stg:=stgs.Item[stgName];

    //если нет то создадим хранилище
    if stg=nil then
    begin
      stg:=stgs.Add(stgName);
      stg.SetPassword('', stgPass);
      stg.Version[stgPass]:=13;
    end;

    //проверим имя хранилища
    str:=stg.Name[stgPass];

    //проверим версию хранилища
    str:=inttostr(stg.Version[stgPass]);

    //проверим есть ли наш элемент в хранилище
    //проверяем по комментарию
    str:=stg.GetObject(stgItemName, data, id);

    //создадим блок данных для хранения
    MS:=TMemoryStream.Create;
    MS.LoadFromFile(TestFile+'.txt');
    MS.Position:=0;

    //создадим массив байт
    data:=VarArrayCreate([0, ms.Size-1], varByte);

    //заполним массив
    for i:=0 to ms.Size-1 do
      begin
        MS.Read(b, 1);
        data[i]:=b;
      end;

    //если еще нет нашего элемента в хранилище то создаем
    if id<0 then
    begin
      //добавим элемент в хранилище и получим индекс
      id:=stg.AddObject(stgPass, data, stgItemName);
    end
    else
    begin
      //иначе задаем значение существующего
      stg.SetObject(stgPass, stgItemName, data, str);
    end;



    //проверим что сохранилось



    //очистим данные
    VarClear(data);

    //очистим ссылки
    stgs:=nil;
    stg:=nil;

    //очистим стрим
    MS.Clear;

    //получим коллекцию хранилищ документа
    stgs:=stgm.Item[doc];

    //получим хранилище из коллекции по имени
    stg:=stgs.Item[stgName];

    //получим данные а за одно индекс и комментарий
    str:=stg.GetObject(id, data, i);

    //вычитаем все в стрим
    for i:=0 to VarArrayHighBound(data, 1) do
    begin
      b:=data[i];
      MS.Write(b, 1);
    end;

    //сохраним данные в другой файл
    MS.SaveToFile(TestFile+'_1.txt');

    MS.Destroy;
  end;


Lemieux, еще раз спасибо!  :)

П.С.
Если кто подскажет как перегнать память в VT_ARRAY и обратно более изящным способом чем перебором элементов в цикле, тому буду признателен.


Lemieux

Цитата: UU от 10.10.24, 11:17:31Легко, я использовал для того, чтобы данные записывать.
изображение_2024-10-10_111708083.png
Читаю книгу, вижу фигу. Всё с Вами понятно. Вы даже не понимаете, что постите. Я когда пришёл на форум и вообще ничего не знал об архитектуре КОМПАС и его API, Вы мне казались эрудированным человеком в области API КОМПАС. Но читая все Ваши сообщения от Scull, Nipal и тд я убедился в обратном.

p3452

Цитата: Lemieux от 10.10.24, 18:58:14Читаю книгу, вижу фигу. Всё с Вами понятно. Вы даже не понимаете, что постите. Я когда пришёл на форум и вообще ничего не знал об архитектуре КОМПАС и его API, Вы мне казались эрудированным человеком в области API КОМПАС. Но читая все Ваши сообщения от Scull, Nipal и тд я убедился в обратном.
Lemieux, кто Вам дал право ХАМИТЬ?
Вы кто? - НИКТО и звать Вас НИКАК!
А человек, которому Вы ХАМИТЕ, 10 лет (как минимум) "тащил" Форум - "по программированию" и автор ряда НЕ СЛАБЫХ Приложений...
Да, сейчас ситуация складывается, НЕ ПРОСТО, для всех НАС - НЕ ПРОСТО, но опускаться до откровенного хамства - себя не уважать!
ИМХО: Считаю Вам надо извиниться или покинуть Форум!
+ Благодарностей: 3