Мне нужно что бы при выборе ПСК у меня выводились координаты в МСК, но в точке где я делаю выбор, она же смещается относительно ПСК и выводит координаты не мировой а пользовательской. Смог сделать так что бы все выводилось или в ПСК или в МСК, но скомбиноровать как мне надо(точка ставится в пск, но выводит данные в мск) пока не получается.Извини, но это какой-то бред. Если в двух словах, то что ты получаешь через Editor.GetPoint возвращается в ПСК(UCS). Если тебе нужно эту точку преобразовать в МСК(WCS), то нужно получить матрицу преобразования UCS->WCS при помощи Editor.CurrentUserCoordinateSystem и преобразовать по ней.
Может пригодиться - код Александра Ривилиса, которым я успешно пользуюсь уже очень давно:Это не мой код. Этот код из MGDDBG если мне не изменяет память.
Вот скажите мне: откуда у Вас этот новаторский подход, когда транзакция коммитится где-то в середине блока?Новаторский подход, в том и заключается что он новаторский, извиняюсь, уже поправил). Пытаюсь во всем разобраться сам , поэтому могу допустить много ошибок, есть моменты которые не до конца сам могу улавливать или знать. Тут закрыл ее в середине блока, так как подумал что получил то что мне надо в этой транзакции и можно ее закрыть, ошибок в программе не вылезало, соответственно продолжил писать дальше. Запомню на будущее как надо делать. :)
Извини, но это какой-то бред. Если в двух словах, то что ты получаешь через Editor.GetPoint возвращается в ПСК(UCS). Если тебе нужно эту точку преобразовать в МСК(WCS), то нужно получить матрицу преобразования UCS->WCS при помощи Editor.CurrentUserCoordinateSystem и преобразовать по ней.Я плохо объяснил наверное). Может конечно сам неправильно понимаю, но я хочу чтобы точка получаемая через GetPoint оставалась в UCS, и выводилась где пользователь кликает мышью, а подписи координат выводили в текстовый примитив значение WCS по X и Y в этом месте. Спасибо за наводку с Editor.CurrentUserCoordinateSystem постараюсь разобраться.
Александр Пекшев aka ModisСпасибо за код, постараюсь понять как мне лучше выполнить преобразования )
Тут закрыл ее в середине блока, так как подумал что получил то что мне надо в этой транзакции и можно ее закрытьМысль верная, а вот исполнение - нет. Надо ее тут же и закрывать, т.е. ставить закрывающую скобку.
Мысль верная, а вот исполнение - нет. Надо ее тут же и закрывать, т.е. ставить закрывающую скобку.В ответе выше добавил почему там размещаю Commit ) так-то это не оправдание конечно)
я хочу чтобы точка получаемая через GetPoint оставалась в UCSЕсли ты не будешь её менять, то она останется в UCS.
и выводилась где пользователь кликает мышьюЧто значит выводилась? Точка никуда не выводится. Или ты имеешь в виду добавить примитив Точка (DBPoint) в базу чертежа? Тогда добавлять нужно с координатами в WCS.
В принципе, буду благодарен если просто скинете пару ссылок где можно почитать про системы координат и как с ними взаимодействовать правильно через C#.http://spiderinnet1.typepad.com/blog/2013/05/autocad-net-transform-picked-point-from-current-ucs-to-wcs.html
Ладно, заканчиваю оффтоп.Спасибо! Надеюсь разберусь! )
Или ты имеешь в виду добавить примитив Точка (DBPoint) в базу чертежа? Тогда добавлять нужно с координатами в WCS.Нет, программа должна вставлять 2 текстовых примитива в место клика мышью(получаем через GetPoint), в одном примитиве отображается Х клика, в другом У клика, но оба примитива всегда выводят значение координат в WCS, вне зависимости от того какая система координат установлена. Может в данном случае лучше всего при начале выполнения программы устанавливать в чертеже WCS а по завершении возвращать пользовательскую UCS. Вообщем сейчас постараюсь разобраться с ссылками что дал Дмитрий, а как что-то сделаю еще раз выложу сюда готовый вариант того что получится.
Может в данном случае лучше всего при начале выполнения программы устанавливать в чертеже WCS а по завершении возвращать пользовательскую UCS.Зачем? GetPoint тебе даёт точку в UCS. Преобразовываешь её в WCS и записываешь в текстовые примитивы X и Y преобразованной точки. Я не понимаю в чем проблема?
Хотел только уточнить, создание всех примитивов автокада происходит в WCS?Почти. Во всяком случае точно не в UCS. Есть еще понятие OCS (система координат объекта). Её использует полилиния.
А GetPoint и GetEntity получают в свою очередь результат в UCS правильно я понимаю?Да. Если конечно речь идёт о полученной от пользователя точке, так как GetEntity возвращает не только точку, но и ObjectId примитива, который от системы координат не зависит.
А какой смысл в строках с 19 по 29? Еще раз, но более сложным способом получить то, что и так получено в 18 строке? :)Это он обратную матрицу получает. Зачем - я не смотрел.
Это он обратную матрицу получает. Зачем - я не смотрел.Да, невнимательно посмотрел.
Checking the code there more times, got more confused about why the simple task had to be done that way, which is redundant, inefficient, and error prone. In fact, as demonstrated hundreds of times before in our posts, a single line of code can transform the picked point, ppr.Value, from the current UCS to the WCS so easily and reliably.И еще ниже - более простой код преобразования точки из UCS в WCS.
И еще ниже - более простой код преобразования точки из UCS в WCS.Да действительно, не полностью разобрался. Спасибо еще раз за разъяснения, постараюсь все учесть и быть внимательнее!
сделать OFFSET еще одной линии, на видео зеленая, следует просто повторить код OFFSET, либо есть более красивый ход.Вопрос не понял.
но это выдает ошибку.Какую?
наличие недопустимых аргументовВсё правильно. DBObjectCollection.Add добавляет элементы по одному. Т.е. добавить DBObjectCollection в DBObjectCollection при помощи метода Add ты не можешь. Добавляй их по одному элементу: