• Добро пожаловать на Форум пользователей ПО АСКОН. Пожалуйста, авторизуйтесь.
 

Уважаемые пользователи,

Хотим проинформировать вас о режиме работы регистрации на нашем сайте.

Зарегистрироваться возможно в рабочие дни, с 8:00 до 20:00 (мск).

Если у вас возникнут вопросы или потребуется дополнительная информация, не стесняйтесь обращаться к нашей службе поддержки. Вы можете связаться с нами по указанным контактным данным на нашем сайте.

Благодарим вас за понимание и сотрудничество. Мы ценим ваше терпение и стремимся предоставить вам лучший опыт использования нашего сервиса.

С уважением,
Команда Ascon

Заливка

Автор Аleks, 24.04.04, 11:36:23

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

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

Аleks

Привет!
Не могу найти функцию заливки площади, например, как при стандартном расчете площади.
Подскажите пожалуйста что это за функция.

ViСТоr


Аleks

ViCTor, спасибо!!!

ViСТоr

Еще есть полезная функция: ksMakeEncloseContour которая вернет замкнутую группу объектов по точке по параметрам данных объектов можно построить заливку.

Аleks

да. эта функция в хелпе есть, вместе со штриховкой, удобная вешчь:)

Prog2

Здравствуйте! Подниму тему.

Хочу залить цветом фигуру (например, прямоугольник), чтобы на чертеже она заслоняла собой другие объекты, лежащие по порядку "ниже".

  long gr1, gr2, Macro;
  int x=-50;

  gr1=pDoc->ksNewGroup(0);   // рисуем прямоугольник
   pDoc->ksLineSeg(0, 0, 0, x, 1);
   pDoc->ksLineSeg(0, x, x, x, 1);
   pDoc->ksLineSeg(x, x, x, 0, 1);
   pDoc->ksLineSeg(x, 0, 0, 0, 1);
  pDoc->ksEndGroup();

  gr2=pDoc->ksColouringEx(-1, pDoc->ksMakeEncloseContours(0, x/2, x/2 ));   // создаём заливку внутри контура


Если остановиться на этом, всё отрабатывает: заливка действительно создаётся и может перекрывать другие объекты на чертеже.
НО мне необходимо объеденить заливку и прямоугольник в макроэлемент:


  pDoc->ksMacro(0);
  Macro=pDoc->ksEndObj();
  pDoc->ksAddObjectToMacro(Macro, gr2);
  pDoc->ksAddObjectToMacro(Macro, gr1);


Объединение происходит, но заливка в этом случает получается "прозрачной" и не заслоняет др. объекты. Если вручную рарушить макроэлемент, а затем вручную опять его создать, то заливка опять отрабатывает правильно.  Такой вариант меня не устраивает.

Подскажите, как корректно программно залить фигуру цветом и объединить в макроэлемент?

Prog2

Методом проб пришёл к выводу, что косяк проявляется именно при вызове:


pDoc->ksAddObjectToMacro(Macro, gr2);

//gr2 - группа, содержащая заливку;
//Macro - какой-либо макроэлемент (вообще не важно, что он содержит).


После этого вызова заливка добавлена в макро, но "прозрачна" (словно не активирована???).

Кто-нибудь сталкивался с подобным? Как "активировать" заливку в макро?

prog1

             Doc.ksChangeObjectsOrder(GRMainRect,0,2);
GRMainRect-эта группа опускается ниже всех.
Удачи!

Prog2

Огромное спасибо, prog1!!! Работает, как надо.

Вот рабочий кусок кода:


  long gr1, Macro;
  int x=-50;

  // Создаём группу.
  gr1=pDoc->ksNewGroup(0);
    pDoc->ksLineSeg(0, 0, 0, x, 1); // Рисуем прямоугольник
    pDoc->ksLineSeg(0, x, x, x, 1);
    pDoc->ksLineSeg(x, x, x, 0, 1);
    pDoc->ksLineSeg(x, 0, 0, 0, 1);
      pDoc->ksColouringEx(-1, pDoc->ksMakeEncloseContours(0, x/2, x/2)); // Создаём заливку фоновым цветом внутри контура
  pDoc->ksEndGroup();
  // Т.е. прямоугольник вместе с заливкой оказались в группе gr1

  pDoc->ksLineSeg(-2*x, -2*x, 2*x, 2*x, 1); // Для наглядности рисуем отрезок, пересекающий прямоугольник

  pDoc->ksChangeObjectsOrder(gr1, 0, 1); // Устанавливаем отрисовку группы gr1 поверх всех объектов.

  pDoc->ksMacro(0); // Создаём макроэлемент
  Macro=pDoc->ksEndObj();
  pDoc->ksAddObjectToMacro(Macro, gr1); // Добавляем группу gr1 в макроэлемент.


  // На чертеже видим, что отрезок оказался "рассечён" прямоугольником, что и требовалось!!!.