Создание точки и линий: различия между версиями

Материал из K3-Macro
(Новая страница: «Линии ==Создание точки == <code>'''point'''...»)
 
 
(не показано 13 промежуточных версий этого же участника)
Строка 1: Строка 1:
[[Категория:Команды_создания_геометрических_объектов|Линии]]
[[Категория:Команды_создания_геометрических_объектов|Линии]]
{{Команды создания геометрических объектов}}
----
==Создание точки ==
==Создание точки ==
<code>'''point'''&nbsp;''&lt;Point&gt;''</code>
<code>'''point'''&nbsp;''&lt;Point&gt;''</code>


<code>''&lt;Point&gt;''&nbsp;</code> - создаваемая точка.
<code>''&lt;Point&gt;''&nbsp;</code> создаваемая точка.


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


<code>'''line'''&nbsp;''&lt;Point1&gt;,&nbsp;''<nowiki>[start]</nowiki>&nbsp;''&lt;Point2&gt;,..., &lt;PointN&gt;&nbsp;''<nowiki>[close] done</nowiki></code>
<code>'''line'''&nbsp;''&lt;Point1&gt;,&nbsp;''<nowiki>[start]</nowiki>&nbsp;''&lt;Point2&gt;,..., &lt;PointN&gt;&nbsp;''<nowiki>[close] done</nowiki></code>
Строка 31: Строка 33:
<code>'''arc'''''&nbsp;&lt;Parameter1&gt; &lt;Parameter2&gt; ... &lt;ParameterN&gt;''</code>
<code>'''arc'''''&nbsp;&lt;Parameter1&gt; &lt;Parameter2&gt; ... &lt;ParameterN&gt;''</code>


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


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


<code>'''circle''' <PointC> [normal <PointN>] <Radius></code>
<code>'''circle''' ''<PointC>'' [normal ''<PointN>''] ''<Radius>''</code>


<code>'''circle''' <PointC> [normal <PointN>] point <Point></code>
<code>'''circle''' ''<PointC>'' [normal ''<PointN>''] point ''<Point>''</code>
:<code><PointC></code> — точка центра окружности,
:<code>''<PointC>''</code> — точка центра окружности,
:<code><PointN></code> — координаты вектора нормали к плоскости конструирования
:<code>''<PointN>''</code> — координаты вектора нормали к плоскости конструирования
:<code><Radius></code> — радиус окружности.  
:<code>''<Radius>''</code> — радиус окружности.  
:<code><Point></code> — точка, через которую проходит окружность
:<code>''<Point>''</code> — точка, через которую проходит окружность
Команда строит окружность с центром в точке <code><PointC></code> и радиусом <code><Radius></code> или строит окружность с центром в точке <code><PointC></code> и проходящую через точку <code><Point></code>. Результат может зависеть от текущего видового окна.
Команда строит окружность с центром в точке <code><PointC></code> и радиусом <code><Radius></code> или строит окружность с центром в точке <code>''<PointC>''</code> и проходящую через точку <code><Point></code>. Результат может зависеть от текущего видового окна.


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


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




<code>'''circle''' <PointC> [normal <PointN>] diameter <Diameter></code>
<code>'''circle''' ''<PointC>'' [normal ''<PointN>''] diameter ''<Diameter>''</code>


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


Окружность, проходящая через три точки <code><Point1> <Point2> <Point3></code>. Плоскость окружности совпадает с плоскостью, проходящей через три заданные точки <code><Point1> <Point2> <Point3></code>.
Окружность, проходящая через три точки <code><Point1> <Point2> <Point3></code>. Плоскость окружности совпадает с плоскостью, проходящей через три заданные точки <code><Point1> <Point2> <Point3></code>.
<!-->Верно ли я понимаю, что часть информации отсюда относится только к версиям до 7.4?</!-->


==Создание сплайна==
==Создание сплайна==
Строка 524: Строка 527:
<code>'''spline''' <nowiki>[{</nowiki>onspline | control}] ''&lt;Point1&gt; &lt;Point2&gt; &lt;Ponut3&gt;'' <nowiki>[start] [connect</nowiki> ''&lt;Object&gt;''] ''&lt;Point4&gt; ... &lt;PointN&gt;'' <nowiki>[close] done</nowiki></code>
<code>'''spline''' <nowiki>[{</nowiki>onspline | control}] ''&lt;Point1&gt; &lt;Point2&gt; &lt;Ponut3&gt;'' <nowiki>[start] [connect</nowiki> ''&lt;Object&gt;''] ''&lt;Point4&gt; ... &lt;PointN&gt;'' <nowiki>[close] done</nowiki></code>


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


