Заштріховиваніе двох і більше непересічних областей – КОМПАС в DELPHI

Дуже часто на розрізах зустрічаються наскрізні отвори Через них вся заштриховуєш область розбивається на дві або більше непересічних один з одним області Причому всі ці області мають бути заштриховані одноманітно На малюнку нижче представлено дві одноманітно заштриховані непересічні прямокутні області

Як їх заштрихувати Можна звичайно заштрихувати їх окремо з однаковими параметрами штрихування Так, зовні це виглядатиме як одна штрихування, але насправді їх буде дві Нам же потрібна одна штрихування

Розглянемо, як вирішується це завдання при побудові штрихування першим способом (див розділ 31) Нижче наводиться фрагмент вихідного тексту програми вирішує цю задачу

var

kompas: KompasObject Document2D: ksDocument2D

RectangleParam1, RectangleParam2: ksRectangleParam

…………………………………………………

Begin

…………………………………………………

/ / Будуємо перший прямокутник, який будемо заштриховувати

RectangleParam1:=ksRectangleParam(kompasGetParamStruct(ko_RectangleParam)) RectangleParam1x:=100

RectangleParam1y:=100 RectangleParam1ang:=0 RectangleParam1height:=10 RectangleParam1width:=10 RectangleParam1style:=1 Document2DksRectangle(RectangleParam1, 0)

/ / Будуємо другий прямокутник, який будемо зафарбовувати

RectangleParam2:=ksRectangleParam(kompasGetParamStruct(ko_RectangleParam))

RectangleParam2x:=120 RectangleParam2y:=100 RectangleParam2ang:=0 RectangleParam2height:=10 RectangleParam2width:=10 RectangleParam2style:=1 Document2DksRectangle(RectangleParam2, 0)

/ / Будуємо саму штрихування

Document2DksHatch(15, 45, 1, 0, 101, 101)

Document2DksRectangle(RectangleParam1, 0)

Document2DksRectangle(RectangleParam2, 0) Document2DksEndObj() kompasVisible:=true

end

Тут ми як заштриховуєш області вказуємо два прямокутники

Зверніть увагу, що ми двічі отримуємо інтерфейс параметрів прямокутника ksRectangleParam Побудувати прямокутники можна було і з одним інтерфейсом ksRectangleParam, змінюючи значення його властивостей для кожного прямокутника Прямокутники при цьому будуть правильно побудовані, але от штрихування буде побудована неправильно Тому ми вимушені використовувати два інтерфейсу ksRectangleParam

Перш ніж розглянути рішення поставленої задачі другим способом потрібно спочатку згадати теорію У главі 32 я говорив, що інтерфейс параметрів штрихування ksHatchParam вимагає вказівки ідентифікатора групи геометричних обєктів, що утворюють заштриховуєш область

Там же я говорив, що отримати цей ідентифікатор можна за допомогою

методу ksMakeEncloseContours інтерфейсу ksDocument2D Проблема в тому, що даний метод дозволяє отримати ідентифікатор тільки одного замкнутого контуру А в нашому завданні два контури Тому нам необхідно обєднати ці два контури в один Робиться це за допомогою методу ksAddObjGroup інтерфейсу ksDocument2D Ось прототип цього методу:

ksAddObjGroup(

g: Integer / / Ідентифікатор групи обєктів (контуру)

p: Integer / / Ідентифікатор обєкта додається в групу

): Integer

Даний метод служить для додавання геометричного обєкта до групи обєктів У разі успішного виконання даний метод повертає значення 1, а в разі помилки – значення нуль

Хоча в документації КОМПАС це ніде явно не вказано, але в ролі додається обєкта може бути використана група обєктів У цьому випадку метод ksAddObjGroup приєднує групу обєктів p до групи обєктів g

Нижче наводиться фрагмент вихідного коду програми, яка демонструє рішення задачі другим способом

var

kompas: KompasObject Document2D: ksDocument2D

RectangleParam: ksRectangleParam HatchParam: ksHatchParam

GroupID: integer RectID: integer

………………………

Begin

………………………

/ / Будуємо перший прямокутник, який будемо заштриховувати

