![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
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; Прочитано: 365 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!