ko_DocumentParam не объявляется; не меняется shtType при изменении штампа

Автор ainis, 05.06.10, 08:20:52

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

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

ainis

Нужно разработать приложение, которое бы читало данные в основной надписи чертежа (язык VB.Net 2005).
Возникли две проблемы.
1) Dim docPar As DocumentParam = iKompas.GetParamStruct(ko_DocumentParam) не срабатывает, так как ko_DocumentParam не объявлен. Что нужно подключить к проекту, чтобы не возникало ошибки?
2) Работаю с активным документом Компас:
    Dim iKompas As Kompas6API5.KompasObject = Marshal.GetActiveObject("KOMPAS.Application.5")
    Dim iDoc2D As ksDocument2D = iKompas.ActiveDocument2D 'активный документ Компас
    Dim docPar As DocumentParam = iKompas.GetParamStruct(ko_DocumentParam)
    Dim Sheet As SheetPar = docPar.GetLayoutParam 'Интерфейс параметров оформления

Тип штампа активного чертежа Sheet.shtType не меняется, даже если я его изменяю в активном чертеже Компас (всегда Sheet.shtType = 0). Как получить тип того штампа, который действительно имеет место в активном чертеже?

Использую Компас 3D V11
Заранее спасибо.

ainis


cosmosliva

Во-первых прошерстить SDK
в частности пример Step 3 - Создать документ - WorkDocument

для C#, для VB.NET думаю похоже

по пункту 1
использовать
using Kompas6Constants;

по пункту 2
Выдержка из Step3.cs
      
                        // Работа с документом
private void WorkDocument()
{
doc = (ksDocument2D)kompas.Document2D();
ksDocumentParam docPar = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
ksDocumentParam docPar1 = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);

if ((docPar != null) & (docPar1 != null))
{
docPar.fileName = @"c:\2.cdw";
docPar.comment = "Create document";
docPar.author = "User";
docPar.regime = 0;
docPar.type = (short)DocType.lt_DocSheetStandart;
ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam();
if (shPar != null)
{
shPar.shtType = 1;
shPar.layoutName = string.Empty;
ksStandartSheet stPar = (ksStandartSheet)shPar.GetSheetParam();
if (stPar != null)
{
stPar.format = 3;
stPar.multiply = 1;
stPar.direct = false;
}
}
// Создали документ: лист, формат А3, горизонтально расположенный
// и с системным штампом 1
doc.ksCreateDocument(docPar);

ainis

Спасибо.
Надо было мне именно в примеры на C# заглянуть, а я больше примеры на C++ и VB смотрел, не было бы проблем с ko_DocumentParam (кстати, я, естественно, использовал using Kompas6Constants;, в VB.NET это записывается Imports Kompas6Constants).
Что касается определения типа основной надписи, с этим по-прежнему проблемы: когда я программно создаю чертеж, задаю ему sheet.shtType, он сохраняется именно с заданным мной типом штампа.
Но узнать тип штампа активного чертежа никак не получается, все время Sheet.shtType = 0. Причем тип документа (Dim TypeDoc As Integer = iKompas.ksGetDocumentType) определяется верно, указатель на штамп (iStamp = iDoc2D.GetStamp) тоже получаю без проблем, открываю его, считываю из основной надписи информацию...

ainis

Такое впечатление, что что-то не так с функцией GetParamStruct для KompasObject. Пытаюсь получить разные данные из KompasObject, используя различные StructType2D, а получаю в итоге нули или строки нулевой длины.

cosmosliva

Даже любопытно стало  :o
как это - установить свойство Вы можете, а получить нет

Предположение 1 - Синтаксическое
(скорее всего не правильное)
GetLayoutParam - является методом
и обращение к нему

в обычном Бэйсике (пример - SDK\Basic\step3\step3.cls)
Set sheet = docPar.GetLayoutParam ' Set вместо Dim

в C#
ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam(); // () - метод

-- По идее сам компилятор должен указывать на ошибку
при обращение к методу как к свойству

Предположение 2 - логическое

ЦитироватьПытаюсь получить разные данные из KompasObject

а необходимо получить параметры текущего документа-чертежа
ksDocument2D Draw = (ksDocument2D)kompas.ActiveDocument2D();
и только затем
ksDocumentParam docPar1 = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
Draw.ksGetObjParam(Draw.reference,docPar1,ldefin2d.ALLPARAM);
ksSheetPar shPar = (ksSheetPar)docPar1.GetLayoutParam();
int i2 = shPar.shtType;

ainis