Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Exports. В документе типа Чертеж&quo




Uses

Begin

Begin

Var

Begin

Var

Begin

Begin

Var

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

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

stamp: ksStamp;

itemParam: ksTextItemParam;

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

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. Нумерация ячеек основной надписи.

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 - рисовать ли первую и вторую выносные линии

param: ksLDimParam;

dPar: ksDimDrawingParam;

sPar: ksLDimSourceParam;

tPar: ksDimTextParam;

str: ksChar255;

arrText: ksDynamicArray;

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

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);

stamp: ksStamp;

itemParam: ksTextItemParam;

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

stamp:= ksStamp(iDocument2d.GetStamp);

itemParam:=

ksTextItemParam(kompas.GetParamStruct(ko_TextItemParam));

itemParam.Init;

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

if stamp.ksOpenStamp=0 then

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}

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

LibraryName name 'LIBRARYNAME',

LibraryId name 'LIBRARYID',

LibraryEntry name 'LIBRARYENTRY';




Поделиться с друзьями:


Дата добавления: 2014-11-29; Просмотров: 425; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.019 сек.