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

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

Непонятка с системами координат

Ответ
Поиск в этой теме
Непрочитано 14.10.2005, 12:33 #1
Непонятка с системами координат
===AAA===
 
г. Норильск
Регистрация: 15.08.2005
Сообщений: 627

Всем привет!

Братцы, помогите распутаться... :-)

Уже не первый такой чертеж попадается, но не могу
понять, где собака порылась :-(

(trans '(0 0) 2 3) возвращает в нем (161.05 202.603 0.0)

да и зрительно видно, что есть какая-то дополнительная
сетка с началом координат примерно в этом нижнем-левом
углу. Что это за система координат такая включается и
как привести ее к МСК?
__________________
Счастливо, Алексей!
Просмотров: 10301
 
Автор темы   Непрочитано 14.10.2005, 12:36
#2
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Что-то файл не прилепился...
Переименуйте *.dwg на *.zip
[ATTACH]1129278973.dwg[/ATTACH]
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.10.2005, 12:41
#3
Хмурый


 
Регистрация: 29.10.2004
СПб
Сообщений: 16,373


Два раза щелкни левой клавишей в видовом экране ("войди в видовой экран") и отключи Grid (Сетку) F7. Потом перейди назад в пространство листа
Хмурый вне форума  
 
Автор темы   Непрочитано 14.10.2005, 12:50
#4
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Привет!

Совет, конечно, занимательный... :-)

Беда только в том, что сетка - это вторично (и, кстати,
действительно легко отключаемо). Мне надо, чтобы
(trans '(0 0) 2 3) вернула (0 0).

Разумеется, я упрощаю условие задачи, т.к. и (trans ...)
не самоцель - это лишь одна из строк другой большой
функции.

Прошу прошения, если недостаточно четко сформулировал
свою проблему в первом посте...
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.10.2005, 14:54
#5
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


То что оно тебе выдает это координаты точки начала WCS(МСК) в модели на пространстве листа.
(trans '(0 0) 2 3) может выдать (0 0) только если начало WCS модели соответствующего видового окна окажется в начале WCS листа
ытя вне форума  
 
Автор темы   Непрочитано 14.10.2005, 15:26
#6
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Всем привет!

У... ёёё...

Да я как бы все это понимаю! Сделать только не получается.
Поэтому, давайте уж совсем конкретно.

1. Кто может сделать этот чертеж таким, чтобы он выглядел,
как сейчас, но (trans '(0 0) 2 3), набранный из пространства
листа вкладки ОА-ВЫПУСК, возвращал бы что-то близкое
к (0 0)?

2. Кто может (этого, собственно, я и добиваюсь) написать
список команд, приводящих чертеж к состоянию, описанному
в п. 1 ?

Поймите же, у меня есть подобные чертежи, в которых "все
нормально". Как привести к такому виду этот чертеж - понять
не могу. Ясно, что надо где-то и как-то менять ПСК, но как и
где (в каком пространстве)?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.10.2005, 15:42
#7
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


1. Как бя я сделал это руками:
Переместил (_move) бы окно вида в (0 0), используя в качестве базовой начало МСК этого окна.
2. см. п.1, используя точку полученную по (trans '(0 0) 2 3)
ытя вне форума  
 
Автор темы   Непрочитано 14.10.2005, 16:50
#8
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Привет!

Давайте сделаем так. Вот "правильный" файл.
В нем (trans '(0 0) 2 3) возвращает (4.77303 3.33758 0.0)
Это соответствует ожиданиям.

Задача: привести первоначальный файл к такому же состоянию
и рассказать мне, непонятливому, что же это в нем такое было. :-)

*.dwg -> *.zip
[ATTACH]1129294258.dwg[/ATTACH]
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 14.10.2005, 17:11
#9
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Цитата:
То что оно тебе выдает это координаты точки начала WCS(МСК) в модели на пространстве листа.
(trans '(0 0) 2 3) может выдать (0 0) только если начало WCS модели соответствующего видового окна окажется в начале WCS листа
Следуя такой логике в листе рисую линию из начала координат листа в полученную точку
Код:
[Выделить все]
(command "_line" '(0 0) (trans '(0 0) 2 3) "")
И вижу, что она вовсе не совпадает с началом мировой системы которое я наблюдаю во вьюпорте. Таким образом я вообще не понимаю, что за координату выдает (trans '(0 0) 2 3) ?
AY вне форума  
 
Непрочитано 14.10.2005, 17:16
#10
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Фиолетовым показал первоначальное положение видового окна
[ATTACH]1129295792.dwg[/ATTACH]
ытя вне форума  
 
Автор темы   Непрочитано 15.10.2005, 12:04
#11
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Всем привет!

Братцы, я что, действительно непонятно выражаюсь?
В принципе - допускаю, пятница все же как-никак... :-)

Еще раз - максимально четко:

1) Файл new-b.dwg преобразовывать не надо, он меня
полностью устраивает и приведен здесь лишь для того,
чтобы показать, "как оно выглядит, когда оно правильно".

2) Файл sit1.dwg и нужно преобразовать к виду файла
new-b.dwg. Согласитесь - они подобные. Тот же набор
форматок А3 и А4, созданный в пространстве модели
и отображаемый в пространство листа через видовой экран.

3) Самое главное. Выявить, почему (trans '(0 0) 2 3) в этих
файлах возвращает _резко_ разные значения.

4) Ну, это по-возможности, дать ряд команд, которыми можно
привести файл sit1.dwg к виду файла new-b.dwg. Почему
по-возможности? Думаю, что если я пойму причину, команды
подберу сам. :-)

5) Здесь приведена упрощенная задача-минимум. Задача
максимум - создание функции, которая, будучи вызвана
из некоей программы, _автоматически_ приводила бы
файл sit1.dwg к виду файла new-b.dwg.

