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

Interface. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,



Uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls,LDefin2D, ksConstTLB, ksAuto, ksTLB;

Type

TMainForm = class(TForm)

Edit1: TEdit; Edit2: TEdit; Edit4: TEdit; Button2: TButton; Button3: TButton;

Label1: TLabel; Label2: TLabel; Label3: TLabel;

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

Var

MainForm: TMainForm;

Implementation

uses main;

{$R *.dfm}

//--------------------------------------------------------------------------------------

procedure DrawBusher(x0,y0:double; nm:string; D1,D2,L:double);

// D1 - внутренний диаметр; D2 - наружный диаметр; L - длина втулки

// x0,y0 - координаты левого нижнего угла вида; mn - имя вида

procedure MakeView(x0,y0:DOUBLE; nm:STRING);

var par:ksViewParam;

n:INTEGER;

Begin

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

with par do

Begin

Init;

// точка привязки вида

x:= x0;

y:= y0;

scale:= 1;

Angle:= 0;

// цвет вида, когда он активен

Color:= clRed;

state:= stACTIVE;

name:= nm

end;

n:=0;

iDocument2D.ksCreateSheetView(par, n)

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;

//------------------------------------------------------------------------------------

procedure Contour1;

Begin

iDocument2D.ksLineSeg(0,D2-(D2-D1)/2,L,D2-(D2-D1)/2,1);

iDocument2D.ksLineSeg(0,D2-(D2-D1)/2,0,D2,1);

iDocument2D.ksLineSeg(L,D2-(D2-D1)/2,L,D2,1);

iDocument2D.ksLineSeg(0,D2,L,D2,1)

end;

//----------------------------------------------------------------------------------------

procedure Contour2;

Begin

iDocument2D.ksLineSeg(0,0,L,0,1);

iDocument2D.ksLineSeg(L,0,L,(D2-D1)/2,1);

iDocument2D.ksLineSeg(L,(D2-D1)/2,0,(D2-D1)/2,1);

iDocument2D.ksLineSeg(0,(D2-D1)/2,0,0,1)

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; // способ размещения текста

dPar.pt1:= 1; // тип первой стрелки (1- внутри, 2 – снаружи)

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; {20}

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

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

//---------------------------------------------------------------------------------

Begin

// создали вид

MakeView(x0,y0,nm);

// осевая линия

iDocument2D.ksLineSeg(-5,D2/2,L+5,D2/2,3);

Contour1;

// штриховка контура1

iDocument2D.ksHatch(0,45,1,5,5,D2-(D2-D1)/2+5);

Contour1;

iDocument2D.ksEndObj;

Contour2;

// штриховка контура2

iDocument2D.ksHatch(0,45,1,5,0,0);

Contour2;

iDocument2D.ksEndObj;

// внешний контур

iDocument2D.ksLineSeg(0,D2-(D2-D1)/2,0,(D2-D1)/2,1);

iDocument2D.ksLineSeg(L,D2-(D2-D1)/2,L,(D2-D1)/2,1);

// длина

LinDim(0,0,L,0,0,-20,false,true,true);

// наружный диаметр

LinDim(0,0,0,D2,-20,0,true,true,true);

// внутренний диаметр

LinDim(0,(D2-D1)/2,0,(D2-D1)/2+D1,-10,0,true,true,true);

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

Stamp(1,'Втулка');

Stamp(3,'Сталь 40Х');

Stamp(9,'ИМТ');

Stamp(8,'1');

Stamp(110,'Иванов И.И.');

Stamp(130,DateToStr(Now))

end;

//--------------------------------------------------------------------------

procedure TMainForm.Button3Click(Sender: TObject);

var d1,d2,l:double;

Begin

Try

d1:=StrToFloat(Edit2.Text);

d2:=StrToFloat(Edit1.Text);

l:=StrToFloat(Edit4.Text)

Except

Kompas.ksMessage('Неверные данные');

abort

end;

if d1>=d2 then

Begin

Kompas.ksMessage('Внутренний диаметр больше наружного');

abort

end;

DrawBusher(100,100, 'busher',d1, d2, l)

End;

End.

На рисунке 6.6. показан чертёж с результатами работы библиотеки «Втулка».

Рис.6.6. Чертёж втулки, созданный прикладной библиотекой

6.6.Содержание отчёта

1.Титульный лист.

2. Задание.

3. Краткая теоретическая часть.

4. Содержательное описание прикладной библиотеки.

5. Файлы библиотеки с программным кодом.

6. Пример работы с библиотекой.

7. - подготовить отчёт по проделанной работе в текстовом формате KDW с переходом через формат JPG в формат PDF.

6.7. Контрольные вопросы

1.Чем отличается проект прикладной библиотеки от обычного проекта Delphi?

2. Какую папку из ресурсов Компаса нужно подключить к Delphi при создании прикладной библиотеки?

3. Какие модули входят в состав проекта библиотеки в Delphi?

4. Какие задачи решает файла проекта библиотеки?

5. Какие процедуры содержатся в файле формы библиотеки?

6. Какие процедуры содержатся в файла программного модуля библиотеки?

7. Какие процедуры и функции используются библиотекой при создании формы?

8. Какие методы создания сложных графических изображений имеются в API Компас?

9.Какие средства Delphi можно использовать для отладки библиотеки?

10. Какие параметры используются библиотекой при создании вида?

6.8. Библиография

1. Богуславский А.А. Си++ и компьютерная графика. М., Компьютер Пресс,2003,352стр.

2.Карпов Б. Delphi:специальный справочник. СПб, Питер, 2001, 688стр.

3.Троицкий Д.И. Разработка 2D-библиотек для Компас. Тула, ТГУ, 2007, 26стр.





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



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