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

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

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

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

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

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

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

[C#] KOMPAS API7 Создание отрезка

Автор IbraM, 26.03.11, 19:36:11

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

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

IbraM

Приветствую всех. Появилось задание на шарпе с использованием АПИ7 КОМПАСа. Пытаюсь вот разобраться как это все дело работает. Убил много времени, не все, конечно же, понял. Просьба исправить мой пример, чтобы я попытался понять как идет работа с АПИ7. По примерам шарповским налепил некоторый код, который и надо подправить. Начать хочу с создания чертежа и отрезка на нем. Мой код успешно создает новый чертеж, а никакого отрезка не появляется.
Вот сам код. Методы не относящиеся к построениям опустил за ненадобностью.


using System;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
using Microsoft.Win32;

using kAPI7;
using Kompas6Constants;

namespace IbraM
{
public partial class Kompas
{
public void ExternalRunCommand([In] short command, [In] short mode, [In, MarshalAs(UnmanagedType.IDispatch)] object kompas_)
{
IKompasAPIObject ko = (IKompasAPIObject)kompas_;
IApplication app = (IApplication)ko.Application;
IKompasDocument2D doc = (IKompasDocument2D)app.Documents.Add(DocumentTypeEnum.ksDocumentDrawing, true);

//До этого момента все ок и создается чистый чертежик в компасе. Далее тишина.
ILineSegments lines = (ILineSegments)doc.ViewsAndLayersManager.Views.ActiveView;
ILineSegment ls = lines.Add();
ls.X1 = 50;
ls.Y1 = 50;
ls.X2 = 100;
ls.Y2 = 100;
ls.Update();
}
}
}


Все, разобрался. Посмотрев еще раз схему интерфейсов АПИ7, увидел, что линии, отрезки и прочая лабуда вызывается от IDrawingContainer. Модифицировав код, получил нужный результат. Уважаемые модераторы, прошу удалить тему, так как не нашел где это можно сделать самому.

IDrawingContainer box = (IDrawingContainer)doc.ViewsAndLayersManager.Views.ActiveView;
ILineSegments lines = box.LineSegments;
ILineSegment ls = lines.Add();
ls.X1 = 50;
ls.Y1 = 50;
ls.X2 = 100;
ls.Y2 = 100;
ls.Update();