Создание точки и линий

Материал из K3-Macro
(перенаправлено с «Создание полилинии»)
Макро | Создание геометрических объектов | Точки и линии | Примитивы | Кинематические операции | Поверхности | Булевы операции | Булевы над полилиниями и плоскими областями | Сечения объектов | Определение точек пересечения | Проверка на самопересечение | Эквидистантная поверхность | Контур по границе

Создание точки[править | править код]

point <Point>

<Point>  - создаваемая точка.

Создание отрезка[править | править код]

Данная команда имеет несколько сценариев запроса параметров, которые представлены ниже.

line <Point1>, [start] <Point2>,..., <PointN> [close] done

<Point1> — начальная точка первого отрезка.
<Point2> — конечная точка первого отрезка.
<PointN> — конечная точка N-1 отрезка.

Команда строит отрезки прямых через точки <Point1>, <Point2>,..., <PointN>. Ключ close замыкает набор отрезков, соединяя конец предыдущего с началом первого.

Ключ start указывает на то, что новый отрезок не будет являться продолжением предыдущего набора отрезков, а будет начинаться с точки, указанной после ключа.


line continue [select ^x,y,z<Length>, [start] <Point2>, ..., <PointN> [close] done

Команда строит отрезок, являющийся «продолжением» уже созданного предыдущего объекта типа «Отрезок» или «Дуга». Таким образом, задаётся начало отрезка и его направление (вдоль созданного отрезка или по касательной к дуге). Параметр <Length> задаёт длину отрезка. Ключ указывает, какой объект нужно «продолжать». Если он опущен, «продолжается» последний созданный объект типа «Отрезок» или «Дуга».


line <Point1>, tangent <Object>, ..., <PointN> [close] done

Команда строит отрезок, касательный к объекту <Object> типа «Окружность» или «Дуга»

Создание дуги[править | править код]

arc <Parameter1> <Parameter2> ... <ParameterN>

Команда строит дугу окружности в соответствии с введенными параметрами.

По умолчанию подразумевается, что в начале запрашивается точка начала дуги, затем — точка конца, а следом - точка на дуге. Положительным направлением дуги считается направление против часовой стрелки. Следует отметить, что вводимая дуга может зависеть от текущего видового окна, если только введённые параметры не определяют ее жестко. Например, дуга, касающаяся трех элементов, не зависит от видового окна, а дуга, определяемая точкой центра, радиусом и углом раствора - зависит.

Ниже представлен список ключевых слов, которые можно использовать в качестве параметров команды arc:

  • continue — дуга, продолжающая линейный геометрический элемент,
  • select — смена (выбор) продолжаемого элемента,
  • tangent — дуга, касательная к линейному геометрическому элементу,
  • center — центр дуги,
  • internal — внутренняя точка дуги,
  • radius — радиус дуги,
  • direction — направление касательной дуги,
  • negative — негатив (дополнение к дуге – отрицательное направление),
  • positive — позитив (отмена негатива – положительное направление),
  • angle — угол раствора дуги,
  • length — длина хорды.
  • circle — окружность,
  • arc — дуга
  • concentric — концентрически (с общим центром). При указании этого ключа требуется указать уже построенную дугу или окружность, с которой должен быть общий центр.

Используя эти ключевые слова, Вы можете изменить как способы ввода этих точек, так и порядок их ввода. Ниже приведена таблица, показывающая использование ключевых слов в зависимости от их положения в списке параметров.

Параметры команды arc
<Parameter1>
<Parameter2>
<Parameter3>
<Parameter4>
<Parameter5>
<Point>
<Point>
<Point>
 
 
<Point>
<Point>
tangent
^x,y,z
 
<Point>
<Point>
center
<Point>
 
<Point>
<Point>
radius
<radius>
 
<Point>
<Point>
direction
<Point>
 
<Point>
<Point>
negative
<Point>
 
<Point>
<Point>
poSitivE
<Point>
 
<Point>
<Point>
angle
<Angle>
 
<Point>
tangent
^x,y,z
<Point>
 
<Point>
center
<Point>
<Point>
 
<Point>
center
<Point>
angle
<Angle>
<Point>
center
<Point>
length
<Length>
<Point>
internal
<Point>
<Point>
 
<Point>
internal
<Point>
tangent
^x,y,z
<Point>
internal
tangent
^x,y,z
<Point>
continue
<Point>
continue
tangent
^x,y,z
continue
negative
<Point>
 
 
continue
negative
tangent
^x,y,z
 
continue
select
^x,y,z
 
 
tangent
^x,y,z
<Parameter2>
 
 
center
<Point>
<Parameter2>
 
 
center
<Point>
<Point>
angle
<Angle>
center
<Point>
<Point>
length
<Length>
circle
<Parameter2>
 
 
 
arc
<Parameter2>
 
 
 
concentric
<Object>
 
 
 

Создание окружности[править | править код]

Команда circle имеет несколько сценариев запроса параметров, которые представлены ниже.

circle <PointC> [normal <PointN>] <Radius>

circle <PointC> [normal <PointN>] point <Point>

<PointC> — точка центра окружности,
<PointN> — координаты вектора нормали к плоскости конструирования
<Radius> — радиус окружности.
<Point> — точка, через которую проходит окружность

Команда строит окружность с центром в точке <PointC> и радиусом <Radius> или строит окружность с центром в точке <PointC> и проходящую через точку <Point>. Результат может зависеть от текущего видового окна.

Если не используется ключ normal, плоскость окружности лежит в плоскости конструирования, которая для ортогональных видов параллельна плоскости экрана, а для аксонометрических видов параллельна плоскости XOY.

Ключ normal, позволяет задать координаты вектора нормали, которая определяет плоскость построения окружности. В этом случае, при использовании ключе point и точки <Point>, окружность будет проходить через проекцию точки <Point> на плосколсть, заданную нормалью.


circle <PointC> [normal <PointN>] diameter <Diameter>

Действие команды аналогично описанной ранее, только вместо радиуса окружности указывается её диаметр <Diameter>. Чтобы перейти к предыдущему формату команды, необходимо явно указать ключ задания радиуса:


circle <PointC> [normal <PointN>] radius <Radius>

circle 3Points <Point1> <Point2> <Point3>

Окружность, проходящая через три точки <Point1> <Point2> <Point3>. Плоскость окружности совпадает с плоскостью, проходящей через три заданные точки <Point1> <Point2> <Point3>.

Создание сплайна[править | править код]

Сплайном называется гладкая кривая, аппроксимирующая набор точек. Сплайн может быть замкнутым и разомкнутым, может быть плоским и пространственным, аппроксимационным и интерполяционным.

Команда spline имеет несколько режимов работы, которые представлены ниже.


spline [{onspline | control}] <Point1> <Point2> <Ponut3> [start] [connect <Object>] <Point4> ... <PointN> [close] done

Команда рисует сплайн через точки '<Point1> <Point2> <Ponut3> <Point4> ... <PointN>. Ключ start указывает, что следующая точка будет присоединена к противоположному концу сплайна. Ключ close замыкает сплайн. Ключ connect <Object> продолжает сплайн так, что очередная точка сплайна расположена таким образом, что присоединенный линейный объект <Object> является касательным продолжением сплайна.

Ключ onspline указывает, что сплайн будет проходить через указанные точки. Ключ control указывает на то, что точки <Point1> <Point2> <Point3> <Point4> ... <PointN>управляющие точки сплайна.


spline bypath <Object>

Команда строит сплайн по контур <Object>.


spline edit <Object>

Команда редактирует сплайн <Object>. Подробней о редактировании сплайна — см. здесь

Создание полилинии[править | править код]

pline [<keys>] <Points> done

Команда pline строит полилинию по точкам <Points> в соответствии с ключами <keys>.

Полилиния представляет собой плоскую фигуру, состоящую из дуг окружностей и/или отрезков. Каждый следующий элемент полилинии является продолжением предыдущего до тех пор, пока не задан ключ done. После этого полилиния считается построенной.

Полилиния также может быть построена по контуру.

По умолчанию, плоскость, в которой лежит полилиния определяется плоскостью текущего видового окна. Если необходимо задать плоскость явно, используется ключ normal. Данный ключ может использоваться только в самом начале построения полилинии, когда не задана еще не одна точка.

При задании точек используются, как обычно, три координаты. Однако, реальные координаты точек полилинии получаются путем проецирования введенных точек на заданную плоскость.

Возможное значения ключей <keys> представлены ниже.


pline [mapsection <SecNumb>] [pdomain] [normal { <PointN> | 2points <PointN1> <PointN2> } [origin <PointB> [ox { <PointVB> | 2points <PointVB1> <PointVB2> }]]] {line | arc [direction | internal <PointA>] <Point> [close]

Команда строит полилинию в плоскости текущего видового окна, либо в плоскости, заданной вектором <PointN> (или вектором, направленным из точки <PointN1> в точку <PointN2>, если задан ключ 2points), очередным сегментом которой будет отрезок (line) или дуга (arc), проходящие через точку <Point>. В случае дуги, необязательные ключи задают координаты внутренней точки дуги (internal) или направление дуги (direction) <PointA>. Необязательный параметр mapsection задает номер секции <SecNumb> полилинии для раскрашивателя.

Необязательный ключ origin позволяет задать положение начала координат ЛСК полилинии в точке <PointB> и, если задан ключ ox, направление оси OX ЛСК полилинии. Направление оси OX полилинии может быть задано вектором <PointVB> или вектором, направленным из точки <PointVB1> в точку <PointVB2> (если задан ключ 2points).

Необязательный ключ close используется для того, чтобы замкнуть полилинию. То есть для того, чтобы совместить начальную и конечную точку. Если полилиния уже замкнутая, то есть начальная точка уже совпадает с конечной, то использовать ключ нельзя.

Ключ normal позволяет задать нормаль к плоскости, в которой нужно построить полилинию. Без этого ключа использовать команду pline нельзя.

Если задан необязательный ключ pdomain, то команда строит плоскую область (см ниже).


pline [mapsection <SecNumb>] path <Object>

Команда создает полилинию по плоскому контуру <Object>. Необязательный параметр mapsection задает номер текстурной секции <SecNumb> полилинии для раскрашивателя.


pline [mapsection <SecNumb>] pdomain [normal { <PointN> | 2points <PointN1> <PointN2> } [origin <PointB> [ox { <PointVB> | 2points <PointVB1> <PointVB2> }]]] {line | arc [direction | internal <PointA>] <Point> [close]

Команда строит плоскую область (связный участок плоскости, возможно, имеющий вырезы) в плоскости текущего видового окна, либо в плоскости, заданной вектором <PointN> (или вектором, направленным из точки <PointN1> в точку <PointN2>, если задан ключ 2points), очередным сегментом которой будет отрезок (line) или дуга (arc), проходящие через точку <Point>. В случае дуги, необязательные ключи задают координаты внутренней точки дуги (internal) или направление дуги (direction) <PointA>. Если последняя точка плоской области не совпадает с первой, K3 пытается их соединить отрезком. Если это не удается, выводится сообщение об ошибке. Если задан ключ close, то K3 предложит построить внутренние полости плоской области. Их может быть нескольку. Каждая из внутренних полостей должна представлять собой плоскую замкнутую область без самопересечений. Необязательный параметр mapsection задает номер секции <SecNumb> плоской области для раскрашивателя.

Необязательный ключ origin позволяет задать положение начала координат ЛСК полилинии в точке <PointB> и, если задан ключ ox, направление оси OX ЛСК полилинии. Направление оси OX полилинии может быть задано вектором <PointVB> или вектором, направленным из точки <PointVB1> в точку <PointVB2> (если задан ключ 2points).


pline face <Object>

Команда строит плоскую область по грани <Object>

Построение эквидистантной линии[править | править код]

epath <Object> [{<Object1> | point <Point>}] [{arc | angle}] {[regular] <Height1>} | [nregular <Height1> <Height2> }

Эквидистанта со скруглением и без него
Неравномерная эквидистанта

Команда строит эквидистанту к плоскому контуру <Object>. Если контур представляет собой отрезок, то необходимо также указать направление положения эквидистанты путем указания объекта <Object1> или точки point <Point>. Если контур не представляет собой отрезок (можно определить плоскость контура), то эквидистанта лежит в плоскости контура, а положительным направлением высоты является положительное направление оси Y при обходе контура по направлению контура.

Эквидистанта может строиться со скруглением (arc) и без скругления (angle) (см. рисунок).

Эквидистанта также может быть равномерной и нет. Пример равномерной (regular) эквидистанты представлен на рисунке. Неравномерная эквидистанта представлена на рисунке ниже. В случае равномерной эквидистанты, она строится на постоянном расстоянии <Height> от исходного контура <Object>. Неравномерная эквидистанта (nregular) строится следующим образом. Первая точка эквидистанты расположена на расстоянии <Height1> от исходного контура <Object>. Последняя точка - на расстоянии <Height2>. Промежуточные точки строятся на промежуточном расстоянии, которое пропорционально числу узловых точек эквидистанты.

Pluso.png Следует иметь ввиду, что любая эквидистанта (даже эквидистанта к окружности или дуге) представляет собой контур из отрезков прямых линий. Для преобразования контура из отрезков прямых линий в дуги или окружности следует применять команду arcs_path

Построение полиэквидистанты[править | править код]

polyequidistant <Object> [ { radius | Cross} ] <Height>

Полиэквидистанта по радиусу и до пересечения
Несколько полиэквидистант

Команда строит эквидистанту к полилинии или к плоской области (полиэквидистанту) <Object> с "выстой" <Height>. "Высотой" считается расстояние, на котором находятся точки полиэквидистанты от точек исходной полилинии. Положительное значение параметра <Height> строит полиэквидистанту наружу по отношению к исходной полилинии, отрицательное - вовнутрь.

Полиэквидистанта может быть построена до пересечения (параметр Cross) или по радиусу (пареметр radius). В первом случае элементы полиэквидистанты соединяются по биссектрисе, а во втором - скругляются дугой, радиуса <Height>.

В общем случае может быть создано несколько полиэквидистант или не создано ни одной. В этом случае при использовании команды в макропрограммах необходимо проверять, сколько полиэквидистант создано.

Пример:

objident : pat;   // Указываем исходную полилинию
sysv=sysvar(60);  // Запоминаем количество объектов в сцене
polyequidistant pat -100;   // Строим полиэквидистанту
sysv=sysvar(60)-sysv;       // Определяем количество появивишихся объектов. Это и есть полиэквидистанты
if (sysv==0)
{
  putmsg("Ничего не построили");
}
if (sysv==1)
{
  putmsg("построили одну эквидистанту");
  objident last 1 equ1;   // Это наша полиэквидистанта
}
if (sysv==2)
{
  putmsg("построили две эквидистанты");
  objident last 1 equ1;   // Это наша первая полиэквидистанта
  objident last 2 equ2;   // Это наша вторая полиэквидистанта
}
if (sysv>2)
{
  putmsg("построили больше двух эквидистант");
}
exit;

Покрытие контура дугами[править | править код]

arcs_path [tolangle <TolAngle>] [tolarc <TolArc>] <Object>

Команда покрывает контур <Object> дугами с заданной точностью. Параметры tolangle <TolAngle> и tolarc <TolArc> устанавливают точность покрытия контура дугами. <TolArc> - точность аппроксимации контура - максимальное расстояние между исходным контуром и контуром, покрытым дугами. <TolAngle> - порог покрытия дугами. Если угол между двумя соседними отрезками контура меньше этого порога, то эти отрезки остаются отрезками (не покрываются дугами). Если необязательные параметры не заданы, то используется их последнее заданное значение. При старте K3 <TolArc> = 1; <TolAngle> = pi()/24.

Если при заданной точности контур не может быть покрыт дугами, выдается сообщение об ошибке.

I.png Если требуется покрыть дугами сплайн, то рекомендуется использовать команду arcs_spl

Покрытие сплайна дугами[править | править код]

arcs_spl [tolarc <TolArc>] <Object>

Команда покрывает сплайн <Object> дугами с заданной точностью. Параметр tolarc <TolArc> устанавливают точность покрытия сплайна дугами. <TolArc> – точность аппроксимации сплайна - максимальное расстояние между сплайном и контуром, покрытым дугами. Если необязательный параметр не задан, то используется его последнее заданное значение. При старте K3 <TolArc> = 1.

Если при заданной точности сплайн не может быть покрыт дугами, выдается сообщение об ошибке.

I.png Если требуется покрыть дугами контур, то рекомендуется использовать команду arcs_path.

Макро | Создание геометрических объектов | Точки и линии | Примитивы | Кинематические операции | Поверхности | Булевы операции | Булевы над полилиниями и плоскими областями | Сечения объектов | Определение точек пересечения | Проверка на самопересечение | Эквидистантная поверхность | Контур по границе