Здравствуйте, форумчане, помогите советом, если не трудно. Не могу понять в чём ошибка. создаю группу, получаю объект, которым является отрезок. Необходимо в зависимости от угла отрезка выполнить условие, но оно не выполняется. код следующий:
if xn1<xmax/2 then
begin
Grupp3:=Doc2D.ksNewGroup(1);
Doc2D.ksEndGroup;
Doc2D.ksSelectGroup(Grupp3,3,xn1-0.01,yn1+0.01,xn1+0.01,yn1+0.02);
Iter3:=ksIterator(Kompas.GetIterator);
Iter3.ksCreateIterator(ALL_OBJ,Grupp3);
VObj3:=Iter3.ksMoveIterator('F');
J3:=Doc2D.ksGetObjParam(VObj3,nil,0);
if j3=1 then
begin
pLineSegment:=IUnknown(kompas.TransferReference(VObj3,Doc2D.Reference)) as ILineSegment;
while Doc2D.ksExistObj( vobj3 ) <> 0 do
begin
pLineSegment.Length:=pLineSegment.Length+20;
if pLineSegment.Angle = 45 then // не выполняет условие при любом угле
begin
pLineSegment.X1:=pLineSegment.X1-7.0710678;
pLineSegment.Y1:=pLineSegment.Y1-7.0710678;
end;
pLineSegment.Update;
VObj3:=Iter3.ksMoveIterator('N')
end;
end;
end;
отрезок получает, длину меняет, а вот координаты точки начала отрезка нет. Если выношу эти операторы из условия
pLineSegment.X1:=pLineSegment.X1-7.0710678;
pLineSegment.Y1:=pLineSegment.Y1-7.0710678;
всё работает отлично, но беда в том, что при разном угле координаты нужно смещать на разную величину. пробовал получать угол в переменную, угол получает, но условие не выполняет, даже если оно истинно. если пишу условие исключающее угол 45 градусов if (pLineSegment.Angle <> 90) or (pLineSegment.Angle <> 135) then, то выполняет условие при любом угле. может я как то неверно оперирую с этим самым свойством?
Цитироватьif pLineSegment.Angle = 45 then // не выполняет условие при любом угле
Условие изначально некорректно, для 32-разрядной платформы, через раз работать будет, а для 64-разрядной 99,99999%, что нет, т.к. число скорее всего будет не 45, а 45,000000000000001 или 44,999999999999999999999.
Нужно сравнивать разницу с допускаемой погрешностью.
if Abs(pLineSegment.Angle-45)<Epsilon then
Это уже показывалось.
http://forum.ascon.ru/index.php/topic,28650.msg217237.html#msg217237 (http://forum.ascon.ru/index.php/topic,28650.msg217237.html#msg217237)
Благодарю, прошлый раз абсолютно не придал этому значение...