Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Угловые, диаметральные размеры, знаки шероховатости, выноски



Делаются аналогично. Примеры их построения приведены в файле step99.pas, входящем в примеры библиотек из комплекта поставки КОМПАС.

Смена системы координат

В ряде случаев удобно вычислять координаты не в абсолютной системе координат, а во временной пользовательской. Для ее создания есть метод

ksMtr(x, y, Angle, scaleX, scaleY)

Здесь x, y - координаты начала локальной системы координат, angle – угол наклона системы координат в градусах, scaleX - масштаб локальной системы координат по оси Х, scaleY - масштаб локальной системы координат по оси Y. Отменяется действие локальной системы координат методом ksDeleteMtr.

Основная надпись

В документе типа "Чертеж" можно автоматизировать заполнение основной надписи. Каждая клетка основной надписи имеет свой номер (Рис. 6.3). Например, заполним поля "Разработал" (ячейка 110) и "Дата" (ячейка 130):

Var

stamp: ksStamp;

itemParam: ksTextItemParam;

Begin

// получаем ссылку на основную надпись

stamp:= ksStamp(iDocument2d.GetStamp);

itemParam:= ksTextItemParam(

kompas.GetParamStruct(ko_TextItemParam));

itemParam.Init;

// открываем ее для редактирования

stamp.ksOpenStamp;

// Сделать ячейку с номером 110 текущей

Stamp.ksColumnNumber(110);

// Поместить в текущую ячейку одну текстовую строку

ItemParam.s:= ' Иванов Д.И.';

Stamp.ksTextLine(ItemParam);

// Сделать ячейку с номером 130 текущей

Stamp.ksColumnNumber(130);

// Поместить в текущую ячейку одну текстовую строку -

// сегодняшнюю дату

ItemParam.s:= DateToStr(Now);

Stamp.ksTextLine(ItemParam);

// закрываем основную надпись

stamp.ksCloseStamp

end;

Как проверить, какого типа 2D документ является текущим – фрагмент или чертеж? (в фрагменте нет основной надписи и попытка работы с ней вызовет сообщение об ошибке)

// получаем ссылку на основную надпись

stamp:= ksStamp(iDocument2d.GetStamp);

itemParam:= ksTextItemParam(

kompas.GetParamStruct(ko_TextItemParam));

itemParam.Init;

// открываем ее для редактирования

if stamp.ksOpenStamp=0 then

Рис. 6.3. Нумерация ячеек основной надписи.

Begin

kompas.ksMessage

('Текущий документ не является чертежом');

Exit

end;

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

procedure LinDim(x1,y1,x2,y2,dx,dy:DOUBLE; diamsign:boolean; pl1,pl2:boolean);

// простановка линейного размера

// x1,y2,x2,y2 - координаты начал выносных линий

// dx,dy - смещение размерной линии относительно точки x1,x2

// diamsign - проставлять ли знак диаметра

// pl1, pl2 - рисовать ли первую и вторую выносные линии

Var

param: ksLDimParam;

dPar: ksDimDrawingParam;

sPar: ksLDimSourceParam;

tPar: ksDimTextParam;

str: ksChar255;

arrText: ksDynamicArray;

Begin

// структура для параметров размера

param:= ksLDimParam(kompas.GetParamStruct(ko_LDimParam));

// параметры отрисовки размера

dPar:= ksDimDrawingParam(param.GetDPar);

// положение размерной линии

sPar:= ksLDimSourceParam(param.GetSPar);

// параметры размерного текста

tPar:= ksDimTextParam (param.GetTPar);

dPar.Init;

dPar.textBase:= 0; // способ размещения текста

// тип первой стрелки (1-изнутри, 2-снаружи)

dPar.pt1:= 1;

dPar.pt2:= 1; // тип второй стрелки

// вкл/выкл. выносные линии

dPar.pl1:=not(pl1);

dPar.pl2:=not(pl2);

dPar.ang:= 0; // угол наклона выноски

dPar.lenght:= 0; // длина выноски

sPar.Init;

// начало первой выносной линии

sPar.x1:= x1;

sPar.y1:= y1;

// начало второй выносной линии

sPar.x2:= x2;

sPar.y2:= y2;

// смещение размерной линии

sPar.dx:= dx;

sPar.dy:= dy;

// относительно какой точки задается смещение:

// 1 - от 1,y1, 2 - от x2,y2

sPar.basePoint:= 1;

tPar.Init(False);

// автопростановка номинала

tPar.SetBitFlagValue(_AUTONOMINAL, true);

if diamsign then

tPar.sign:= 1;

// создаем размер

iDocument2d.ksLinDimension(param)

end;

Для заполнения ячеек основной надписи заготовим процедуру, заносящую текст в ячейку с указанным номером:

procedure Stamp(c:byte; t:string);

Var

stamp: ksStamp;

itemParam: ksTextItemParam;

Begin

// получаем ссылку на основную надпись

stamp:= ksStamp(iDocument2d.GetStamp);

itemParam:=

ksTextItemParam(kompas.GetParamStruct(ko_TextItemParam));

itemParam.Init;

// открываем ее для редактирования

if stamp.ksOpenStamp=0 then

Begin

kompas.ksMessage

('Текущий документ не является чертежом');

Exit

end;

// Сделать ячейку текущей

Stamp.ksColumnNumber(c);

// Поместить в текущую ячейку одну текстовую строку

ItemParam.s:= t;

Stamp.ksTextLine(ItemParam);

// закрываем основную надпись

stamp.ksCloseStamp

End;

6.5.Пример разработки прикладной библиотеки «Втулка»

Пользуясь полученными знаниями, создадим полноценную библиотеку, выполняющую построение 2D чертежа втулки (Рис. 6.4) и заполнение основной надписи.

Рис. 6.4 Содержательная часть чертежа втулки.

Одну точку чертежа надо будет зафиксировать. Примем левую нижнюю точку контура за (0,0) относительно системы координат вида.

Приведем теперь все три файла проекта библиотеки «Втулка».

Первый файл проекта:

library chanel;

{$E rtw}

Uses

SysUtils,Classes,KsTLB,main in 'main.pas',former in 'former.pas' {MainForm};





Дата публикования: 2014-11-04; Прочитано: 270 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.012 с)...