RectangleParam:=ksRectangleParam(kompasGetParamStruct(ko_RectangleParam)) RectangleParamx:=100

RectangleParamy:=100 RectangleParamang:=0

RectangleParamheight:=10 RectangleParamwidth:=10 RectangleParamstyle:=1 Document2DksRectangle(RectangleParam, 0)

/ / Отримуємо ідентифікатор контуру, що складається з першого прямокутника

GroupID:=Document2DksMakeEncloseContours(0,101,101)

/ / Будуємо другий прямокутник, який будемо заштриховувати RectangleParamx:=120 RectID:=Document2DksRectangle(RectangleParam, 0)

/ / Додаємо другу прямокутник до контуру першого прямокутника

Document2DksAddObjGroup(GroupID, RectID)

/ / Отримуємо інтерфейс параметрів штрихування HatchParam:=ksHatchParam(kompasGetParamStruct(ko_HatchParam)) HatchParamang := 45

HatchParamboundaries := GroupID

HatchParamcolor :=

Постановка завдання

Дуже часто на розрізах зустрічаються наскрізні отвори. Через них вся заштриховуєш область розбивається на дві або більше непересічних один з одним області. Причому всі ці області мають бути заштриховані одноманітно. На малюнку нижче представлено дві одноманітно заштриховані непересічні прямокутні області.

Як їх заштрихувати? Можна звичайно заштрихувати їх окремо з однаковими параметрами штрихування. Так, зовні це виглядатиме як одна штрихування, але насправді їх буде дві. Нам же потрібна одна штрихування.

Рішення завдання першим способом

Розглянемо, як вирішується це завдання при побудові штрихування першим способом (див. розділ 31). Нижче наводиться фрагмент вихідного тексту програми вирішує цю задачу.

var

kompas: KompasObject; Document2D: ksDocument2D;

RectangleParam1, RectangleParam2: ksRectangleParam;

…………………………………………………

Begin

…………………………………………………

/ / Будуємо перший прямокутник, який будемо заштриховувати

RectangleParam1:=ksRectangleParam(kompas.GetParamStruct(ko_RectangleParam)); RectangleParam1.x:=100;

RectangleParam1.y:=100; RectangleParam1.ang:=0; RectangleParam1.height:=10; RectangleParam1.width:=10; RectangleParam1.style:=1; Document2D.ksRectangle(RectangleParam1, 0);

/ / Будуємо другий прямокутник, який будемо зафарбовувати

RectangleParam2:=ksRectangleParam(kompas.GetParamStruct(ko_RectangleParam));

RectangleParam2.x:=120; RectangleParam2.y:=100; RectangleParam2.ang:=0; RectangleParam2.height:=10; RectangleParam2.width:=10; RectangleParam2.style:=1; Document2D.ksRectangle(RectangleParam2, 0);

/ / Будуємо саму штрихування

Document2D.ksHatch(15, 45, 1, 0, 101, 101);

Document2D.ksRectangle(RectangleParam1, 0);

Document2D.ksRectangle(RectangleParam2, 0); Document2D.ksEndObj(); kompas.Visible:=true;

end;

Тут ми як заштриховуєш області вказуємо два прямокутники.

Зверніть увагу, що ми двічі отримуємо інтерфейс параметрів прямокутника ksRectangleParam. Побудувати прямокутники можна було і з одним інтерфейсом ksRectangleParam, змінюючи значення його властивостей для кожного прямокутника. Прямокутники при цьому будуть правильно побудовані, але от штрихування буде побудована неправильно. Тому ми вимушені використовувати два інтерфейсу ksRectangleParam.

Додавання об’єкта до групи об’єктів

Перш ніж розглянути рішення поставленої задачі другим способом потрібно спочатку згадати теорію. У главі 32 я говорив, що інтерфейс параметрів штрихування ksHatchParam вимагає вказівки ідентифікатора групи геометричних об’єктів, що утворюють заштриховуєш область.

Там же я говорив, що отримати цей ідентифікатор можна за допомогою

