Файл: Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 626
Скачиваний: 3
СОДЕРЖАНИЕ
2.Общие положения (теоретические сведения)
2.1. Принцип рекурсии в правилах грамматики
2.2. Запись правил грамматик с использованием метасимволов
2.3. Запись правил грамматик в графическом виде
3. Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2.Общие положения (теоретические сведения)
2.1. Разработка лексического анализатора
2.2. Разработка синтаксического анализатора
2.3. Пример построения простого синтаксического анализатора
2.4. Анализаторы для сложных рекурсивных грамматик
2. Общие положения (теоретические сведения)
2.5. Логическая структура XML-документа
2.8. Описание структуры XML-документов
2.9. Язык XML Sсhema Definition (XSD)
2.10. Программная обработка XML-документов
2.11. Обработка XML-данных с использованием модели DOM
2.14. Сопоставление объектной иерархии с XML-данными
2.16. Считывание XML-документа в DOM
2.17. Директивы таблицы стилей, встроенные в документ
2.18. Загрузка данных из модуля чтения
2.19. Доступ к атрибутам в модели DOM
2.20. Получение всех атрибутов в виде коллекции
2.21. Получение единичного узла атрибута
2.22. Считывание объявлений сущностей и ссылок на сущности в DOM
2.23. Сохраняемые ссылки на сущности
2.24. Разворачиваемые и не сохраняемые ссылки на сущности
2.25. Создание новых узлов в модели DOM
2.26. Создание новых атрибутов для элементов в модели DOM
2.29. Проверка имен XML-элементов и атрибутов при создании новых узлов
2.30. Создание новых ссылок на сущности
2.32. Копирование существующих узлов
2.33. Копирование существующих узлов из одного документа в другой
2.34. Копирование фрагментов документа
2.35. Удаление узлов, содержимого и значений из XML-документа
2.36. Изменение узлов, содержимого и значений в XML-документе
2.37. Проверка XML-документа в DOM
2.38. Проверка XML-документа в DOM
2.39. Обработка ошибок проверки и предупреждений
2.40. Сохранение и запись документа
2.42. Запись содержимого документа с помощью свойства OuterXml
3.Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
3. Задание на лабораторную работу
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
4. Ход работы (порядок выполнения работы)
2. Общие положения (теоретические сведения)
3.5. Эскизы в документах Деталей
3.6. Взаимодействие с пользователем
3 Задание на работу (рабочее задание)
return {"Scale": re.search(r"\d+:\d+", stamp.Text(6).Str).group(), "Designer": stamp.Text(110).Str}
return {"Scale": 'Неопределенный стиль оформления', "Designer": 'Неопределенный стиль оформления'}
# Просмотр всех ячеек
def parse_stamp(doc7, number_sheet):
stamp = doc7.LayoutSheets.Item(number_sheet).Stamp
for i in range(10000):
if stamp.Text(i).Str:
print('Номер ячейки = %-5d Значение = %s' % (i, stamp.Text(i).Str))
# Подсчёт размеров на чертеже, для каждого вида по отдельности
def count_dimension(doc7, module7):
IKompasDocument2D = doc7._oleobj_.QueryInterface(module7.NamesToIIDMap['IKompasDocument2D'], pythoncom.IID_IDispatch)
doc2D = module7.IKompasDocument2D(IKompasDocument2D)
views = doc2D.ViewsAndLayersManager.Views
count_dim = 0
for i in range(views.Count):
ISymbols2DContainer = views.View(i)._oleobj_.QueryInterface(module7.NamesToIIDMap['ISymbols2DContainer'], pythoncom.IID_IDispatch)
dimensions = module7.ISymbols2DContainer(ISymbols2DContainer)
# Складываем все необходимые размеры
count_dim += dimensions.AngleDimensions.Count + \ dimensions.ArcDimensions.Count + \ dimensions.Bases.Count + \ dimensions.BreakLineDimensions.Count + \ dimensions.BreakRadialDimensions.Count + \ dimensions.DiametralDimensions.Count + \ dimensions.Leaders.Count + \ dimensions.LineDimensions.Count + \ dimensions.RadialDimensions.Count + \ dimensions.RemoteElements.Count + \ dimensions.Roughs.Count + \ dimensions.Tolerances.Count
return count_dim
Рассмотрим основные методы создания 2D геометрии:
Примитив | Метод | Параметры |
точка | ksPoint(x,y,style) | ставит точку с координатами x,y и стилем style. Стили точек приведены в приложении 1 |
отрезок | ksLineSeg(x1,y1,x2,y2,type) | проводит отрезок стилем линии type из точки (x1,y1) в точку (x2,y2) |
прямая | ksLine(x,y,angle) | проводит бесконечную прямую через точку x,y под углом в градусах angle к положительному направлению оси ОХ |
дуга | ksArcBy3Points (x1, y1, x2, y2, x3, y3, type) | строит дугу по трем точкам стилем линии type |
дуга | ksArcByAngle (xc, yc, rad, f1, f2, direction, type) | строит дугу: xc, yc - координаты центра дуги, rad - радиус дуги, f1, f2 - начальный и конечный угол дуги в градусах, direction - направление отрисовки дуги: 1 - против часовой стрелки, -1 - по часовой стрелке, type - стиль линии |
дуга | ksArcByPoint (xc, yc, rad, x1, y1, x2, y2, direction, type) | строит дугу: xc, yc - координаты центра дуги, rad - радиус дуги, x1, y1 - координаты начальной точки дуги, x2, y2 - координаты конечной точки дуги, direction - направление отрисовки дуги: 1 - против часовой стрелки, -1 - по часовой стрелке, type - стиль линии. |
окружность | ksCircle(xc, yc, rad, type) | строит окружность с центром в точке xc,yc, радиусом rad и стилем линии type |
В чертежах часто встречается штриховка. Она делается хитрым образом: сначала дается команда начала штриховки iDocument2D.ksHatchByParam(iHatchParam), затем строятся объекты, образующие ее контур, а затем еще одна команда завершает построение.
Параметры штриховки задаются следующим образом
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(startX-A1, startY, startX-A1, startY-A2, 1)
obj = iDocument2D.ksLineSeg(startX-A1, startY-A2, startX-A1+A4, startY-A2, 1)
obj = iDocument2D.ksLineSeg(startX-A1+A4, startY-A2, startX-A1+A4, startY-A2-A5, 1)
obj = iDocument2D.ksLineSeg(startX-A1+A4, startY-A2-A5, startX-A4, startY-A2-A5, 1)
obj = iDocument2D.ksLineSeg(startX-A4, startY-A2-A5, startX-A4, startY-A2, 1)
obj = iDocument2D.ksLineSeg(startX-A4, startY-A2, startX, startY-A2, 1)
obj = iDocument2D.ksLineSeg(startX, startY-A2, startX, startY, 1)
obj = iDocument2D.ksLineSeg(startX, startY, startX-A1, startY, 1)
iDocument2D.ksEndGroup()
obj = iDocument2D.ksEndObj()
Размеры
Размерный текст в общем случае состоит из следующих элементов:
- текст перед номиналом (±);
- символ перед номиналом ();
- номинал (100);
- отклонение (+0,2 и -0,4);
- единица измерения (мм);
- текст после номинала (2x45o).
При создании размера нужно задать его основные параметры. Например:
iLDimParam = kompas6_api5_module.ksLDimParam(kompas_object.GetParamStruct(kompas6_constants.ko_LDimParam))
iDimDrawing = kompas6_api5_module.ksDimDrawingParam(iLDimParam.GetDPar())
iDimDrawing.Init()
iDimDrawing.ang = 0
iDimDrawing.lenght = 0
iDimDrawing.pl1 = False
iDimDrawing.pl2 = False
iDimDrawing.pt1 = 1
iDimDrawing.pt2 = 1
iDimDrawing.shelfDir = 0
iDimDrawing.textBase = 0
iDimDrawing.textPos = 0
iLDimSource = kompas6_api5_module.ksLDimSourceParam(iLDimParam.GetSPar())
iLDimSource.Init()
iLDimSource.basePoint = 1
iLDimSource.dx = 27.564634923719
iLDimSource.dy = 0
iLDimSource.ps = 1
iLDimSource.x1 = 155.639999571484
iLDimSource.y1 = 247.511500571188
iLDimSource.x2 = 155.639999571484
iLDimSource.y2 = 198.511500571188
iDimText = kompas6_api5_module.ksDimTextParam(iLDimParam.GetTPar())
iDimText.Init(0)
iDimText.bitFlag = 289
iDimText.sign = 0
iDimText.style = 3
iDimText.stringFlag = False
iCharArray = kompas6_api5_module.ksDynamicArray(iDimText.GetTextArr())
obj = iDocument2D.ksLinDimension(iLDimParam)
Для задания текста до и после размера, необходимо добавить
iDimText.SetBitFlagValue(0x4, True)# есть текст До
iDimText.SetBitFlagValue(0x80, True) # есть текст После
Более подробная информация о каждой из функции представлена в справочной документации SDK.
3.2. Организация ввода данных
Чтобы можно было параметрически изменять значения размеров модели (т.е. не строить одну и ту же муфту, а иметь возможность построения целого семейства параметрических конструкций), необходимо обеспечить ввод значений пользователем. Проще всего это сделать при помощи встроенных в сам КОМПАС диалоговых окон.
Пример:
r=0.0 r = iKompasObject.ksReadDouble( 'R=', 100, 0, 200, r )[1] |
Сначала необходимо инициализировать переменную (в данном случае r) любым значением. Зачем? А затем, что все переменные в Python динамические и, чтобы КОМПАСу было куда поместить введенное пользователем значение, по переменную должна быть выделена ячейка памяти.
Далее у объекта iKompasObject (ссылка на который получается командой iKompasObject = KAPI.KompasObject(iKompasObject) в начале программы) имеется ряд свойств, выводящих на экран КОМПАС диалоговые окна ввода данных:
Ввод вещественного числа:
ksReadDouble(подсказка, значение по умолчанию, минимальное значение, максимальное значение, переменная)
Ввод целого числа:
ksReadInt(подсказка, значение по умолчанию, минимальное значение, максимальное значение, переменная)
Ввод текстовой строки:
ksReadString(подсказка, значение по умолчанию, переменная)
Здесь:
Подсказка – текстовая строка, выводимая в окне (скажем, «Введите радиус, мм»);
значение по умолчанию – значение, которое будет сразу подставлено в окно ввода;
минимальное значение – минимально допустимое для ввода значение. Если вводимое число меньше его, будет выдано предупреждение, а ввод запрошен снова;
максимальное значение – максимально допустимое для ввода значение. Если вводимое число больше его, будет выдано предупреждение, а ввод запрошен снова;
переменная – ссылка на ту же переменную, что стоит слева от знака присваивания (так надо!).
Самое главное – не забыть после вызова метода поставить [1]. Дело в том, что КОМПАС возвращает значение в виде массива, из которого нам нужен только первый элемент.
Ниже показано стандартное окно ввода вещественного числа:
3.3. Вывод данных
Для вывода текста пользователю можно воспользоваться функцией ksMessage:
iKompasObject.ksMessage("Start")
В результате выводится окно с текстом:
Таким образом, становится ясно, что сама система Компас-3D даже в базовой поставке обладает всеми возможностями для построения специализированной САПР. И процесс проектирования хоть и трудоемок, но не так уж и сложен.
Еще одним плюсом является то, что изменить скрипт можно элементарно, даже в блокноте, не прибегая больше ни к одной среде разработки.
3. Задание на лабораторную работу
Создать макрос для параметрического построения данной детали в 2D в КОМПАС средствами языка Python
4. Ход работы (порядок выполнения работы)
1) Ознакомится теоретической справкой.
2) Разработать ПО для реализации задания.
3) Оформить отчет.
4) Защитить работу преподавателю.
5. Содержание отчета
1) Титульный лист
2) Задание
3) Чертеж с указанием параметров.
4) Описание процесса подготовки макроса.
5) Скриншоты с демонстрацией работы программы.
6) Выводы по работе
7) Список используемой литературы
8) Приложение – текст макроса.
Лабораторная работа № 5
Разработка программных продуктов для трехмерного моделирования с использованием встроенных языков среды САПР
1. Цель и задачи работы
Научиться реализовавать библиотеки САПР в среде КОМПАС-Макро с использованием языка Python.
Задачами работы являются
-
Изучить задание. -
Освоить работу с КОМПАС-Макро. -
Освоить основы языка Python.
2. Общие положения (теоретические сведения)
Чтобы продемонстрировать работу с библиотекой Компас-МАКРО, напишем скрипт, на вход которого будут подаваться параметры, а на выходе будет строиться 3D-модель в Компас. За моделируемый объект возьмем электромуфту. Построим ее схематичную модель:
Изменяемыми параметрами будут:
-
диаметр вала, на который будет сажаться муфта; -
количество пластин; -
количество отверстий под крепления; -
высота передней и задней частей муфты; -
цвета основы муфты и ее пластин.
Очевидно, что перед нами тело вращения, а значит создать модель соответствующей операцией будет проще всего. Вся задача состоит в том, чтобы описать параметрические эскизы,а затем создать операцию вращения.
Строить будем в таком порядке: сделаем основу муфты, срежем фаски, вырежем отверстия и добавим пластины.
Опишем для начала основную операцию вращения, необходимые переменные и временные с заданными значениями для упрощения описаний:
# coding: cp1251
# Муфта|macro
import Kompas6API5, LDefin2D, LDefin3D
Kompas, doc3d = start3d()
Kompas.Visible = 1
iPart = Kompas6API5.ksPart(doc3d.GetPart(LDefin3D.pNew_Part))
iPart2 = Kompas6API5.ksPart(doc3d.GetPart(LDefin3D.pNew_Part))
d=42 # временные переменные,
front=11 # позже будет обеспечен