проблема с выполнением условия if pLineSegment.Angle = 45 then

Автор HellFox, 24.03.16, 10:10:42

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

HellFox

Здравствуйте, форумчане, помогите советом, если не трудно. Не могу понять в чём ошибка. создаю группу, получаю объект, которым является отрезок. Необходимо в зависимости от угла отрезка выполнить условие, но оно не выполняется. код следующий:
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
+ Благодарностей: 1

HellFox

Благодарю, прошлый раз абсолютно не придал этому значение...