Главная » Delphi, OLE, САПР » Виды Системы координат КОМПАС в DELPHI

0

В среде КОМПАС существует две разновидности систем координат (далее сокращенно СК): СК листа и СК вида. В чем между ними разница? Прежде чем ответить на этот вопрос сделаем небольшое замечание по поводу направления координатных осей.

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

Строго  говоря,  создавать  виды  совсем  необязательно  и  вы  легко

можете обойтись без них. В условиях отсутствия видов все построения осуществляются в СК листа. Начало координат этой СК расположено в левом нижнем углу листа. При этом точка с координатами (20,5) будет соответствовать левому нижнему углу рамки.

Однако если вы создали один или несколько видов, то вы уже будете работать в СК вида. При этом расположение начала координат будет зависеть от тех параметров, с которыми был создан данный вид.

Если вы работаете с несколькими видами, то вам нужно быть вдвойне внимательными: во-первых, для того чтобы следить за тем в СК какого вида вы сейчас находитесь, а во-вторых, стараться не допустить пересечения этих видов.

Для  пересчета  координат   предусмотрено  два  метода  интерфейса

ksDocument2D: ksSheetToView и ksViewToSheet. Начнем с первого. Он предназначен для пересчета координат из СК листа в СК текущего вида. Вот прототип этого метода:

ksSheetToView(

x: Double; //Координата x, которую нужно пересчитать

y: Double; //Координата y, которую нужно пересчитать

var outX: Double; //Сюда будет записано пересчитанное

//значение координаты x

var outY: Double //Сюда будет записано пересчитанное

//значение координаты y

): Integer;

нуль.

В случае успеха данный метод возвращает единицу, а в случае ошибки

Второй  метод  очень  похож  на  первый.  Он  выполняет  обратный

пересчет из СК текущего вида в СК листа. Вот его прототип:

ksViewToSheet(

x: Double; //Координата x, которую нужно пересчитать

y: Double; //Координата y, которую нужно пересчитать

var outX: Double; //Сюда будет записано пересчитанное

//значение координаты x

var outY: Double //Сюда будет записано пересчитанное

//значение координаты y

): Integer;

Как видите, они очень похожи. Данный метод также как и первый в случае успеха возвращает единицу, а в случае ошибки нуль.

Ну и напоследок приведу пример вызова одного из этих двух методов (второй будет вызываться аналогичным образом):

var

………

begin

………

………

Document2D: ksDocument2D; x, y: double;

Document2D.ksSheetToView(50,100, x,y);

Что ж, думаю тут все понятно.

Создание нового вида

Процесс создания нового вида можно разделить на три шага:

1)                                  получение интерфейса ksViewParam параметров вида;

2)                                  заполнение свойств этого интерфейса;

3)                                  создание нового вида.

Теперь подробно о каждом из этих шагов. Получить интерфейс ksViewParam можно с помощью  уже хорошо известного нам метода GetParamStruct интерфейса KompasObject, для этого методу в качестве параметра надо передать константу ko_ViewParam. Теперь рассмотрим свойства этого интерфейса:

angle – угол наклона вида в СК листа; name – строка с именем вида;

scale_ – масштаб вида;

x – координата x точки начала координат вида; y – координата y точки начала координат вида.

Метод у интерфейса ksViewParam всего один это метод Init, который сбрасывает все настройки вида.

Остался последний шаг – это создание самого вида. Делается это с помощью метода ksCreateSheetView интерфейса ksDocument2D.  Вот прототип данного метода:

ksCreateSheetView(

const par: IDispatch; //Интерфейс ksViewParam

var number: Integer  //Номер создаваемого вида

): Integer;

По поводу номера вида нужно пояснить. У вида есть две характеристики: номер и ссылка на него. Ссылку на вид в случае успеха возвращает данная функция (а в случае ошибки нуль). Влиять на ссылку вы никак не можете.

А вот номер вида вы можете устанавливать сами с помощью параметра number этого метода. При этом система КОМПАС попытается создать вид с таким номером, если это невозможно, то произойдет ошибка и вид создан не будет. Если же в качестве значения параметра number вы передадите значение нуль, то система КОМПАС создаст вид со следующим порядковым номером по отношению к предыдущему созданному виду (1,2,3,4, ….). А в

значение параметра number запишет номер созданного вида.

Теперь перейдем к практике. Ниже приводится исходный текст программы, в которой демонстрируется создание нового вида.

var

……

Begin

……

……

Kompas: KompasObject; Document2D: ksDocument2D; ViewParam: ksViewParam; ViewNumber: Integer;

//Получаем интерфейс параметров вида

ViewParam:=ksViewParam(kompas.GetParamStruct(ko_ViewParam));

//Устанавливаем параметры нового вида ViewParam.name:=’Главный вид’; ViewParam.x:=30;

ViewParam.y:=30;

ViewNumber:=0;

//Создаем новый вид

Document2D.ksCreateSheetView(ViewParam,ViewNumber);

//Теперь в переменной ViewNumber номер созданного вида

При этом если все правильно сделано вы получите приблизительно следующую картину:

Переключение между видами

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

Когда вы создаете новый вид, он автоматически становится текущим. И вы уже работаете в СК этого вида. Для того чтобы сделать какой-то вид текущим используется метод ksOpenView интерфейса ksDocument2D. Вот прототип этого метода:

ksOpenView(number: Integer): Integer;

В качестве единственного параметра он принимает номер вида, который следует сделать текущим. В случае успеха данный метод возвращает единицу, а в случае ошибки нуль.

После того как новый вид стал текущим вы сразу же начинаете работать в СК этого вида.

Источник: Норсеев Сергей, «РАЗРАБОТКА ПРИЛОЖЕНИЙ ПОД КОМПАС В DELPHI»

По теме:

  • Комментарии