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

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

Как нарисовать LWPOLYLINE в повенутой ПСК

Ответ
Поиск в этой теме
Непрочитано 27.09.2011, 23:44 #1
Как нарисовать LWPOLYLINE в повенутой ПСК
BulKonst
 
Инженер-конструктор
 
МО
Регистрация: 03.07.2009
Сообщений: 19

Добрый день! Столкнулся с такой проблеммой.
Поворачиваю ПСК относительно оси Z (те X и Y повернуты).
Строю полилинию, к примеру
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1)
(list 10 0.0 0.0 0.0) (list 10 1000.0 0.0 0.0) (list 10 1000.0 100.0 0.0) (list 10 0.0 100.0 0.0))
Примитив строится в глобальных осях координат, те поворот СК не учитывается
Как делать так чтобы полилиния строилась в плоскости XY с учетом поворота?
Заранее спасибо!
Просмотров: 3384
 
Непрочитано 28.09.2011, 00:07
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,411


210 группу забыл.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.09.2011, 00:21
#3
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
210 группу забыл.
Не достаточно. Если речь идёт про текущую ПСК, то необходимо для каждой точки выполнить (trans <точка в МСК> 0 1) и результаты её выполнения присваивать группам 10. А если ПСК совсем абстрактная, то нужно еще и группу 210 преобразовывать функцией (trans <группа 210> 0 1 T)
Когда-то очень давно мы что-то такое сделали с Евгением Елпановым:
Код:
[Выделить все]
 (defun C:MYPOLY ( / pt pts)
  ;; получаем точки в ПСК
  (while (setq pt (if pt 
           (getpoint pt "\nОчередная точка: ") (getpoint "\nПервая точка:"))
         )
   (if pts (grdraw pt (car pts) 1)) 
   (setq pts (cons pt pts))
  )
  (setq pts (reverse pts)) (redraw)
  ;; Создание самой полилинии
  (entmakex
   (apply 'append
    (list
      (list
        '(0   . "LWPOLYLINE")
        '(100 . "AcDbEntity")
        '(62  . 1)
        '(100 . "AcDbPolyline")
        (cons 90 (length pts))
        (cons 38 (caddr (trans '(0 0 0) 1 (trans '(0. 0. 1.) 1 0 t))))
        '(39 . 0)
        '(70 . 1)
      ) ;_  list
      (mapcar '(lambda (x) (list 10 (car x) (cadr x)))
         (mapcar '(lambda (x) (trans x 1 (trans '(0. 0. 1.) 1 0 t))) pts)
      ) ;_  mapcar
      (list (cons 210 (trans '(0. 0. 1.) 1 0 t)))
     ) ;_  list
   ) ;_  apply
  ) ;_  setq
  (princ)
) ;_endof defun 


Последний раз редактировалось Александр Ривилис, 28.09.2011 в 01:20.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 28.09.2011, 01:30
#4
BulKonst

Инженер-конструктор
 
Регистрация: 03.07.2009
МО
Сообщений: 19


Наверное как-то так:
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1)
(cons 10 (trans '(0.0 0.0 0.0) 0 1))
(cons 10 (trans '(1000.0 0.0 0.0) 0 1))
(cons 10 (trans '(1000.0 100.0 0.0) 0 1))
(cons 10 (trans '(0.0 100.0 0.0) 0 1))))

Но парадокс: вращаю ПСК против часовой - полилиния вращается по часовой и наоборот?
Также и с перемещением, к примеру: если ПСК (200.0 , 100.0), то первая точка полилинии (-200.0 , -100.0)?
BulKonst вне форума  
 
Автор темы   Непрочитано 28.09.2011, 01:30
#5
BulKonst

Инженер-конструктор
 
Регистрация: 03.07.2009
МО
Сообщений: 19


Нужно время чтобы проанализировать ваш код. Я новичек. Но большое спасибо!

Последний раз редактировалось BulKonst, 28.09.2011 в 01:45.
BulKonst вне форума  
 
Непрочитано 28.09.2011, 09:35
1 | #6
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от BulKonst Посмотреть сообщение
Но парадокс: вращаю ПСК против часовой - полилиния вращается по часовой и наоборот?
В такой логике, как я понимаю, нужно использовать не (trans <точка> 0 1), а (trans <точка> 1 0)
Но лучше использовать готовый код из #3, так как он универсальнее.

Цитата:
Сообщение от BulKonst Посмотреть сообщение
Нужно время чтобы проанализировать ваш код.
А я и не тороплю.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 30.09.2011, 20:12
#7
BulKonst

Инженер-конструктор
 
Регистрация: 03.07.2009
МО
Сообщений: 19


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
А я и не тороплю.
Ну вот вроде разобрался, построение полилинии в плоскости XY, учтены углы поворота и координата Z:
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 4) '(70 . 1)
(cons 38 (caddr (trans '(0 0 0) 1 (trans '(0. 0. 1.) 1 0 t)))) ;Уровень - координата Z
(cons 10 (trans '(0.0 0.0 0.0) 1 (trans '(0.0 0.0 1.0) 1 0 t))) ; Перевод координат точки.
(cons 10 (trans '(1000.0 0.0 0.0) 1 (trans '(0.0 0.0 1.0) 1 0 t))) ; Перевод координат точки.
(cons 10 (trans '(1000.0 100.0 0.0) 1 (trans '(0.0 0.0 1.0) 1 0 t))) ; Перевод координат точки.
(cons 10 (trans '(0.0 100.0 0.0) 1 (trans '(0.0 0.0 1.0) 1 0 t)))
(cons 210 (trans '(0. 0. 1.) 1 0 t)) ;Перевод - вектора нормали
);_ list
);_ entmake

Отдельное спасибо Александру Ривилис! Да 24 и 25 строку 2-а дня разгадывал!
BulKonst вне форума  
 
Непрочитано 30.09.2011, 20:45
#8
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от BulKonst Посмотреть сообщение
Отдельное спасибо Александру Ривилису!
Пожалуйста!
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как нарисовать LWPOLYLINE в повенутой ПСК



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отключить автоматическую настройку ПСК при начале черчния новой полилинии? МишаИнженер AutoCAD 1 15.10.2010 08:04
Как удержать прежнее начало координат при смене ПСК, работая в одном ИЗОВИДЕ пространства модели BM60 AutoCAD 7 17.08.2009 15:07
Игры (экзотические?) с ПСК BM60 AutoCAD 4 06.04.2009 08:46
ПСК на месте курсора мыши - как получилось? BM60 AutoCAD 2 03.03.2008 14:23
вопрос по ПСК Jоhnny AutoCAD 4 04.08.2007 21:39