Работа со спецификацией

Автор Roman Skorobogatov, 21.04.23, 08:16:25

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

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

Roman Skorobogatov

Здравствуйте. Я только начинаю работать с API Компаса и выбрал C#.
Эта тема здесь: https://forum.ascon.ru/index.php?topic=34622.0

Сходил по первой ссылке https://forum.ascon.ru/index.php?topic=23942.0
Скопировал пример.
Не сработала строка:
ksSpecification iSpc = (ksSpecification)iDocumentSpc.GetSpecification();iDocumentSpc.GetSpecification() вернул null

Тогда стал добросовестно рыться в интернете. В результате получилось вот так:

    public partial class Form1 : Form
    {
        private KompasObject kompas;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (kompas == null)
            {
                Type t = Type.GetTypeFromProgID("KOMPAS.Application.5");
                kompas = (KompasObject)Activator.CreateInstance(t);
            }

            if (kompas != null)
            {
                kompas.Visible = true;
                kompas.ActivateControllerAPI();
                if (kompas.ksIsModuleSpecificationActive() == 0)
                    kompas.ksModuleSpecification(true);
            }

            if (kompas != null)
            {
                ksSpcDocument iDocumentSpc = (ksSpcDocument)kompas.SpcDocument();
                if (iDocumentSpc != null)
                {
                    ksDocumentParam iDocumentParam = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
                    ksSpcDescrParam iSpcDescrParam = (ksSpcDescrParam)kompas.GetParamStruct((short)StructType2DEnum.ko_SpcDescrParam);
                    if ((iDocumentParam != null) && (iSpcDescrParam != null))
                    {
                        iDocumentParam.Init();
                        iDocumentParam.type = (int)DocType.lt_DocSpc;// для СП №4

                        iSpcDescrParam.Init();

                        ksSheetPar iSheetParam = (ksSheetPar)iDocumentParam.GetLayoutParam();
                        iSheetParam.Init();
                        iSheetParam.layoutName = @"C:\Program Files\ASCON\KOMPAS-3D V13\Sys\graphic.lyt";
                        iSheetParam.shtType = 1;

                        iDocumentSpc.ksCreateDocument(iDocumentParam);
                        iDocumentSpc.ksSetObjParam(iDocumentSpc.reference, iSpcDescrParam, ldefin2d.ALLPARAM);

                        for (int i = 1; i < 21; i++)
                        {
                            ksSpecification iSpc = (ksSpecification)iDocumentSpc.GetSpecification();
                            if (iSpc != null)
                            {
                                iSpc.ksSpcObjectCreate("", 0, 30, 0, 0, 0);
                                int reference = iSpc.ksSpcObjectEnd();
                                ksSpcObjParam iSpcObjParam = (ksSpcObjParam)kompas.GetParamStruct((short)StructType2DEnum.ko_SpcObjParam);
                                iSpc.ksSpcObjectEdit(reference);
                                iDocumentSpc.ksGetObjParam(reference, iSpcObjParam, ldefin2d.ALLPARAM);
                                iSpcObjParam.blockNumber = 0;
                                iSpcObjParam.draw = 1;
                                iSpcObjParam.firstOnSheet = 0;
                                iSpcObjParam.ispoln = 0;
                                iSpcObjParam.posInc = 1;
                                iSpcObjParam.posNotDraw = 0;
                                iDocumentSpc.ksSetObjParam(reference, iSpcObjParam, ldefin2d.ALLPARAM);
                                iSpc.ksSetSpcObjectColumnText(3, 1, 0, i.ToString());
                                iSpc.ksSetSpcObjectColumnText(4, 1, 0, "АБВГ.123456." + i.ToString() + "\nГОСТ 00");
                                iSpc.ksSetSpcObjectColumnText(5, 1, 0, "Изделие " + i.ToString());
                                iSpc.ksSetSpcObjectColumnText(6, 1, 0, "1");
                                iSpc.ksSetSpcObjectColumnText(7, 1, 0, "Note");
                                reference = iSpc.ksSpcObjectEnd();
                            }
                           
                        }

                    }
                }
            }

        }
    }

Но (ksSpecification)iDocumentSpc.GetSpecification() всё равно возвращает null

p3452

Скорее всего
Цитата: Roman Skorobogatov от 21.04.23, 08:16:25Но (ksSpecification)iDocumentSpc.GetSpecification() всё равно возвращает null
это следствие предыдущих ошибок.
Провертеть все предыдущие переменные... и вот это "@C:\Program Files\ASCON\KOMPAS-3D V13\Sys\graphic.lyt":
"V13" - ?
"graphic.lyt" - ?