На VLISP из 3D модели 2D-виды

Автор: | 02.02.2018

Введение
Постановка задачи
Алгоритм
Программная реализация
Выводы

Введение

 Чертеж пространственного объекта можно выполнить двумя способами:

  1. Начертить непосредственно в плоскости (используя команды для плоского черчения).
  2. Определить по модели пространственного объекта через аппарат ортогонального проецирования (рис.1).

Первый способ очень трудоемкий. Второй способ реализуется в AutoCAD поэтапно:

  1. Моделирование объекта.
  2. Определение вида.
  3. Построение проекции.

Уточним, что здесь подразумевается под терминами «вид» и «проекция». Вид – видимая часть пространственного объекта со стороны выбранного направления проецирования. Проекция – плоская модель объекта, получаемая в результате обработки пространственного объекта в соответствии с выбранным направлением проецирования.

В чем принципиальное различие между видом и проекцией? Зачем нужно создавать проекцию, если есть вид на объект, который также представлен на плоском экране? Отличие состоит лишь в примитивах, представленных в базе данных чертежа. Пространственные модели описываются при помощи трехмерных примитивов, а проекции представлены двумерными примитивами. Те и другие обладают специфическими свойствами, которые позволяют их использовать лишь для определенных целей. Например, нельзя назначить толщину очерковой линии пространственного объекта, поскольку этот элемент отсутствует в его описании. Также нельзя удалить какую-либо линию объекта или изменить её свойства, поскольку свойства пространственного объекта можно изменять только в целом. Поэтому, во многих случаях целесообразно создавать проекции на основе пространственной модели объекта.

В AutoCAD процедура создания комплексного чертежа из проекций твердотельного объекта в диалоговом режиме роботы в AutoCAD есть трудоемкой. Она состоит из нескольких операций [1]:

    1. Создаются окна, в каждом из которых устанавливаются соответствующие направления проецирования (рис.2).
    2. Для каждого из окон создаются проекции (команда SOLPROF) в соответствии с выбранным направлением проецирования. Предварительно включается пространство ЛИСТА и режим МОДЕЛИ (только при этих условиях возможно выполнение команды SOLPROF).
    3. Проекции переносятся на комплексный чертеж (через буферную память). Перед тем, как перенести проекцию, необходимо установить в окне плоскость проекций (XY) параллельно окну (опция View команды UCS).

Постановка задачи

Ставится задача реализовать процедуру создания комплексного чертежа программно. Чтобы на вход   программы поступала пространственная модель детали (рис.3), на выходе получали комплексный чертеж из 2-х и более проекций (рис.4).

Алгоритм

Для выбора лучшего алгоритма решения поставленной задачи рассмотрим два возможных способа определения различных видов (или проекций) объекта для построения комплексного чертежа:

  1. Вектор проецирования (и плоскость проекций) перемещается, объект неподвижен (рис.5).
  2. Вектор проецирования неподвижен, объект перемещается (рис.6).

При выборе 2-го способа построения проекций того же эффекта можно достичь следующим образом (см. рис.6):

  1. Создается необходимое количество копий объекта.
  2. Копии размещаются соответствующим образом по отношению к выбранному направлению проецирования.
  3. Создаются модели проекций в соответствии с выбранным видом, модели объектов удаляются (выключаются).

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

Программная реализация

Файл pro3.lsp

