сладкая и гладкая. Лабораторная работа 4 Разработка программных продуктов для двухмерного моделирования с использованием встроенных языков среды сапр
Скачать 169.8 Kb.
|
МИНОБРНАУКИ РОССИИ Федеральное государственное бюджетное образовательное учреждение высшего образования «Тульский государственный университет» Кафедра вычислительной техники Лингвистическое и программное обеспечение автоматизированных систем ЛАБОРАТОРНАЯ РАБОТА №4 Разработка программных продуктов для двухмерного моделирования с использованием встроенных языков среды САПР Выполнил: студент группы 220292 Рогожин А.Ю.____________ Проверил: доц., к.т.н. кафедры ВТ Пестин М.С____________ Тула 2023 Целью работы является реализация макроса САПР в среде КОМПАС-Макро с использованием языка Python для двухмерного проектирования. Задачами работы являются: Изучить задание; Освоить работу с КОМПАС-Макро; Освоить основы языка Python. 2. Задание на работу Вариант №4 Создать макрос для параметрического построения данной детали (рисунок 1) в 2D в КОМПАС средствами языка Python. Рисунок 1 – Задание 3. Ход работы Возможно два способа создания макросов: вручную на языке Python или путем записи действий пользователя и затем редактирования некоторых параметров макроса. Макрос может не только выполнять построения, но и анализировать уже существующие чертежи. Для того чтобы создать заданный объект необходимо создать текстовый документ и подключить к нему python, а также другие библиотеки (листинг 1). Листинг 1 – Подключение # Подключим python import pythoncom from win32com.client import Dispatch, gencache import LDefin2D import MiscellaneousHelpers as MH # Подключим константы API Компас kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants # Подключим описание интерфейсов API5 kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0) kompas_object = kompas6_api5_module.KompasObject(Dispatch("Kompas.Application.5")._oleobj_.QueryInterface(kompas6_api5_module.KompasObject.CLSID, pythoncom.IID_IDispatch)) MH.iKompasObject = kompas_object # Подключим описание интерфейсов API7 kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}",0,1,0)application=kompas_api7_module.IApplication(Dispatch("Kompas.Application.7")._oleobj_.QueryInterface(kompas_api7_module.IApplication.CLSID, pythoncom.IID_IDispatch)) MH.iApplication = application Далее выполняется подключение активного документа (листинг 2). Листинг 2 – Подключение документа Documents = application.Documents # Получим активный документ kompas_document = application.ActiveDocument kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document) iDocument2D = kompas_object.ActiveDocument2D() Затем прописываются координаты линий чертежа, для построения заданного объекта (листинг 3). Листинг 3 – Координаты obj = iDocument2D.ksLineSeg(172.04632660962, 253.49488340422, 152.04632660962, 253.49488340422, 1) obj = iDocument2D.ksLineSeg(152.04632660962, 253.49488340422, 120.850925429149, 237.625197043441, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 237.625197043441, 120.850925429149, 217.625197043441, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 217.625197043441, 130.850925429149, 217.625197043441, 1) obj = iDocument2D.ksLineSeg(130.850925429149, 217.625197043441, 130.850925429149, 207.625197043441, 1) obj = iDocument2D.ksLineSeg(130.850925429149, 207.625197043441, 120.850925429149, 207.625197043441, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 207.625197043441, 120.850925429149, 187.625197043441, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 187.625197043441, 152.663492088135, 173.032027320328, 1) obj = iDocument2D.ksLineSeg(152.663492088135, 173.032027320328, 172.04632660962, 173.032027320328, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 173.032027320328, 172.04632660962, 253.49488340422, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 232.591342732517, 136.757208758642, 232.591342732517, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 230.372197400241, 137.04632660962, 230.372197400241, 1) obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 137.04632660962, 230.372197400241, 1) obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 136.757208758642, 227.591342732517, 1) obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 172.04632660962, 227.591342732517, 1) obj = iDocument2D.ksLineSeg(107.539369151393, 212.625197043441, 187.539369151393, 212.625197043441, 8) obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 136.757208758642, 212.625197043441, 1) obj = iDocument2D.ksLineSeg(152.663492088135, 173.032027320328, 152.663492088135, 212.625197043441, 1) obj = iDocument2D.ksLineSeg(152.663492088135, 212.625197043441, 136.757208758642, 212.625197043441, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 248.932321997461, 162.04632660962, 248.932321997461, 1) obj = iDocument2D.ksLineSeg(162.04632660962, 248.932321997461, 162.04632660962, 245.560040223831, 1) obj = iDocument2D.ksLineSeg(162.04632660962, 245.560040223831, 172.04632660962, 245.560040223831, 1) Далее задаётся штриховка. Сначала дается команда начала штриховки iHatchParam, затем строятся объекты, образующие ее контур, а затем еще одна команда завершает построение. Параметры штриховки задаются следующим образом (листинг 4). Листинг 4 – Задание штриховки iHatchParam = kompas6_api5_module.ksHatchParam(kompas_object.GetParamStruct(kompas6_constants.ko_HatchParam)) iHatchParam.Init() iHatchParam.ang = 45 iHatchParam.color = -16777216 iHatchParam.sheeting = 1 iHatchParam.step = 3 iHatchParam.width = 0 iHatchParam.x = 0 iHatchParam.y = 0 iHatchParam.style = 0 iHatchParam.boundaries = iDocument2D.ksNewGroup(1) iDocument2D.ksContour(1) iDocument2D.ksNewGroup(1) obj = iDocument2D.ksLineSeg(152.04632660962, 253.49488340422, 120.850925429149, 237.625197043441, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 237.625197043441, 120.850925429149, 232.591342732517, 1) obj = iDocument2D.ksLineSeg(120.850925429149, 232.591342732517, 136.757208758642, 232.591342732517, 1) obj = iDocument2D.ksLineSeg(136.757208758642, 232.591342732517, 136.757208758642, 227.591342732517, 1) obj = iDocument2D.ksLineSeg(136.757208758642, 227.591342732517, 172.04632660962, 227.591342732517, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 227.591342732517, 172.046326609619, 245.560040223831, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 245.560040223831, 162.04632660962, 245.560040223831, 1) obj = iDocument2D.ksLineSeg(162.04632660962, 245.560040223831, 162.04632660962, 248.932321997461, 1) obj = iDocument2D.ksLineSeg(162.04632660962, 248.932321997461, 172.04632660962, 248.932321997461, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 248.932321997461, 172.04632660962, 253.49488340422, 1) obj = iDocument2D.ksLineSeg(172.04632660962, 253.49488340422, 152.04632660962, 253.49488340422, 1) iDocument2D.ksEndGroup() obj = iDocument2D.ksEndObj() После чего сохраняем данный документ в формате cdm, после этого макрос будет готов к использованию в среде разработки КОМПАС 3d. Для того чтобы запустить и проверить работоспособность макроса необходимо в менеджере библиотек выбрать папку прочие и перейти в КОМПАС-макро. Далее следует открыть макросы путем нажатия на соответствующую кнопку (рисунок 2). Рисунок 2 – Макросы Далее необходимо нажать выполнить, после чего макрос мгновенно начертит заданный ранее чертёж (рисунок 3). , Рисунок 3 - Результат Чтобы можно было параметрически изменять значения размеров модели (т.е. не строить одну и ту же муфту, а иметь возможность построения целого семейства параметрических конструкций), необходимо обеспечить ввод значений пользователем. Проще всего это сделать при помощи встроенных в сам КОМПАС диалоговых окон (листинг 4). Сначала необходимо инициализировать переменную (в данном случае r) любым значением. Далее у объекта iKompasObject (ссылка на который получается командой iKompasObject = KAPI.KompasObject(iKompasObject) в начале программы) имеется ряд свойств, выводящих на экран КОМПАС диалоговые окна ввода данных (рисунок 4). Листинг 4 – Задание диалоговых окон r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) 4. Вывод В данной лабораторной работе были получены знания по работе с КОМПАС-Макро, а также был написан собственный макрос с возможностью ввода параметров для создания 2D объектов. ПРИЛОЖЕНИЕ # -*- coding: cp1251 -*- #|11 import Kompas10API5 as KAPI import Kompas10API7 as KAPI7 import pythoncom from win32com.client import Dispatch import LDefin2D import LDefin3D import ksConstants as CONST2D7 import ksConstants3D as CONST3D7 import MiscellaneousHelpers as MH iKompasObject = Dispatch('KOMPAS.Application.5') iKompasObject = KAPI.KompasObject(iKompasObject) MH.iKompasObject = iKompasObject iApplication = Dispatch('KOMPAS.Application.7') iApplication = KAPI7.IApplication(iApplication) MH.iApplication = iApplication iDocument2D = iKompasObject.ActiveDocument2D() iDocument = iApplication.ActiveDocument iKompasDocument2D = KAPI7.IKompasDocument2D(iDocument) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r )[1] r1=0.0 r1 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r1 )[1] r3=0.0 r3 = iKompasObject.ksReadDouble( 'R=', 100, 0, 300, r3 )[1] r4=0.0 r4 = iKompasObject.ksReadDouble( 'R1=', 100, 0, 300, r4 )[1] iDocument2D.ksLineSeg(r,r1,r3,r4,1) iHatchParam = KAPI.ksHatchParam(iKompasObject.GetParamStruct(LDefin2D.ko_HatchParam)) iHatchParam.Init() iHatchParam.ang = 45.0 iHatchParam.boundaries = 298574696 iHatchParam.color = -16777216 iHatchParam.sheeting = 1 iHatchParam.step = 3.0 iHatchParam.style = 0 iHatchParam.width = 0.0 iHatchParam.x = 0.0 iHatchParam.y = 0.0 iHatchParam.boundaries = iDocument2D.ksNewGroup(1) iDocument2D.ksContour(2) iDocument2D.ksLineSeg(85.0, 206.0, 136.0, 206.0, 1) iDocument2D.ksLineSeg(136.0, 206.0, 136.0, 198.0, 1) iDocument2D.ksLineSeg(136.0, 198.0, 179.0, 198.0, 1) iDocument2D.ksLineSeg(179.0, 198.0, 179.0, 247.0, 1) iDocument2D.ksLineSeg(179.0, 247.0, 164.0, 247.0, 1) iDocument2D.ksLineSeg(164.0, 247.0, 164.0, 255.0, 1) iDocument2D.ksLineSeg(164.0, 255.0, 179.0, 255.0, 1) iDocument2D.ksLineSeg(179.0, 255.0, 179.0, 266.0, 1) iDocument2D.ksLineSeg(179.0, 266.0, 149.0, 266.0, 1) iDocument2D.ksLineSeg(149.0, 266.0, 85.0, 214.0, 1) iDocument2D.ksLineSeg(85.0, 214.0, 85.0, 206.0, 1) iDocument2D.ksEndObj() iDocument2D.ksEndGroup() iDocument2D.ksHatchByParam(iHatchParam) |