Файл: Методические указания по выполнению лабораторных работ по дисциплине (модулю) Лингвистическое и программное обеспечение автоматизированных систем.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 569

Скачиваний: 3

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

СОДЕРЖАНИЕ

1.Цель и задачи работы

2.Общие положения (теоретические сведения)

2.1. Принцип рекурсии в правилах грамматики

2.2. Запись правил грамматик с использованием метасимволов

2.3. Запись правил грамматик в графическом виде

3. Задание на лабораторную работу

4. Ход работы (порядок выполнения работы)

5. Содержание отчета

1.Цель и задачи работы

2.Общие положения (теоретические сведения)

2.1. Разработка лексического анализатора

2.2. Разработка синтаксического анализатора

2.3. Пример построения простого синтаксического анализатора

2.4. Анализаторы для сложных рекурсивных грамматик

5. Содержание отчета

1. Цель и задачи работы

2. Общие положения (теоретические сведения)

2.5. Логическая структура XML-документа

2.8. Описание структуры XML-документов

2.9. Язык XML Sсhema Definition (XSD)

2.10. Программная обработка XML-документов

2.11. Обработка XML-данных с использованием модели DOM

2.12. Входные данные

2.14. Сопоставление объектной иерархии с XML-данными

2.15. Создание 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.27. Атрибуты по умолчанию

2.28. Дочерние узлы атрибута

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.41. Запись XmlDeclaration

2.42. Запись содержимого документа с помощью свойства OuterXml

3.Задание на лабораторную работу

4. Ход работы (порядок выполнения работы)

5. Содержание отчета

1. Цель и задачи работы

2. Общие положения (теоретические сведения)

3.1. Запись макроса

3.2. Организация ввода данных

3.3. Вывод данных

3. Задание на лабораторную работу

4. Ход работы (порядок выполнения работы)

5. Содержание отчета

1. Цель и задачи работы

2. Общие положения (теоретические сведения)

Организация ввода данных

Вывод данных

Заключение

3. Задание на работу

4. Ход работы (порядок выполнения работы)

5. Содержание отчета

1. Цель и задачи работы

2. Общие положения (теоретические сведения)

3.4. Эскизы

3.5. Эскизы в документах Деталей

3.6. Взаимодействие с пользователем

3.7. Выбор файла

3 Задание на работу (рабочее задание)

4. Ход работы (порядок выполнения работы)

5. Содержание отчета



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.

Задачами работы являются

  1. Изучить задание.

  2. Освоить работу с КОМПАС-Макро.

  3. Освоить основы языка 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 # позже будет обеспечен