Ключ <code>onspline</code> указывает, что сплайн будет проходить через указанные точки. Ключ <code>control</code> указывает на то, что точки <code>''&lt;Point1&gt;</code> <code>&lt;Point2&gt;</code> <code>&lt;Point3&gt;</code> <code>&lt;Point4&gt;</code> ... <code>&lt;PointN&gt;</code> — ''управляющие точки сплайна.
Ключ <code>onspline</code> указывает, что сплайн будет проходить через указанные точки. Ключ <code>control</code> указывает на то, что точки <code>''&lt;Point1&gt;</code> <code>&lt;Point2&gt;</code> <code>&lt;Point3&gt;</code> <code>&lt;Point4&gt;</code> ... <code>&lt;PointN&gt;</code> — ''управляющие точки сплайна.
Строка 531: Строка 534:
<code>'''spline '''bypath ''&lt;Object&gt;''</code>
<code>'''spline '''bypath ''&lt;Object&gt;''</code>


Команда строит сплайн по контур ''&lt;Object&gt;''.
Команда строит сплайн по контур <code>''&lt;Object&gt;''</code>.




Строка 554: Строка 557:




<code><nowiki>pline  [mapsection </nowiki>''&lt;SecNumb&gt;''<nowiki>] [pdomain] [normal { </nowiki>''&lt;PointN&gt; ''| 2points ''&lt;PointN1&gt;  &lt;PointN2&gt;''<nowiki> } [origin</nowiki>'' &lt;PointB&gt; ''<nowiki>[ox { </nowiki>''&lt;PointVB&gt; ''| 2points ''&lt;PointVB1&gt; &lt;PointVB2&gt;''<nowiki> }]]] {line | arc [direction | internal</nowiki>'' &lt;PointA&gt;'']'' &lt;Point&gt; ''<nowiki>[close]</nowiki></code>
<code>'''pline''' [mapsection ''&lt;SecNumb&gt;''<nowiki>] [pdomain] [normal { </nowiki>''&lt;PointN&gt; ''| 2points ''&lt;PointN1&gt;  &lt;PointN2&gt;''<nowiki> } [origin</nowiki>'' &lt;PointB&gt; ''<nowiki>[ox { </nowiki>''&lt;PointVB&gt; ''| 2points ''&lt;PointVB1&gt; &lt;PointVB2&gt;''<nowiki> }]]] {line | arc [direction | internal</nowiki>'' &lt;PointA&gt;'']'' &lt;Point&gt; ''<nowiki>[close]</nowiki></code>


Команда строит полилинию в плоскости текущего видового окна, либо в плоскости, заданной вектором <code>''&lt;PointN&gt;</code> ''(или вектором, направленным из точки <code>''&lt;PointN1&gt;</code> ''в точку <code>''&lt;PointN2&gt;''</code>, если задан ключ <code>2points</code>), очередным сегментом которой будет отрезок (<code>line</code>) или дуга (<code>arc</code>), проходящие через точку <code>''&lt;Point&gt;''</code>. В случае дуги, необязательные ключи задают координаты внутренней точки дуги (<code>internal</code>) или направление дуги (<code>direction</code>) <code>''&lt;PointA&gt;''</code>. Необязательный параметр <code>mapsection</code> задает номер секции <code>''&lt;SecNumb&gt;</code> ''полилинии для раскрашивателя.
Команда строит полилинию в плоскости текущего видового окна, либо в плоскости, заданной вектором <code>''&lt;PointN&gt;</code> ''(или вектором, направленным из точки <code>''&lt;PointN1&gt;</code> ''в точку <code>''&lt;PointN2&gt;''</code>, если задан ключ <code>2points</code>), очередным сегментом которой будет отрезок (<code>line</code>) или дуга (<code>arc</code>), проходящие через точку <code>''&lt;Point&gt;''</code>. В случае дуги, необязательные ключи задают координаты внутренней точки дуги (<code>internal</code>) или направление дуги (<code>direction</code>) <code>''&lt;PointA&gt;''</code>. Необязательный параметр <code>mapsection</code> задает номер секции <code>''&lt;SecNumb&gt;</code> ''полилинии для раскрашивателя.
Строка 562: Строка 565:
Необязательный ключ <code>close</code> используется для того, чтобы замкнуть полилинию. То есть для того, чтобы совместить начальную и конечную точку. Если полилиния уже замкнутая, то есть начальная точка уже совпадает с конечной, то использовать ключ нельзя.
Необязательный ключ <code>close</code> используется для того, чтобы замкнуть полилинию. То есть для того, чтобы совместить начальную и конечную точку. Если полилиния уже замкнутая, то есть начальная точка уже совпадает с конечной, то использовать ключ нельзя.


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


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




<code><nowiki>pline [mapsection </nowiki>''&lt;SecNumb&gt;''] path ''&lt;Object&gt;''</code>
<code>'''pline''' [mapsection ''&lt;SecNumb&gt;''] path ''&lt;Object&gt;''</code>


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




<code><nowiki>pline [mapsection </nowiki>''&lt;SecNumb&gt;''<nowiki>] pdomain  [normal { </nowiki>''&lt;PointN&gt; ''| 2points ''&lt;PointN1&gt;  &lt;PointN2&gt;''<nowiki> } [origin</nowiki>'' &lt;PointB&gt; ''<nowiki>[ox { </nowiki>''&lt;PointVB&gt; ''| 2points ''&lt;PointVB1&gt; &lt;PointVB2&gt;''<nowiki> }]]]  {line | arc [direction | internal</nowiki>'' &lt;PointA&gt;'']'' &lt;Point&gt; ''<nowiki>[close]</nowiki></code>
<code>'''pline''' [mapsection ''&lt;SecNumb&gt;''<nowiki>] pdomain  [normal { </nowiki>''&lt;PointN&gt; ''| 2points ''&lt;PointN1&gt;  &lt;PointN2&gt;''<nowiki> } [origin</nowiki>'' &lt;PointB&gt; ''<nowiki>[ox { </nowiki>''&lt;PointVB&gt; ''| 2points ''&lt;PointVB1&gt; &lt;PointVB2&gt;''<nowiki> }]]]  {line | arc [direction | internal</nowiki>'' &lt;PointA&gt;'']'' &lt;Point&gt; ''<nowiki>[close]</nowiki></code>


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




<code>pline face &lt;Object&gt;</code>
<code>'''pline''' face ''&lt;Object&gt;''</code>


Команда строит плоскую область по грани <code>&lt;Object&gt;</code>
Команда строит плоскую область по грани <code>''&lt;Object&gt;''</code>


==Построение эквидистантной линии==
==Построение эквидистантной линии==
Строка 588: Строка 591:
{| class="prettytable"
{| class="prettytable"
|-
|-
|[[Файл:eq.png|thumb|center|313px|Эквидистанта со скруглением и без него]]
|[[Файл:eq.png|thumb|center|313px|(1) Эквидистанта со скруглением и без него]]
|[[Файл:Clip2002.png|thumb|300px|center|Неравномерная эквидистанта]]
|[[Файл:Clip2002.png|thumb|300px|center|(2) Неравномерная эквидистанта]]
|}
|}
</center>
</center>
Команда строит эквидистанту к плоскому контуру <code>''&lt;Object&gt;''</code>. Если контур представляет собой отрезок, то необходимо также указать направление положения эквидистанты путем указания объекта <code>''&lt;Object1&gt;''</code> или точки <code>point'' &lt;Point&gt;''</code>. Если контур не представляет собой отрезок (можно определить плоскость контура), то эквидистанта лежит в плоскости контура, а положительным направлением высоты является положительное направление оси '''Y''' при обходе контура по направлению контура.
Команда '''epath''' строит эквидистанту к плоскому контуру <code>''&lt;Object&gt;''</code>. Если контур представляет собой отрезок, то необходимо также указать направление положения эквидистанты путем указания объекта <code>''&lt;Object1&gt;''</code> или точки <code>point'' &lt;Point&gt;''</code>. Если контур не представляет собой отрезок (можно определить плоскость контура), то эквидистанта лежит в плоскости контура, а положительным направлением высоты является положительное направление оси '''Y''' при обходе контура по направлению контура.


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


Эквидистанта также может быть равномерной и нет. Пример равномерной (<code>regular</code>) эквидистанты представлен на рисунке. Неравномерная эквидистанта представлена на рисунке ниже. В случае равномерной эквидистанты, она строится на постоянном расстоянии <code>''&lt;Height&gt;</code> ''от исходного контура <code>''&lt;Object&gt;''</code>. Неравномерная эквидистанта (<code>nregular</code>) строится следующим образом. Первая точка эквидистанты расположена на расстоянии <code>''&lt;Height1&gt;''</code> от исходного контура <code>''&lt;Object&gt;''</code>. Последняя точка - на расстоянии <code>''&lt;Height2&gt;''</code>. Промежуточные точки строятся на промежуточном расстоянии, которое пропорционально числу узловых точек эквидистанты.
Эквидистанта также может быть равномерной и нет. Пример равномерной (<code>regular</code>) эквидистанты представлен на рис. 1. Неравномерная эквидистанта представлена на рис. 2. В случае равномерной эквидистанты, она строится на постоянном расстоянии <code>''&lt;Height&gt;</code> ''от исходного контура <code>''&lt;Object&gt;''</code>. Неравномерная эквидистанта (<code>nregular</code>) строится следующим образом. Первая точка эквидистанты расположена на расстоянии <code>''&lt;Height1&gt;''</code> от исходного контура <code>''&lt;Object&gt;''</code>. Последняя точка - на расстоянии <code>''&lt;Height2&gt;''</code>. Промежуточные точки строятся на промежуточном расстоянии, которое пропорционально числу узловых точек эквидистанты.
{| class="prettytable"
{| class="prettytable"
|-
|-
Строка 612: Строка 615:
|}
|}
</center>
</center>
Команда строит эквидистанту к полилинии или к плоской области (полиэквидистанту) <code>''&lt;Object&gt;</code> ''с "выстой" <code>''&lt;Height&gt;''</code>. "Высотой" считается расстояние, на котором находятся точки полиэквидистанты от точек исходной полилинии. Положительное значение параметра <code>''&lt;Height&gt;</code>  ''строит полиэквидистанту наружу по отношению к исходной полилинии, отрицательное - вовнутрь.  
Команда '''polyequidistant''' строит эквидистанту к полилинии или к плоской области (полиэквидистанту) <code>''&lt;Object&gt;</code> ''с «высотой» <code>''&lt;Height&gt;''</code>. «Высотой» считается расстояние, на котором находятся точки полиэквидистанты от точек исходной полилинии. Положительное значение параметра <code>''&lt;Height&gt;</code>  ''строит полиэквидистанту наружу по отношению к исходной полилинии, отрицательное вовнутрь.  


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


В общем случае может быть создано несколько полиэквидистант или не создано ни одной. В этом случае при использовании команды в макропрограммах необходимо проверять, сколько полиэквидистант создано.
В общем случае может быть создано несколько полиэквидистант или не создано ни одной. В этом случае при использовании команды в макропрограммах необходимо проверять, сколько полиэквидистант создано.
Строка 647: Строка 650:
<code>'''arcs_path''''' ''<nowiki>[tolangle</nowiki>'' &lt;TolAngle&gt;''<nowiki>] [tolarc</nowiki>'' &lt;TolArc&gt;''] ''&lt;Object&gt; ''</code>
<code>'''arcs_path''''' ''<nowiki>[tolangle</nowiki>'' &lt;TolAngle&gt;''<nowiki>] [tolarc</nowiki>'' &lt;TolArc&gt;''] ''&lt;Object&gt; ''</code>


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


Если при заданной точности контур не может быть покрыт дугами, выдается сообщение об ошибке.
Если при заданной точности контур не может быть покрыт дугами, выдается сообщение об ошибке.
Строка 660: Строка 663:
<CODE>'''arcs_spl''''' ''<nowiki>[</nowiki>tolarc ''&lt;TolArc&gt;''] ''&lt;Object&gt; ''</CODE>
<CODE>'''arcs_spl''''' ''<nowiki>[</nowiki>tolarc ''&lt;TolArc&gt;''] ''&lt;Object&gt; ''</CODE>


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


Если при заданной точности сплайн не может быть покрыт дугами, выдается сообщение об ошибке.
Если при заданной точности сплайн не может быть покрыт дугами, выдается сообщение об ошибке.
Строка 668: Строка 671:
|''Если требуется покрыть дугами контур, то рекомендуется использовать команду ''[[Создание точки и линий#Покрытие контура дугами|arcs_path]].
|''Если требуется покрыть дугами контур, то рекомендуется использовать команду ''[[Создание точки и линий#Покрытие контура дугами|arcs_path]].
|}
|}
----
{{Команды создания геометрических объектов}}

Текущая версия от 17:11, 22 февраля 2024

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

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

point <Point>

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

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

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

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 строит дугу окружности в соответствии с введенными параметрами.

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

Ниже представлен список ключевых слов, которые можно использовать в качестве параметров команды 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> <Point3> <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> }

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

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

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

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

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

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

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

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

Команда polyequidistant строит эквидистанту к полилинии или к плоской области (полиэквидистанту) <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>

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

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

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

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

arcs_spl [tolarc <TolArc>] <Object>

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

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

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

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