Расчет площади! Help

Автор AndreySt, 21.06.07, 06:49:39

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

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

AndreySt

21.06.07, 06:49:39 Последнее редактирование: 21.06.07, 08:08:53 от AndreySt
Нужно расчитать площадь некоторой фигуры состоящей, например из 3 основных и 1 штриховой линий.
Для использования ksCalcInertiaProperties необходимо знать указатель на группу(можно было бы использовать ф-цию ksMakeEncloseContours но она возвращает 0) Как можно по другому получить указатель на группу этих отрезков(линий, кому что нравится)(по точке внутри этого контура указанного пользователем) :!:
компас 5.11

Алекс

У меня ksMakeEncloseContours работает без проблем :shu:
выложи код глянуть

AndreySt

Вот исходники:

function TDetailForm.GetSquare: double;
var pObj,g,h: Integer;
    x, y: Double;
    j, typeObj, k: integer;
    rez: integer;
    iKompas: KompasObject;
    iDoc    : ksDocument2D;
    info    : ksRequestInfo;
    iMat    : ksMathematic2D;
    inertia : ksInertiaParam;
    hatch   : ksHatchLineParam;
    Rezzz   : integer;     
    doc     : ksDocument2D;
    sumSquare: double;
begin
  Result := -1;
  iKompas := MainForm.KompasApi;
  info := ksRequestInfo(ikompas.GetParamStruct(ko_RequestInfo));
  iMat := ksMathematic2D(ikompas.GetMathematic2D);
  iDoc := MainForm.GetActiveksDocument2D;
  inertia := ksInertiaParam(iKompas.GetParamStruct(ko_InertiaParam));
  hatch := ksHatchLineParam(ikompas.GetParamStruct(ko_HatchLineParam));
  if iDoc=nil then exit;
  j := 0;h := 0;sumSquare := 0;
  k := iDoc.ksCursor(info, x, y, nil);
  if k = -1 then begin
    if h <> 0 then
      idoc.ksDeleteObj(h);
    idoc.ksColouring(255);
    pObj := idoc.ksMakeEncloseContours(0,x,y);
    h := idoc.ksEndObj;
    g := idoc.ksDuplicateBoundaries(h);
    imat.ksCalcInertiaProperties(g,inertia,ST_MIX_MM);
    if inertia.F > 0 then begin
      sumSquare := sumSquare + RoundTo(inertia.F,-3);
      inc(j);
    end;
    if iKompas.ksYesNo('Записать площадь = ' + FloatToStr(RoundTo(sumSquare/10000,-3)) + '') = 1 then begin
      Result := RoundTo(sumSquare/10000,-3);
    end;
  end;
  if h <> 0 then idoc.ksDeleteObj(h);
end;

AndreySt

кто нибудь писал библиотечку для подсчета площади :?: можете показать код :?:
в примерах описан случий только если нужно вычислить МЦХ только 1-й кривой, а если их группа :?:
ПОМОГИТЕ КТО ЧЕМ МОЖЕТ  :%:

AndreySt

Help :!: :!: :!: Что никто ничего не знает :?:  :(((

AndreySt

31.07.07, 06:04:50 #5 Последнее редактирование: 31.07.07, 06:18:07 от AndreySt
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)

vmnick

Цитата: AndreySt от 31.07.07, 06:04:50
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)

Господа програмисти
площадь многоугольника ограниченного прямими линиями ето простая школьная геометрия и если вам извесни координати вершин то совсем необязательно что придумивать а то я понял что скоро без апи длину линии считать забудем

AndreySt

Цитата: vmnick от 02.08.07, 17:03:41
Цитата: AndreySt от 31.07.07, 06:04:50
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)

Господа програмисти
площадь многоугольника ограниченного прямими линиями ето простая школьная геометрия и если вам извесни координати вершин то совсем необязательно что придумивать а то я понял что скоро без апи длину линии считать забудем

фигура была приведена для примера. На самом деле фигура может быть и какой-то неправильной формы(необязательно многоугольник мало их что ли бывает)

vmnick

Цитата: AndreySt от 03.08.07, 05:15:56
Цитата: vmnick от 02.08.07, 17:03:41
Цитата: AndreySt от 31.07.07, 06:04:50
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)

Господа програмисти
площадь многоугольника ограниченного прямими линиями ето простая школьная геометрия и если вам извесни координати вершин то совсем необязательно что придумивать а то я понял что скоро без апи длину линии считать забудем

фигура была приведена для примера. На самом деле фигура может быть и какой-то неправильной формы(необязательно многоугольник мало их что ли бывает)

а что такое неправильная форма наличие дуги и отрезков так отнимаем или додаем площадь сегмента и получаем туже фигуру только с одними отрезками

AndreySt

т.е. получается нужно использовать итератор по элементам что бы получить элементы которые нужно "обробатывать", а это может занять много времени(что не приемлемо :um:)

AndreySt

Решил не открывать новую тему а продолжить здесь:
почему ksMakeEncloseContours (хоть и написано что применяется для штриховки) возвращает 0 при попытке определить контур фигуры В то время как компас штрихует эту же фигуру :?:

AndreySt

а возможно использовать функции компаса(например вызвать стандартную форму для расчета площади) :?: