понедельник, 26 сентября 2011 г.

Книга по WOODY ч.8


JavaScript - интерфейс описания параметрических контуров деталей
В Woody контуры используются для создания деталей (столешниц, полок и т.п.) с необычными очертаниями. Выбор типа контура и управление параметрами происходит с помощью диалога "Параметрический контур".
Построение контура выполняется JavaScript программой, исполняемой каждый раз, когда изменяется габарит детали. Эта программа имеет доступ к значениям параметров и габарита детали. Правильно написанная программа построения контура должна "вписать" контур в габарит детали. Использование программ для построения контуров позволяет описывать более сложную реакцию контуров на изменение габаритов детали и параметров контура, чем простое масштабирование.
В задачи, решаемые программой построения контура, входит также разбиение контура детали на участки кромкования. Обычно границами участков кромкования служат точки излома контура.
В Woody параметрический контур составляется из последовательности примитивов: отрезков прямых, дуг эллипса и кривых Безье (см. рисунки).
Видно, что первый контур состоит из шести примитивов: пять отрезков и одна кривая Безье. Второй - из четырех участков: три отрезка и одна дуга эллипса. Оба контура имеют по три параметра: А, В, С. Смысл этих параметров - фиксированные размеры, не изменяющиеся при изменении габаритов детали. Параметры служат для управления геометрией контура (внешним видом детали). Например, при увеличении параметра "С" вдвое при неизменном габарите первый контур принимает следующий вид:
Манипулируя параметрами контура можно изменять его до неузнаваемости.
Геометрия контура определяется также размерами габарита, в который он должен быть вписан. При изменении габаритных размеров контур тоже меняется. Следует обратить внимание на то, что внешний вид контура после изменения габаритов сильно зависит от значений параметров. Определенные значения габаритных размеров и параметров и их сочетания могут приводить к вырождению части примитивов контура. Правильно написанная программа построения контура должна обеспечивать такую возможность и сохранять работоспособность при любых входных данных. Например, уменьшим горизонтальный габарит вдвое и оставим неизменными значения параметров. На рисунке можно увидеть результат этого изменения.
Все примитивы второго контура сохранились. А вот в первом контуре кривая Безье теперь отсутствует. Она выродилась, потомучто для нее просто не оказалось места. Программа корректно обработала эту ситуацию.
 
Создание нового контура
 
Каждому контуру, входящему в комплект поставки, соответствует файл с расширением .js хранящийся в каталоге woodyscript\contour\ или woodyscript\contour\users. В этих файлах содержатся программы на языке JavaScript, использующие команды построения контуров. Если Вы хотите получить новые типы контуров необходимо выполнить следующие действия:
  • найти каталог, в котором проинсталлирована Woody;
  • в этом каталоге должен быть подкаталог с именем "woodyscript\contour\users\". В нем следует поместить файл с уникальным именем и расширением ".js" с программой генерации контура на языке JavaScript.
В каждом файле программы постоения параметрического контура есть группа команд инициализации, заключенная между директивами TAB_PARAM_BEGIN и TAB_PARAM_END. Эти команды вместе с директивами дополнительно заключаются между символами комметрария: /* - вначале и */ - вконце. Эти команды не влияют на выполнение программы построения контура (т.к. заблокированы комментариями) и исполняются только при очередном запуске программы Woody или при нажатии клавиши "Обновить список" в диалоге "Параметрический контур" в "Мастере деталей".
В самом начале файла программы (до первого вызова функций инициализации и построения контуров) должна содержаться строка:
#include <Contour.jsh> // Подгрузить константы для параметрических контуров
По данной директиве содержимое файла Contour.jsh включается в файл программы создания контура. В данном файле содержатся объявления переменных, используемых различными функциями и выполняется инициализация ссылки на таблицу параметрических контуров:
var TabCont = Document.GetParamContour();
GetParamContour(); - Это метод документа, который возвращает ссылку на объект автоматизации, обеспечивающий доступ к таблице параметрических контуров.
Рассмотрим методы таблицы контуров, доступные через объект TabCont:
Команды регистрации контуров
AddContourTab(ID, "Название", "Имя файла");
Суть: Добавляет новый контур в таблицу контуров.
Вход:
ID - уникальный номер контура;
Название - название контура, например "эллипс", " IС TM-02.11" и т.п. Пишется в кавычках.
Имя файла - имя файла с расширением .js с правилами описания соответствующего контура. Пишется в кавычках, расширение опускается.
AddParamTab("Название", "Обозначение", Начальное_Значение);
Суть: Добавляет параметр для контура, объявленного последним.
Вход:
Название - название параметра, пишется в кавычках.
Обозначение - обозначение параметра на пояснительном рисунке.
Начальное_Значение - начальное значение добавляемого параметра в метрах.

Пример использования команд регистрации (см файл Contour20.js)
#include <Contour.jsh> // Подгрузить константы для параметрических контуров
/*
TAB_PARAM_BEGIN -- начало блока инициализации
TabCont.AddContourTab(20, "Впадина с перегибом", "Contour20"); ; // Добавляется в таблицу новый контур
TabCont.AddParamTab("Размер A", "A", 0.3); // определяется первый параметр контура
TabCont.AddParamTab("Размер B", "B", 0.2); // определяется второй параметр контура
TabCont.AddParamTab("Размер C", "C", 0.4); // определяется третий параметр контура

TAB_PARAM_END --конец блока инициализации
*/
// Далее тело программы создания контуров

Примитивы построения контура
Для построения параметрических контуров используются следующие примитивы: отрезок прямой, дуга эллипса, кривая Безье. Для построения каждого из этих примитивов необходимо определить характерные данные.
Для построения отрезка прямой необходимо определить две точки:
  1. Начало отрезка М1
  2. Конец отрезка М2.
Для построения дуги эллипса необходимо определить:
  1. центр - т. С,
  2. начальную точку М1
  3. конечную точку М2,
  4. радиус по горизонтали R1.
  5. радиус по вертикали R2.
Для построения кривой Безье необходимо задать четыре точки:
  1. М1 начало первого вектора и начало кривой
  2. М2 конец первого вектора;
  3. М3 начало второго вектора
  4. М4 конец второго вектора и конец кривой.
Прямая, проходящая через точки М1и М2 является касательной к кривой в точке М1. Расстояние между точками М1 и М2 определяет кривизну в точке М1. Аналогично с точками М4 и М3. Подбирая положения точек М2 и М3 мы можем получить кривую заданной формы, соединяющую точки М1 и М4.

Рассмотрим теперь другие методы объекта TabCont. В файле contourlist.js они не используются.
Они предназначены для использования в программах построения контуров.
 
Методы доступа к габаритным размерам и значениям параметров
GetSizeX();
Возвращает: Габаритный размер детали по горизонтали (в метрах).
GetSizeY();
Возвращает: Габаритный размер детали по вертикали (в метрах).
GetParam(Номер_Параметра);
Суть: Предоставляет доступ к значениям параметров
Вход: номер параметра.
Возвращает: значение параметра с номером Номер_Параметра.

Методы обозначения размеров на схеме контура
Когда в диалоге параметрический контур выбирается определенный тип контура, в специальном окне выводится его схематическое изображение. Для большей наглядности можно снабдить это изображение размерными линиями. Для этого предназначены методы SetLineDim и SetRadiusDim. Они должны использоваться в программе создания контура.
1. SetLineDim(X1, Y1, X2, Y2, Номер_Параметра, Ориентация);
Суть: Создать размерную линию с началом в точке (X1, Y1) и концом в точке (X2, Y2).
Вход:
X1, Y1, X2, Y2 - координаты начальной и конечной точек
Номер_Параметра - определяет номер параметра, заданного в блоке инициализации параметров и , соответствующий выводимой размерной линии.
Ориентация - определяет ориентацию выводимой размерной линии. Может принимать следующие значения:
HorLineDim - горизонтальная размерная линия.
VertLineDim - вертикальная размерная линия.
Константы HorLineDim и VertLineDim определены в файле contour.jsh.
2. SetRadiusDim(X1, Y1, X2, Y2, cX, cY, Номер_Параметра, Ориентация);
Суть: Создается размер для обозначения радиуса для дуги с началом в точке с координатами (X1, Y1) и концом в точке (X2, Y2), центр в точке (cX, cY).
Вход:
X1, Y1 - координаты начала дуги
X2, Y2 - координаты конца дуги
cX, cY - координаты центра окружности дуги
Номер_Параметра определяет номер параметра, заданного в блоке инициализации параметров и соответствующий выводимому изображению радиуса.
Ориентация - определяет ориентацию выводимого изображения радиуса. Может принимать следующие значения:
OutRadDim - наружный радиус.
InRadDim - внутренний радиус.
Константы OutRadDim и InRadDim определены в файле contour.jsh.
(Пример описания параметрического контура)
NewContour();
Суть: Создать новый контур.
NewEdge();
Суть: начать новый участок кромкования контура.
Объявляет о начале новой зоны контура. Этот метод следует вызывать после создания нового контура или перед началом описания части контура, соответствующего отдельному участку кромкования.
Опишем методы объекта TabCont для добавления в контур отрезков прямых, дуг, и кривых Безье. Следует обратить внимание на то, что контур должен быть описан против часовой стрелки, то есть в положительном направлении. Если на участке задано менее 2-х точек, то такой участок игнорируется.

Методы создания примитивов
AddPointEdge(X, Y);
Добаляет в контур точку с координатами (X, Y). Для ввода отрезка
AddArcEdge(X1, Y1, X2, Y2, cX, cY, rX, rY, Направление);
Добаляет в контур дугу эллипса из точки с координатами (X1, Y1) в точку с координатами (X2, Y2) с центром в точке (cX, cY), горизонтальным радиусом rX и вертикальным радиусом rY(см. рисунки ниже).
Направление - задает направление вывода дуги эллипса. Может принимать следующие значения:
ArcPlus - положительное направление;
ArcMinus - отрицательное направление;
Константы ArcPlus и ArcMinus описаны в файле contour.jsh.
Пример 1(см. рисунок): AddArcEdge(X1, Y1, X2, Y2, cX, cY, rX, rY, ArcMinus );

Обратите внимание, контур обходится в положительном направлении(против часовой стрелки), а дуга рисуется в отрицательном направлении(с флажком ArcMinus ).
Пример 2(см. рисунок): AddArcEdge(X1, Y1, X2, Y2, cX, cY, rX, rY, ArcPlus );

В этом примере и рисование дуги и обход контура проходит в положительном направлении.
AddBeze(X1, Y1, X2, Y2, X3, Y3, X4, Y4, Густота);
Добаляет в контур кривую Безье с началом в точке (X1, Y1) и концом в точке (X4, Y4). Прямая, проходящая через точки (X1, Y1) и (X2, Y2) является касательной к кривой, кроме того, расстояние между точками (X1, Y1) и (X2, Y2) определяет кривизну в точке (X1, Y1). Аналогично с точками (X3, Y3) и (X4, Y4). Таким образом, подбирая расположение точек (X2, Y2) и (X3, Y3) мы можем получить нужную нам кривую (см. рисунок).
.
Густота - число точек аппроксимации кривой. Чем больше этот параметр, тем выше точность построения контура, но при этом уменьшается скорость при его обработке, особенно при использовании на данных участках фигурных кромок. Обычно значение данного параметра находится в пределах 6-10.

Комментариев нет:

Отправить комментарий