| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как определить угол наклона примитива

Как определить угол наклона примитива

Ответ
Поиск в этой теме
Непрочитано 19.03.2009, 06:35 #1
Как определить угол наклона примитива
Ratmir
 
Барнаул
Регистрация: 12.09.2005
Сообщений: 77

Уважаемые форум чане пишу код для от рисовки вида
------------------------------------------------------------------------
(defun RVid ( / inPointA P1 P2 rlW1)
(setvar "CMDECHO" 0)
(setq inPointA (getpoint "\nУкажите точку вставки: ")
P1 (polar inPointA 0 6)
P2 (polar P1 0 6 )
rlW 1.5
);end setq

(command "linetype" "s" "Continuous" "")

(Command "_pline" inPointA "_w" 0 rlW P1 "_w" 0 0 P2 "")
(princ "\nУгол поворота: ")
(Command "_rotate" "_last" "" inPointA pause \)

(initget 1)

(setvar "CMDECHO" 1)

);end RVid
------------------------------------------------------------------------
Вопрос как определить на какой угол повернул примитив пользователь, чтобы найти точку вставки текста относительно inPointA.
Заранее всем спасибо
Просмотров: 3420
 
Непрочитано 20.03.2009, 10:46
#2
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Ratmir,
В общем случае как в геометрии: Взять 1-ю производную кривой в интересующей тебя точке. Получишь тангенс угла наклона. Взяв арктантенс найдешь угол.

VxGetTangentAtPoint - Returns the tangent at the specific point
В твоем конкретном случае можно прочитать координаты полилинии, угол от первой до последней и будет искомый.

Код:
[Выделить все]
(defun RVid ( / inPointA P1 P2 rlW1 lst)
(setvar "CMDECHO" 0)
(setq inPointA (getpoint "\nУкажите точку вставки: ")
P1 (polar inPointA 0 6)
P2 (polar P1 0 6 )
rlW 1.5 
);end setq
(command "_linetype" "_s" "Continuous" "")
(Command "_pline" "_non" inPointA "_w" 0 rlW "_non" P1 "_w" 0 0 "_non" P2 "")
(princ "\nУгол поворота: ")
(Command "_rotate" "_last" "" "_non" inPointA)
(while (> (getvar "CMDACTIVE") 0)(command pause))
(setq lst nil)
(foreach item (entget(entlast))
  (if (= (car item) 10)
    (setq lst (cons (cdr item) lst))
    )
  )
  ;;;В lst список координат, начиная с конца
(setq P2 (car lst))
(command "_LINE" "_non" inPointA "_non" (polar inPointA (angle inPointA P2) 100) "")
);end RVid
PS Не обрабатываешь объектную привязку (OSMODE). Выделил красным
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 24.03.2009, 06:23
#3
Ratmir


 
Регистрация: 12.09.2005
Барнаул
Сообщений: 77


Спасибо VVA.
Все заработало, а включение и отключения привязок я вывел в отдельную функции и просто добавляю их
Код:
[Выделить все]
;|
                           Функция RSaveOSNAPORTHO
Сохраняет значение OSNAP (F3) и ORTHO (F8)
|;

;;;---------------------------RSaveOSNAPORTHO-----------------------------;;;
(defun RSaveOSNAPORTHO ( )
 (setq osm (getvar "OSMODE"))                 ;; Сохраняет значение OSNAP в переменную osm
 (setvar "OSMODE" 0)                          ;; Обнуляет значения OSNAP
 (setq ort (getvar "ORTHOMODE"))              ;; Сохраняет значение ORTHO в переменную ort
 (setvar "ORTHOMODE" 0)                       ;; Обнуляет значения ORTHO
 (setvar "CMDECHO" 0)                         ;; Обнуляет значения CMDECHO

);end RSaveOSNAPORTHO
;;;-----------------------------------------------------------------------;;;

;|
                           Функция RSetOSNAPORTHO
 Возвращает прежние значения OSNAP (F3) и ORTHO (F8)
|;

;;;---------------------------RSetOSNAPORTHO-----------------------------;;;
(defun RSetOSNAPORTHO ( )
 (setvar "OSMODE" osm)                        ;; Возвращает прежние значения OSNAP
 (setvar "ORTHOMODE" ort)                     ;; Возвращает прежние значения ORTHO
 (setvar "CMDECHO" 1)                         ;; Возвращает прежние значения CMDECHO
);end RSetOSNAPORTHO
;;;-----------------------------------------------------------------------;;;

Последний раз редактировалось Кулик Алексей aka kpblc, 24.03.2009 в 20:22.
Ratmir вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как определить угол наклона примитива

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Комфортный угол наклона авто рампы VS автолифт stoper Архитектура 15 29.09.2008 21:50
Как теоретически определить уровень освещенности KonGo Инженерные сети 2 25.06.2008 12:04
как определить какой вес выдержит монолитная стена высотой 3 м? Beginner Железобетонные конструкции 28 09.06.2008 13:24
Как создать свой тип примитива? mental Программирование 8 30.10.2007 23:34
Как изменить угол обзора в 3D? В Autocad'e это возможно? Li2n AutoCAD 17 12.11.2004 23:45