(defun C:Pro3 ()
; Загрузка ARX программ
(setq n (length (arx)) g T ac T)
(while (>= (setq n (1- n)) 0)
(If (= "geom3d.arx" (nth n (arx))) (setq g NIL))
(If (= "acsolids.arx" (nth n (arx))) (setq ac NIL)))
(If g (arxload "geom3d"))
(If ac (arxload "acsolids"))
(setvar "HIGHLIGHT" 0) ;выбранные объекты не подсвечиваются
(setvar "HIGHLIGHT" 1)
(setvar "CMDECHO" 0) ;подавляет сообщения в командной строке
(setvar "CMDECHO" 1)
(COMMAND "vpoint" "0,0,1")
;Копирование модели для 3х видов и изометрии
(setq MoP2 (entlast))
(COMMAND "copy" MoP2 "" "0,0" "0,0")
(setq MoP1 (entlast))
(COMMAND "copy" MoP2 "" "0,0" "0,0")
(setq MoP3 (entlast))
(COMMAND "copy" MoP2 "" "0,0" "0,0")
(setq MoIz (entlast))
(command "zoom" "e")
;Вращение каждой из 3х копий модели осуществляется
;(command "rotate3d" MoP2 "" "X" '(0 0 0) -90)
(rotate3d MoP2 "X" '(0 0 0) -90)
(rotate3d MoP3 "Y" '(0 0 0) 90)
(rotate3d MoP3 "Z" '(0 0 0) 90)
(rotate3d MoIz "Z" '(0 0 0) 45)
(rotate3d MoIz "X" '(0 0 0) -52.5)
;Расстояние между проекциями
(setq rP2P1 -60)
(setq rP2P3 100)
(setq rP2Iz 200)
;Координаты точки вставки проекции
(setq Tv1 (list 0 rP2P1 0))
(setq Tv3 (list rP2P3 0 0))
(setq TvIz (list rP2Iz 0 0))
;Перемещение проекций на свои места
(COMMAND "move" MoP1 "" "0,0" Tv1)
(COMMAND "move" MoP3 "" "0,0" Tv3)
(COMMAND "move" MoIz "" "0,0" TvIz)
(COMMAND "move" MoP1 MoP2 MoP3 MoIz "" "0,0" "100,200")
(COMMAND "zoom" "e")
;Переключение в пространство ЛИСТА
(setvar "TILEMODE" 0)
(entdel (entlast)) ;Удаляется рамка
(COMMAND "mview" '(0 0) '(420 297))
(COMMAND "mspace")
(solprof MoP1 "Y" "Y" "Y")
(solprof MoP2 "Y" "Y" "Y")
(solprof MoP3 "Y" "Y" "Y")
(solprof MoIz "Y" "Y" "Y")
(setvar "TILEMODE" 1)
;Определение имени слоя, в котором SOLPROF строит профили
(SETQ N (ssget "X" '((0 . "VIEWPORT"))))
(setq im (ssname N 0)) ;извлекаем имя примитива
(setq nb (entget im)) ;извлекаем параметры примитива "VIEWPORT"
(setq sln (assoc 5 nb));извлекаем дескриптор примитива "VIEWPORT"
;Составление имён слоев, в которых размещены проекции
(setq slPv (strcat "Pv-" (cdr sln)))
(setq slPh (strcat "Ph-" (cdr sln)))
; Отключаем слои невидимых линий и 0, а также устанавливаем толщину в слое видимых линий.
(COMMAND "LAYER" "off" slPh "off" 0 "Y" "LW" 0.5 slPv "")
)

В Мировой (World) системе координат (рис.7) создается (или копируется с другого чертежа) с привязкой к началу координат модель объекта (например, конус). Полученный после запуска программы результат представлен на рисунке 8.

С помощью программы создаются поименованные копии объекта. Копии вращаются (команда Rotate3d) вокруг осей координат и разносятся (Move) на необходимые расстояния по отношению друг к другу. Затем создаются проекции (Solprof). Предварительно включается пространство ЛИСТА и режим Модели, поскольку команда Solprof выполняется только при этих  условиях. Команды Rotate3d и Solprof являются внешними (описываются в ARX-приложениях), поэтому для их использования должны быть загружены соответствующие файлы (функция arxload).

Вместе с проекциями образуются дополнительные слои для видимых и невидимых линий проекций. Программа обеспечивает обводку линий из слоя видимых линий и отключение других слоев. Для выполнения этих задач в программе определяются имена образовавшихся слоев. Имя слоя состоит из приставки PV- (для слоя невидимых линий PH-), а также наименования окна, например PV-4B и PH-4B. Наименование окна определяется с помощью функций доступа к данным чертежа.

 

Автор: Николай Свирневский

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *