Читайте также:
|
|
Если дуга не имеет точек пересечения с линиями границы области, но одна ее точка находится внутри области, то дуга расположена внутри области. Такую дугу следует записать в файл.
Дуга NK пересекается с линиями границы области. В этом случае следует в любой последовательности определить точки S1, S2, S3, S4, S5 и записать в файл с сортировкой строк по возрастанию LD, где LD - длина дуги от начальной точки N до точки пересечения S.
Procedure Box_Dug;{оператор записи дуги в текущий файл}
var P, Pt, Ps:byte;
begin
Ps:=0; {счетчик записей точек пересечения}
Repeat
Читаем файл линий границы выделенной области с 1-ой строки:
SledLine(g, 1, Nag, Xg1, Yg1, Xg2, Yg2, XCg, YCg),
TekUgol(Xg1, Yg1, Xg2, Yg2,Ug);
Определяем точку пересечения дуги чертежа (XCm,YCm,Xm1,Ym1,Xm2,Ym2) с линией области:
OtrDug(Xg1,Yg1,Ug,XCm,YCm,R,XP1,YP1,XP2,YP2,Pt);
Проверка на принадлежность точки пересечения (XP1,YP1) отрезку линии выделенной области:
if Pt=1 then PikOtr(XP1,YP1,Xg1,Yg1,Xg2,Yg2,P);
Проверка на принадлежность точки пересечения (XP1,YP1) дуге:
if P=1 then
. PikDug(XP1,YP1,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P);
if P=1 then begin
Ps:=Ps+1; {наличие точки пересечения}
Xs:=XP1; Ys:=YP1; {координаты точки пересечения}
Определяем длину дуги чертежа от начала до точки пересечения S:
DlinaD(XСm,YСm,Xm1,Ym1,Xs,Ys,nam,LD);
if LD>0 then
Запись в текущий файл с сортировкой строк по возрастанию LD:
StrokBox(e, Ps, LD>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);
end;
Проверка на принадлежность 2-ой точки пересечения (XP2,YP2) отрезку линии выделенной области:
if Pt=1 then PikOtr(XP2,YP2,Xg1,Yg1,Xg2,Yg2,P);
Проверка на принадлежность точки пересечения (XP2,YP2) дуге:
if P=1 then
. PikDug(XP2,YP2,XCm,YCm,Xm1,Ym1,Xm2,Ym2,Nam,P);
if P=1 then begin
Ps:=Ps+1; {наличие точки пересечения}
Xs:=XP2; Ys:=YP2; {координаты точки пересечения}
Определяем длину дуги чертежа от начала до точки пересечения S:
DlinaD(XCm,YCm,Xm1,Ym1,Xs,Ys,nam,LD);
if LD>0 then
Запись в текущий файл с сортировкой строк по возрастанию LD:
StrokBox(e, Ps, LD>, Xg1, Yg1, Xg2, Yg2, Xs, Ys);
end;
Until E=Nkg; {номер последней строки в файле}
if Ps=0 then begin
Проверка на принадлежность начальной точки дуги (Xm1,Ym1) выделенной области
Tch_Obl(Xm1,Ym1,X1,Y1,X2,Y2,P);
if P=1 then
дуга расположена внутри области
RisLineBox(o, 2, Nam, Xm1, Ym1, Xm2, Ym2, XCm, YCm);
end;
Если есть точки пересечения, то необходимо выделить те участки дуги, которые расположены внутри области (Procedure FiltrDug):
if Ps>0 then FiltrDug;
end;
Дата добавления: 2015-08-09; просмотров: 67 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Определение отрезков прямых, расположенных в области | | | Произвольный контур |