Ну, вроде все разложил по полочкам... :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 15.10.2005, 21:53
#12
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Извиняюсь не внимательно прочитал "пятница все же как-никак".
Но то что я сделал с new-b.dwg. , можно сделать и с sit1.dwg.
ытя вне форума  
 
Непрочитано 17.10.2005, 09:58
#13
ытя


 
Регистрация: 23.09.2005
СПб
Сообщений: 428


Цитата:
Сообщение от ===AAA===
4) Ну, это по-возможности, дать ряд команд, которыми можно
привести файл sit1.dwg к виду файла new-b.dwg. Почему
по-возможности? Думаю, что если я пойму причину, команды
подберу сам. :-)
(command "_move" (car(entsel "выбери окно:"))""(trans '(0 0) 2 3) '(0 0)"")
ытя вне форума  
 
Непрочитано 17.10.2005, 13:08
#14
AY

webcad.pro
 
Регистрация: 06.01.2005
Московская обл.
Сообщений: 501


Можно попробовать двигать модель и вид во вьюпорте. Решение может сгодиться если вьюпорт один (равно как и лист в чертеже)
Код:
[Выделить все]
(defun test (/ obj tr-p1 tr-p2 model)

    (setq obj   (vlax-ename->vla-object (car (entsel "\nВыберите видовой экарн:")))
          tr-p1  (trans '(0 0) 2 3)
          tr-p2 (polar '(0 0)
                       (angle '(0 0) tr-p1)
                       (/ (distance '(0 0) tr-p1) (vla-get-CustomScale obj))
                )
          model (ssget "_X" '((410 . "Model")))
    )
    (command "_mspace" "_pan" "_non" tr-p2 "_non" '(0 0) "_pspace")

    (FOREACH x (SSNAMEX model)
        (vla-move
            (vlax-ename->vla-object (cadr x))
            (vlax-3d-point '(0 0))
            (vlax-3d-point tr-p2)
        )
    )
)
- запускать из листа, выбрать целевой вьюпорт, все слои должны быть открыты. Решение с передвижкой изображения в экране через command критики не выдерживает, но по другому у меня не получилось.
AY вне форума  
 
Автор темы   Непрочитано 18.10.2005, 11:34
#15
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Всем привет!

К сожалению, вынужден на время отложить этот вопрос,
т.к. уехал в отпуск и не могу даже проверить ваши
советы.

Сделаю это после отпуска и, ежели вопросы останутся,
"дерну" тему вверх. Хорошо?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 07.12.2005, 07:53
#16
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Всем привет!

Снова возвращаюсь к своему вопросу.

К сожалению, предложенный AY вариант тоже не подходит. :-(((

На первый взгляд, все хорошо, в пространстве листа все
выглядит, как надо (за исключением "чудного" отображения
нескольких лимитных сеток), но вот в пространстве модели
левый-нижний угол "форматки" оказывается смещенным из
точки 0,0 МСК.

А поскольку данный чертеж создавался программой (ею же
предполагается его корректировать и в дальнейшем), то
смещение примитивов по пространству модели не подходит -
программа этого не поймет...

Давайте зайдем с другого конца - попробуем создать новый
ЛИСТ, в котором все будет работать, как надо (см. образец).

Как это сделать? У меня пока не получилось... :-(((
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Автор темы   Непрочитано 09.12.2005, 08:00
#17
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Всем привет!

Ну что, братцы, не по зубам задачка оказалась? :-) Мне тоже. :-(

Ладно, сделаю последний заход. Предположим, функция
(tranc) в этом чертеже о какой-то причине глючит. Тогда
вопрос будет стоять так:

Как, стоя в файле SIT1.DWG на вкладке ОА-ВЫПУСК в
пространстве листа, программно узнать, на какую точку
этого самого пространства листа будет отображаться
нижний-левый угол "синей форматки".

"Глазами" видно, что это примерно (4.5 3.1). Как получить
эти цифры программно?
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 09.12.2005, 10:39
#18
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Как, стоя в файле SIT1.DWG на вкладке ОА-ВЫПУСК в
пространстве листа, программно узнать, на какую точку
этого самого пространства листа будет отображаться
нижний-левый угол "синей форматки".
Это как раз не сложно.
Код:
[Выделить все]
(cdr (assoc 12 (entget (car (entsel)))))
возвращает координаты центра видового экрана в пространстве модели. Исзмерив расстояние от этой точки до угла "синей форматки" в пространстве модели, и зная координаиы центра ыидового экпана в пространсве листа, можно вычислить искомое.
Лентяй вне форума  
 
Автор темы   Непрочитано 09.12.2005, 11:08
#19
===AAA===


 
Регистрация: 15.08.2005
г. Норильск
Сообщений: 627


Увы, не то... :-(((

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

Там за раз обрабатывается множество файлов. Конкретно
эта часть программы отвечает за настройку ЛИСТа для
печати, а именно, области печати.

На входе функция имеет точки углов набора форматок
пространства МОДЕЛИ (0 0) и (817 570). Нужно узнать,
куда они отобразятся в пространстве листа.

Функция (trans точка 2 3) - самое оно, но почему-то
в некоторых чертежах она отрабатывает неверно.

Нужно или найти причину, по которой она возвращает
не то, что от нее ожидают, или придумать другой
механизм (функцию), который бы работал верно.

Все, выдохся повторяться... :-)
__________________
Счастливо, Алексей!
===AAA=== вне форума  
 
Непрочитано 09.12.2005, 11:25
#20
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Вот я наваял для иллюстрации
Код:
[Выделить все]
(defun C:ff (/ msp vp ln ppt)
  (setq adoc (vla-get-activedocument (vlax-get-acad-object))
        util (vla-get-utility adoc)
        msp (vla-get-ModelSpace adoc))
  (vla-put-activespace adoc 0)
  (vla-put-mspace adoc :vlax-false)
  (vla-getentity util 'vp nil "Select Viewport")
  (vla-put-mspace adoc :vlax-true)
  (setq ln (vla-addLine msp (vlax-3d-point (cdr (assoc 12 (entget (vlax-vla-object->ename vp)))))
             (vla-getpoint util nil "\nSelect Point: "))
        ppt (polar (vlax-get vp 'Center) (vla-get-angle ln)
                   (* (vla-get-length ln) (vla-get-customscale vp))))
  (vla-delete ln) (vlax-release-object ln)
  (vla-put-mspace adoc :vlax-false)
  (print (strcat "\n PaperSpace Coordinates: " (vl-princ-to-string ppt)))
);end
Переделать в полностью автоматический режим. я думаю, несложно. Посижу, попробую.
Лентяй вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Непонятка с системами координат

Опции темы Поиск в этой теме
Поиск в этой теме:

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