Вопрос 45: Алгоритм модификация областей штриховки, которые задаются точками «затравки», при использовании сеточной параметрической модели.

Вид штриховки в dxf файле

Описание и чертежа в целом, и любого используемого в нем графического примитива (в том числе и штриховой области HATCH) в dxf-формате представляется вложенными текстовыми списками, состоящими из отдельных структурных единиц - групп, выделяемых круглыми скобками. В каждой группе вначале указывается код группы (групповой код), представляющий целое число, а затем описывается соответствующая этому коду информация. В качестве примера приводим фрагмент начала описания примитива “Штриховка” в dxf-формате: ((-1. <Имя объекта: 7ef03cd8>) (0. "HATCH") (330. <Имя объекта: 7е/03Ь38>) (5. "2СВ") (100. "AcDbEntity") (67. 0) (410. "Model") (8 . "О") (440.33554636) (370. 50) (100. "AcDhHatch") (10 0.0 0.0 0.0) (210 0.0 0.0 1.0) (2. "ANSI31") (70.0) (71. 1) (91.3) (92 . 16) (93.1) (72.2) (10 2500.0 1740.0 0.0) (40. 150.0) (50. 0.0) (51.6.28319) (73 . 1) (97. 1) (330. <Имя объекта: 7ef03cb8>) (92 . 16) (93 . 1) (72.2) (10 2250.0 1250.0 0.0) (40 . 300.0) (50.0.0) (51.6.28319) (73 . I) (97. 1) (330. <Имя объекта: 7ef04388>) (92. 1) (93.8) (72.2) (10 2250.0 1250.0 0.0) (40 . 760.0) (50.0.132552) (51.3.00904) (73 . 1) (72.1) (10 1496.671350.44 0.0) (11 1650.0 1350.44 0.0)

Обобщенный алгоритм

Если для штриховки области или одновременно нескольких областей использовались одна или несколько точек затравки и программа сама определяла параметры для каждой замкнутой области, модификация этих областей оказывается существенно сложнее. В этих случаях в разделе примитива HATCH после его общей части каждый контур описывается ломаной линией, для точек которой последовательно указываются их координаты и кривизна кривой в ней. За значениями параметров всех точек ломаной (контура) перечисляются примитивы, пересечения которых образуют ранее описанные точки. Для модификации таких областей необходимо предварительно определить базовые примитивы, порождающие точки пересечения и параметры их точек пересечения после модификации, а затем в примитиве HATCH для всех ломаных (контуров) заменить старые координаты точек пересечения и значения кривизны на новые значения, соответствующие модифицированному изображению. Дополнительно следует изменить старые координаты точек затравки на новые, алгоритм вычисления координат которых должен учитывать смещение контуров в поле чертежа. Только после этого модифицируют каждый контур штриховки. Успешное решение задачи модификации штриховки этого типа предполагает разработку алгоритмов нахождения точек пересечения для всех возможных вариантов сочетания пар графических примитивов, образующих ломаную линию контура (отрезков, окружностей, дуг, эллиптических дуг и сплайнов). В соответствии с рассмотренными особенностями обобщенный алгоритм модификации штриховки включает следующие этапы:

  1. Из ранее сформированного для чертежа списка примитивов HATCH в цикле выбирается первая запись и анализируется ее структура.
  2. В соответствии с групповым кодом 91 выявляется количество контуров, образующих анализируемую область штриховки.
  3. По записи группового кода 98 и значению координат каждой точки (код 10 ) определяется, сколько точек затравки указывалось при первоначаль ном формировании этой штриховки и их координаты.
  4. Если ни одна точка затравки не использовалась, то значение кода 98 равно 1, а значения координат такой точки (код группы координат равен 10 ), записанных в dxf-файле для этой группы, будут тождественно равны нулю. Такое нулевое значение координат соответствует непосредственному заданию примитивов контуров. Иначе, если задавались точки затравки, то значение для группы с кодом 98 определяет количество введенных пользователем точек, и затем для всех этих точек приводятся значения их координат (по коду 10). При выявлении такого варианта задания (при использовании точек затравки) осуществляется переход к п. 6 алгоритма.

(Начало обработки контуров, состоящих из базовых графических примитивов)

  1. В цикле обработки контуров, в соответствии с ранее выявленным их количеством (см. п. 2 ), для каждого контура, входящего в описание (код группы - 91), выполняются следующие действия:
    1. Определяется количество базовых графических примитивов, образующих текущий контур (код этой группы - 93).
    2. В цикле по базовым примитивам текущего контура для каждого графического примитива (код примитива - 72) выявляются его исходные (до модификации) параметры, а затем внутреннее, присвоенное системой, имя этого примитива (код имени - 330). В частности, по коду примитива (72) выявляются следующие параметры:
      • отрезка (значение кода отрезка равно 1) - координаты точки начала (код группы - 10 ) и конца (код группы - 11 );
      • полилинии (код примитива - 0 ) - координаты каждой точки (код группы - 10) и кривизна в ней для последующего сегмента (код группы - 42);
      • дуги и окружности (код примитива - 2 ) - координаты центра (код 10), значения радиуса (код 40), начального (код группы - 50) и конечного (код группы - 51) углов в радианах и направление обхода (код группы - 73). При этом 1 соответствует обходу против, а 0 - по часовой стрелке;
      • эллиптической дуги (код примитива - 3) - координаты центра (код 1 0 ), координаты точки большой полуоси (код 11 ), длина малой полуоси в долях от большой (код 40), значение начального (50) и конечного (51) углов в радианах, направление обхода (код 73) со значением 1 - против, а 0 - по часовой стрелке;
      • сплайна (4) - порядок сплайна (код 94), признак рациональности (код 73), признак периодичности (код 74), количество узлов (код 95), количество управляющих точек (код 96), а также данные узла (код 40) и координаты управляющих точек (код 10 ), которые повторяются в соответствии с количеством узлов.
    3. Используя сеточную параметрическую модель, выявленные старые параметры графических примитивов в описании контура заменяются на новые.
    4. Модифицируется (перерисовывается) область текущего контура в соответствии со скорректированными значениями параметров графических примитивов.
    5. Переход на начало цикла (п. 5) для обработки следующего контура, если обработанный контур не последний в списке.

(Начало обработки контуров с точками затравки)

  1. В цикле для каждого контура по коду группы 93 определяется количество образующих сегментов ломаной.
  2. Последовательно выявляются и сохраняются в отдельном списке или массиве исходные координаты (код группы - 10 ) всех точек ломаной контура и кривизну линии в каждой точке (код группы - 42).
  3. Последовательно выявляются внутренние имена базовых примитивов (код группы - 330), пересечение которых определяет ранее выявленные координаты для каждой точки ломаной.
  4. В цикле по сегментам ломаной последовательно вычисляются новые (модифицированные) координаты точек пересечения и значение кривизны кривой в этой точке. Для этого:
    1. Вызывается процедура нахождения точки пересечения двух графических примитивов, для которой входными параметрами выступают внутренние имена этих примитивов, а выходными - координаты точки пересечения и кривизна кривой в ней.
    2. Процедура расчета точки пересечения на основе переданных ей имен в структуре чертежа выявляет по каждому примитиву его тип и его новые (модифицированные) геометрические параметры.
    3. В соответствии с выявленными типами осуществляется обращение к соответствующей функции поиска координат точки пересечения графических примитивов (двух отрезков, двух дуг, отрезка и дуги, отрезка и окружности и т. д.) с уже известными для них параметрами. Эта же про грамма обеспечивает определение значения кривизны в рассчитанной точке, если оно не равно нулю (если последующий сегмент не отрезок).
    4. В структуре описания HATCH старые значения координат и значение кривизны (если оно отлично от нуля) заменяются на новые.
    5. Если сегмент последний, осуществляется модификация обработанного контура и переход к обработке следующего, т. е. на п. 6 (на начало цикла).
  5. После завершения цикла обработки контуров выполняется процедура определения координат внутренней точки для каждого модифицируемого контура.
  6. В конце работы алгоритма старые координаты внутренних точек (точек затравки) заменяются на вновь вычисленные и модифицируется область штриховки (графического примитива HATCH).

results matching ""

    No results matching ""