методу ksMakeEncloseContours інтерфейсу ksDocument2D. Проблема в тому, що даний метод дозволяє отримати ідентифікатор тільки одного замкнутого контуру. А в нашому завданні два контури. Тому нам необхідно об’єднати ці два контури в один. Робиться це за допомогою методу ksAddObjGroup інтерфейсу ksDocument2D. Ось прототип цього методу:

ksAddObjGroup(

g: Integer; / / Ідентифікатор групи об’єктів (контуру)

p: Integer / / Ідентифікатор об’єкта додається в групу

): Integer;

Даний метод служить для додавання геометричного об’єкта до групи об’єктів. У разі успішного виконання даний метод повертає значення 1, а в разі помилки – значення нуль.

Хоча в документації КОМПАС це ніде явно не вказано, але в ролі додається об’єкта може бути використана група об’єктів. У цьому випадку метод ksAddObjGroup приєднує групу об’єктів p до групи об’єктів g.

Рішення завдання другим способом

Нижче наводиться фрагмент вихідного коду програми, яка демонструє рішення задачі другим способом.

var

kompas: KompasObject; Document2D: ksDocument2D;

RectangleParam: ksRectangleParam; HatchParam: ksHatchParam;

GroupID: integer; RectID: integer;

………………………

Begin

………………………

/ / Будуємо перший прямокутник, який будемо заштриховувати

RectangleParam:=ksRectangleParam(kompas.GetParamStruct(ko_RectangleParam)); RectangleParam.x:=100;

RectangleParam.y:=100; RectangleParam.ang:=0;

RectangleParam.height:=10; RectangleParam.width:=10; RectangleParam.style:=1; Document2D.ksRectangle(RectangleParam, 0);

/ / Отримуємо ідентифікатор контуру, що складається з першого прямокутника

GroupID:=Document2D.ksMakeEncloseContours(0,101,101);

/ / Будуємо другий прямокутник, який будемо заштриховувати RectangleParam.x:=120; RectID:=Document2D.ksRectangle(RectangleParam, 0);

/ / Додаємо другу прямокутник до контуру першого прямокутника

Document2D.ksAddObjGroup(GroupID, RectID);

/ / Отримуємо інтерфейс параметрів штрихування HatchParam:=ksHatchParam(kompas.GetParamStruct(ko_HatchParam)); HatchParam.ang := 45;

HatchParam.boundaries := GroupID;

HatchParam.color := $000000; / / Колір ліній – чорний

HatchParam.sheeting:= 0; HatchParam.step:=1; HatchParam.style:=0; / / Метал HatchParam.width:=0;

HatchParam.x:=101; HatchParam.y:=101;

/ / Будуємо саму штрихування Document2D.ksHatchByParam(HatchParam); kompas.Visible:=true;

end;

Зверніть увагу, що тут ми використовуємо всього один інтерфейс параметрів прямокутника ksRectangleParam.

Якщо у нас кілька складних контурів, то заштрихувати їх слід

так:

1)                             за допомогою методу ksMakeEncloseContours (Див. главу 32) отримати ідентифікатор кожного контуру;

2)                             за допомогою методу ksAddObjGroup об’єднати ці контури в один контур;

3)                             заштрихувати отриманий контур;

Джерело: Норсеев Сергій, «розробка програм під КОМПАС У DELPHI»

/ / Колір ліній – чорний

HatchParamsheeting:= 0 HatchParamstep:=1 HatchParamstyle:=0 / / Метал HatchParamwidth:=0

HatchParamx:=101 HatchParamy:=101

/ / Будуємо саму штрихування Document2DksHatchByParam(HatchParam) kompasVisible:=true

end

Зверніть увагу, що тут ми використовуємо всього один інтерфейс параметрів прямокутника ksRectangleParam

Якщо у нас кілька складних контурів, то заштрихувати їх слід

так:

1)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp за допомогою методу ksMakeEncloseContours (Див главу 32) отримати ідентифікатор кожного контуру

2)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp за допомогою методу ksAddObjGroup обєднати ці контури в один контур

3)&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp заштрихувати отриманий контур

Джерело: Норсеев Сергій, «розробка програм під КОМПАС У DELPHI»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*