ksIntersectLinSLinS не работает

Автор Gek, 02.02.06, 14:47:47

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

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

Gek

Проверяю пересечение отрезков. Два из них стопудово пересекаются. Эта функция - ни гугу! Что за?

IronMaxxx

Распиши поподробнее, как именно проверяешь: отрезки строишь или берешь из активного докуента и пр.
+ Благодарностей: 1

Gek

Вот такая строка

if (Math2D.ksIntersectLinSLinS(Lines[j].X1, Lines[j].Y1, Lines[j].X2, Lines[j].Y2,
                                         Lines[m].X1, Lines[m].Y1, Lines[m].X2, Lines[m].Y2, Intersect) = true)
then begin

Линии не построены еще. А разве это требуется? Так вот, имеется плюсик, состоящий из 2-х пересекающихся отрезков.
И эта весчь его не обнаружает.

333

а как Intersect что передается?

333

Долден быть ksDynamicArray типа POINT_ARR

Gek

Intersect - пробовал ksDynamicArray, IDispatch, даже nil - по барабану. Щас попробую вначале сделать построение, чем черт не шутит  :-)))

Taro

Цитата: Gek от 02.02.06, 16:57:23
Вот такая строка

if (Math2D.ksIntersectLinSLinS(Lines[j].X1, Lines[j].Y1, Lines[j].X2, Lines[j].Y2,
                                         Lines[m].X1, Lines[m].Y1, Lines[m].X2, Lines[m].Y2, Intersect) = true)
then begin

Линии не построены еще. А разве это требуется? Так вот, имеется плюсик, состоящий из 2-х пересекающихся отрезков.
И эта весчь его не обнаружает.
Может быть из-зf того, что в сравнении идет (...=true), хотя по идее должно быть (...==true)?  8-)

Gek

Не, камрад, це ж Паскаль  ;) Ты, наверно, с Сями спутал

333

А если попробовать так:
Math2D.ksIntersectLinSLinS(Lines[j].X1, Lines[j].Y1, Lines[j].X2, Lines[j].Y2,
                                         Lines[m].X1, Lines[m].Y1, Lines[m].X2, Lines[m].Y2, Intersect);
count := Intersect.ksGetArrayCount();
if count > 0 then
  .... 

Gek

Попробовал. На этой строчке
Цитата: 333 от 08.02.06, 13:28:15
count := Intersect.ksGetArrayCount();
Компас вылетает с жуткой руганью. Как будто Intersect не проинициализирована  :o

Slaviation

 :idea:
iDynamicArray:=ksDynamicArray(iKompasObject.GetDynamicArray(POINT_ARR));
iMathematic2D:=ksMathematic2D(iKompasObject.GetMathematic2D);
iMathPointParam:=ksMathPointParam(iKompasObject.GetParamStruct(ko_MathPointParam));

iMathematic2D.ksIntersectLinSLinS(x1_1,y1_1,x1_2,y1_2,x2_1,y2_1,x2_2,y2_2,iDynamicArray);
iDynamicArray.ksGetArrayItem(0,iMathPointParam); //так как у отрезков всего одна точка пересечения
x:=iMathPointParam.x;
y:=iMathPointParam.y;


Gek

Все допер! Я его и правда не проинициализировал  :o:
Всем спасибо, все работает  :sun: