Имя файла и параметры сохранения модели

Автор VSTuner, 14.04.07, 02:38:02

« предыдущая - следующая »

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

VSTuner


Народ, что-ето не получается сохранить файл в папку с заданным (программно) именем подскажите плиииз, а может и коротким исходничком побалуете??? (Delphi7+Kompas v8.1)

IronMaxxx

doc3 := ksDocument3D( kompas.Document3D() );
doc3.Create(true, true);
                 ...
doc3.fileName := 'С:\Имя детали.m3d';
doc3.Save;
doc3.close;
doc3 := nil;

VSTune

А без сохраненния файла можно ли задать его имя?
Да кстати, почему то не сохраняется автор и комментарии!

Gek

Цитата: VSTune от 21.04.07, 02:56:27
А без сохраненния файла можно ли задать его имя?

Вопрос месяца!  :o:
Пока файл не сохранен, его на самом деле нету  :cl:
Как можно задать имя того, чего нет?

VSTune

Тогда почему же несохраненному файлу чертежа можно присвоить имя и прочие параметры, [заметь без сохранения/b] файла?!!
И даже у сохраненной модели все равно другие параметры, кроме имени, не сохраняются!!!

yarikv

можно присвоить имя файла. просто нужно после задания всех параметров выполнить функцию
iPart.Update();//для параметров детали
iDoc3D.UpdateDocumentParam;//для параметров документа (имя файла)

кстати как у тебя получилось без сохранения файла передать имя файла чертежу? можешь код привести?

Gek

Цитата: VSTune от 22.04.07, 01:18:32
Тогда почему же несохраненному файлу чертежа можно присвоить имя и прочие параметры, [заметь без сохранения/b] файла?!!

Хорошо, и какой в этом смысл? В присвоении этих параметров файлу без сохранения?

sorockinalex

У меня немного другая проблемка. Загружен файл чертежа. У него есть параметры 'автор' (author) и 'комментарий' (comment).
При вызове формы для изменения основной надписи не могу считать author -  в тексте программы (где я вставил вывод встплывающего тектового сообщения) это сообщение пустое ( iKompas.ksMessage(iDocParams.author);) Объясните, пожалуйста, в чём дело?

function ShowEditStampForm (iKompas:KompasObject;iDoc:ksDocument2D):Reference;
var
  idocParams : ksDocumentParam;
begin
  iDocParams := ksDocumentParam (iKompas.GetParamStruct (35));
  Forms.Application.Handle:=iKompas.ksGetHWindow;
  iKompas.ksEnableTaskAccess(0);
  Form2:=TForm2.Create(Forms.Application);
  iKompas.ksMessage(iDocParams.author);
  Form2.Edit5.text:=iDocParams.author;
  Form2.ShowModal;
  Form2.Free;
  iKompas.ksEnableTaskAccess(1);
  Forms.Application.Handle:=0;
end;

yarikv

сначала нужно определить текущий чертеж

iDoc2D:=ksDocument2D(iKompas.ActiveDocument2D);

потом получить параметры документа

iDocPar:=ksDocumentParam(iKompas.GetParamStruct(ko_DocumentParam));
iDoc2D.ksGetObjParam(iDoc2D.reference, iDocPar, ALLPARAM);

после этого становятся доступными параметры документа

sorockinalex

Спасибо за помощь! Помог!
я забыл прописать строчку
iDoc.ksGetObjParam(iDoc.reference, iDocr, ALLPARAM);

iDoc и iKompas передаются в этот Unit из Electrica.dpr

sorockinalex

Посмотрел другой Unit. Не понял. Там работает запись параметров без строчки   iDoc.ksGetObjParam(iDoc.reference, iDocParams, ALLPARAM);

вот код:
function NewProject (iKompas:KompasObject;iDoc:ksDocument2D):Reference;   //Создаём новый проект и первый лист, сохраняем его.
var
idocParams : ksDocumentParam;
iSheetParams : ksSheetPar;
iStdSheet : ksStandartSheet;
  begin
    //Создание и заполнение структры параметров чертежа
    iDocParams := ksDocumentParam (iKompas.GetParamStruct (35));
    with iDocParams do
      begin
        Init;
        fileName := iKompas.ksSaveFile ('*.cdw','','',TRUE);
        if fileName = '' then Exit;
        author :=author_var;
        comment := comment_var;
        iDocParams.regime :=0; //видимый режим
      end;

    //Создание и заполнение структуры параметров листа, принадлежащей структуре pDocParams
    iSheetParams := ksSheetPar (iDocParams.GetLayoutParam);
    iSheetParams.Init;
    isheetparams.layoutName := ('C:\RTWExamples\Example1\GRAPHIC.lyt');
    iSheetParams.shtType := 1000; //Тип штампа

    //Создание и заполнение структуры параметров стандартного листа принадлежностей структуре pSheetParms
    iStdSheet := ksStandartSheet (iSheetParams.GetSheetParam);
    iStdSheet.format :=3; //Формат А4
    iStdSheet.multiply :=1; //Кратность формата
    iStdSheet.direct := TRUE; //Расположение основной надписи вдоль длинной стороны листа

    //Создание документа: лист чертежа, формат А3, горизонтально ориентирован, системный штамп номер 2
    iDoc :=ksDocument2D (iKompas.Document2D);
    if iDoc.ksCreateDocument (iDocParams)=true then
      begin
        iDoc.ksSaveDocument('');
      end
  end;

sorockinalex

кстати, как заполнить поле "Организация"??? Не нашёл этого свойства!

sorockinalex

после вставки той строчки, теперь вылетает, причём не всегда, даже не понял в чём дело...

есть команда
COMMAND_1 :
  begin
    DocInformation (iKompas, iDoc);
    NewProject (iKompas, iDoc);
    ShowEditStampForm (iKompas, iDoc);
    EditStamp (iKompas, iDoc);
  end;

DocInformation - ввожу информацию о проекте (как ввести Организацию???)
NewProject - сздаёт первый лист и сохраняет в файл
ShowEditStampForm - форма редактирования штампа.

Компас вылетает как раз на строчке   iDoc.ksGetObjParam(iDoc.reference, iDocParams, ALLPARAM); именно при таком вызове команд.
Если самому создать лист или открыть..., то при вызове другим пунктом просто редактирование штампа вылета не происходит...
Может кто сталкивался с подобным?

sorockinalex

причём, если перед вызовом этой команды не было ни одного открытого листа, компас вылетает, но если был открыт лист, открытие формы редактирования штампа происходит не для вновь созданного листа, а для того, который был открыт до создания нового с помощью моей команды...