Как получить содержимое колонки штампа?

Автор Spas, 25.07.14, 22:42:01

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

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

Spas

Здравствуйте!

Нужно получить содержимой колонки штампа.
Помогите дописать код:


var
  numb : integer;
  kompas : KompasObject;
  DocumentSpc : ksSpcDocument;
  Stamp : ksStamp;
  DArray : ksDynamicArray;
  TextLine : ksTextLineParam;
  TextItem : ksTextItemParam;
  ProjectMainFilePath : String;

begin
  Kompas := KompasObject (CreateKompasObject);
  DocumentSpc := ksSpcDocument (Kompas.SpcDocument ());
  DocumentSpc.ksOpenDocument (ProjectMainFilePath, 1);
  Stamp := ksStamp (DocumentSpc.GetStamp());
  Stamp.ksOpenStamp();
  Stamp.ksColumnNumber(2);
  DArray := ksDynamicArray (Stamp.ksGetStampColumnText(numb));
  TextLine := ksTextLineParam (Kompas.GetParamStruct(ko_TextLineParam));
  TextLine.Init();
  DArray.ksGetArrayItem(0, TextLine);

???? Как получить TextItem из TextLine ???

Смотрите пример c:\Program Files\ASCON\KOMPAS-3D V15\SDK\Pascal\DELPHIAUTO\step5\
procedure EditStamp;
+ Благодарностей: 1

VladAV

Тоже недавно разбирался с этим.

Если я не ошибаюсь, там лишний раз объявили динамический массив (arrpLineText := ksDynamicArray( kompas.GetDynamicArray(TEXT_LINE_ARR) );), он в коде не используется.

Spas

Как ни странно, но оба динамических массива используются!

VladAV

Spas:

Я имел ввиду не используется в примере c:\Program Files\ASCON\KOMPAS-3D V15\SDK\Pascal\DELPHIAUTO\step5\ в процедуре EditStamp. Можете указать, где в процедуре EditStamp этот массив используется?

Spas

Простой вариант получения содержимого колонки (column) активного документа doc7 через API7

Function GetStCol (column : integer): String;
var
  i, j : integer;
  r    : string;
  sheets   : ILayoutSheets;
  sheet    : ILayoutSheet;
  stamp    : IStamp;
  text     : IText;
  textline : ITextLine;
  textitem : ITextItem;

begin
  sheets := doc7.LayoutSheets;
  sheet := sheets.ItemByNumber[1];
  stamp := sheet.Stamp;
  text := stamp.Text[column];
  if (text.Count = 0) then exit;
  for i := 1 to text.Count do   // количесиво строк
      begin
      textline := text.TextLine[i-1];
      if (textline.Count > 0 ) then
        for j := 1 to textline.Count do   // количество компонентов в строке
          begin
          textitem := textline.TextItem[j-1];
          if (textitem.ItemType = 0) then r := r + textitem.Str;
          end;
      end;
  Result := r;
  textitem := nil;
  textline := nil;
  text := nil;
  stamp := nil;
  sheet := nil;
  sheets := nil;
end;

Spas

Подскажите через какие интерфейсы в API7 можно получить доступ к шпампу файла-спецификации?


Spas

Как до него добраться?

В документе-чертеже  IKompasDocument ->  ILayoutSheets -> ILayoutSheet -> IStamp.
Но в файле-спецификации возникает ошибка на получении ILayoutSheet.

IKompasDocument - Базовый класс документов КОМПАС и спецификация не является исключением.
Var
KompasAPI:IApplication;
Doc:IKompasDocument;

Doc:=KompasAPI.ActiveDocument;
Дальше Вы знаете.

Kamerton

Цитата: Spas от 21.08.14, 12:50:28
Как до него добраться?

Похоже, что никак :( Сам в тупике по этому поводу...

Цитата: Sabahs от 21.08.14, 12:59:11
IKompasDocument - Базовый класс документов КОМПАС и спецификация не является исключением.

Всё бы было хорошо, если бы не было так плохо... Вот что написано в SDK по поводу IKompasDocument->ILayoutSheets : "Свойство используется только для документа "Чертеж""(с) (скриншоты прилагаются).
И на практике это действительно так - для Спецификаций LayoutSheets возвращает null.

При попытке получить Штамп как-то через ISpecificationDocument, обнаружил, что класс крайне содержателен (без методов и с 1 свойством - AttachedDocuments), и Штампа в нём также нет (AttachedDocuments пусто)...

На этом мысли заканчиваются...

Если кто-то сможет помочь получить Штамп из Спецификации через API7 - буду благодарен :)