Форум пользователей ПО АСКОН

Профессиональные вопросы => Программирование приложений => Тема начата: AndreySt от 21.06.07, 06:49:39

Название: Расчет площади! Help
Отправлено: AndreySt от 21.06.07, 06:49:39
Нужно расчитать площадь некоторой фигуры состоящей, например из 3 основных и 1 штриховой линий.
Для использования ksCalcInertiaProperties необходимо знать указатель на группу(можно было бы использовать ф-цию ksMakeEncloseContours но она возвращает 0) Как можно по другому получить указатель на группу этих отрезков(линий, кому что нравится)(по точке внутри этого контура указанного пользователем) :!:
компас 5.11
Название: Re:Расчет площади! Help
Отправлено: Алекс от 22.06.07, 16:22:36
У меня ksMakeEncloseContours работает без проблем :shu:
выложи код глянуть
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 23.07.07, 05:57:55
Вот исходники:

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;
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 27.07.07, 08:34:19
кто нибудь писал библиотечку для подсчета площади :?: можете показать код :?:
в примерах описан случий только если нужно вычислить МЦХ только 1-й кривой, а если их группа :?:
ПОМОГИТЕ КТО ЧЕМ МОЖЕТ  :%:
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 30.07.07, 10:42:57
Help :!: :!: :!: Что никто ничего не знает :?:  :(((
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 31.07.07, 06:04:50
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)
Название: Re:Расчет площади! Help
Отправлено: vmnick от 02.08.07, 17:03:41
Цитата: AndreySt от 31.07.07, 06:04:50
Или сформулирую по-другому вопрос:
Возможно ли рассчитать площадь фигуры заданой 3 основными и 1 штриховым отрезком :?:
Это вообще возможно средствами предоставляемыми kompasAPI :?: (не используя итератор)

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

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

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

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

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

а что такое неправильная форма наличие дуги и отрезков так отнимаем или додаем площадь сегмента и получаем туже фигуру только с одними отрезками
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 07.08.07, 09:42:44
т.е. получается нужно использовать итератор по элементам что бы получить элементы которые нужно "обробатывать", а это может занять много времени(что не приемлемо :um:)
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 17.08.07, 11:43:50
Решил не открывать новую тему а продолжить здесь:
почему ksMakeEncloseContours (хоть и написано что применяется для штриховки) возвращает 0 при попытке определить контур фигуры В то время как компас штрихует эту же фигуру :?:
Название: Re:Расчет площади! Help
Отправлено: AndreySt от 21.08.07, 08:30:05
а возможно использовать функции компаса(например вызвать стандартную форму для расчета площади) :?: