Стоит еще и установить Editor.CurrentUserCoordinateSystem в WCSИ как же он это сделает, если редактирует Database не создавая при этом Document?
И как же он это сделает, если редактирует Database не создавая при этом Document?Ага. Интересный вопрос. Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.
Александр, дело в том, что я открываю этот файл с помощью Database.ReadDwgFile, документа у меня нет, ведь так?Объясни зачем ты меняешь систему координат. Может можно обойтись другими средствами.
Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.В отладчике показывается именно оно. Кроме того, на всякий случай, я выше рекомендовал использовать
Может можно обойтись другими средствами.А если нельзя? Предположим, что нужно программно систему координат, для некоторого видового экрана, установить в WCS. :) Можно и перефразировать вопрос, задав его, что называется в лоб: почему SetUcsToWorld не работает должным образом? Если для корректной работы обозначенного метода требуется подправить код, то какие именно правки нужны?
Думаю что тут еще играет роль UCSFOLLOW.Хотелось бы обойтись без этого, тем более, что в данном случае оно не срабатывает.
Объясни зачем ты меняешь систему координат. Может можно обойтись другими средствами.Подготовка заданий смежникам, среди прочей обработки в модели UCS должна быть сброшена в WCS. Хотел обрабатывать файл в фоне, без мельтешения. Пока приходится ради ucs пользоваться editor'ом.
почему SetUcsToWorld не работает должным образом? Если для корректной работы обозначенного метода требуется подправить код, то какие именно правки нужны?Ведь в SDK написано
This function sets the UCS for the view or viewport table record to the world UCS.И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!
И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!Фраза не пустая. Почувствуй разницу между "установить МСК для видового порта" и "установить МСК для чертежа". В редакторе AutoCAD есть метод Editor.UpdateTiledViewportsFromDatabase, который приводит в соответствие видовой порт с базой и соответственно и ПСК должна стать такой, как у активного вида. Но как сделать это без загрузки в редактор - я пока не знаю.
Александр, мне не нужно устанавливать новую МСК для чертежа.А это и принципиально невозможно. МСК она и в Африке МСК - она единая и единственная. И поэтому новой быть не может.
В моем понимании, это именно "Установить ПСК видового экрана модели в МСК"Нет ПСК видового экрана и ПСК чертежа - это две совершенно разных вещи. Ты сам смог в этом убедится. У твоего видового экрана действительно ПСК стало равным МСК, но это никак не повлияло на ПСК чертежа.
Почувствуй разницу между "установить МСК для видового порта" и "установить МСК для чертежа".
Как вариант вижу только добавить в автозагрузку UpdateTiledViewportsFromDatabase().Я все-так рассчитываю, что мы что-то упустили и ADN DevHelp нам поможет. Ну или точно скажут, что это невозможно.
Ну или точно скажут, что это невозможно.Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...
Это работает для текущего чертежа в редакторе AutoCAD и никак не связано с Database для чертежа, который не открыт в редакторе.Ну тогда возникает законный вопрос: как в Database, открытой обозначенным выше способом, получить текущий видовой экран (Viewport) на листе?
Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.
Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.
Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.Мы говорим на разных языках? Я объясняю, что ты неправильно понял смысл этого метода. Он меняет установки UCS для ViewportTableRecord. И всё! И так и должно быть. А вот как установить UCS в WCS для Database - это уже другой вопрос, на который ответа мы пока не знаем.
Хотел обрабатывать файл в фоне, без мельтешения. Пока приходится ради ucs пользоваться editor'ом.Но кроме всего прочего теперь уже действительно интересноВторой пункт остается открытым, а по первому - если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exe.
если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exeмне, в данном случае, не повезло. :)
насколько я помню (http://bushman-andrey.blogspot.ru/2012/06/accoreconsoleexe-autocad-2013.html), accoreconsole в 2013-м был годен только на "Hello World".по большому секрету говорю - консоль 2013 (про 14 не знаю) от демоверсии продолжает успешно работать и после срока Х без каких-либо посторонних телодвижений, а т.к. у автодеска не было условия стереть когда кончиться срок ознакомления - то я ее даже с официальной точки зрения могу использовать и в хвост и в гриву
насколько я помню, accoreconsole в 2013-м был годен только на "Hello World".Он годен для пакетной обработки, а то что у него проблемы с русскими буквами - это второй вопрос. И думаю, что в данном случае Дима прав.
Он годен для пакетной обработки
AcCoreConsole.exe не умеет работать с экранированными символами, которые присутствуют в файлах скриптов (SCR файлы).
а то что у него проблемы с русскими буквами - это второй вопросА в пакетной обработке русские символы маловероятны? :) Имхо - для славян это как раз-таки первый, основной вопрос, т.к. вероятность возникновения обозначенного "счастья" достаточно велика.
Зная эту "особенность" можно обойтись без кириллицы. Ну и мы в разделе программирование, а точнее AutoCAD .NET API. Так что я имел в виду не скриптовую обработку, а .NET-приложение, работающее в accoreconsole с кучей dwg-файлов.В пакетной обработке могут быть использованы .NET-плагины, написанные ранее (зачастую именно так и происходит). А поскольку плагины пишутся для русскоязычных пользователей, то и сообщения в этих плагинах выводятся на русском. Это при написании новых можно будет учитывать
"На данный момент это невозможно в существующих API. Послан запрос на добавление такой функциональности в будущих версиях AutoCAD. Пока рекомендуем пользоваться AccoreConsole.exe и scr-файлом:"
_UCS
_SAVE
Послан запрос на добавление такой функциональности в будущих версиях AutoCAD.А это вообще даже не смешно, причём уже давным-давно...
Продолжу мельтешитьты плохо читаешь??? Юзай скрипты (даже уже не autolisp)!!! Нефиг на .net писать :)
Александр, спасибо за участие!в данном случае "участие" сродни "сочувствию"... :)
Продолжу мельтешитьВ данном случае это бессмысленно, так как ADN DevHelp подтвердили отстутствие возможности это сделать непосредственно из .NET API.
Пока рекомендуем пользоваться AccoreConsole.exe и scr-файломОни похоже ответ на нашем форуме почитали...
отстутствие возможности это сделать непосредственно из .NET API.а из native C++?
а из native C++?Аналогично. Т.е. это API является внутренним и его невозможно использовать ни из ObjectARX, ни из .NET API.
Там тоже всё печально?Тоже. Сегодня получил подтверждение от Art Cooney, что нет средств установки ПСК для Database открытого через Database.ReadDwgFile, т.е. установка ПСК возможна только для открытого в редакторе AutoCAD документа. Отсутствие такой возможности обнаружилось около года назад и в существующих версиях AutoCAD этой возможности не будет. Просто до прошлого года никто о такой возможности не спрашивал. Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось. Никакого недокументированного API для этого тоже нет.
Отсутствие такой возможности обнаружилось около года назадОтсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.
Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось.Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.
Отсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.Даже если сделают эту возможность (установку ucs), генерировать листы в файле, отрытом с помощью ReadDwgFile не получится (у меня не получалось настроить листы без перехода LayoutManager'ом на настраиваемый лист, правда, я не слишком глубоко копал в этом направлении)
Значит никто никогда не делал программной генерации таких оформленных листовНе делал через ARX. А через него вообще, относительно других методов взаимодействия, сделанно не много ввиду чрезмерной низкоуровности API (какая-то старая книжка была, где вобще рассматривался вариант прямого программирования DXF файла - так вот ARX не далеко ушел по уровню). Зачем при создании .Net интерфейса (как популярного направления программирования) автодесковцы решили практически "втупую" обернуть именно ARX модель, лично я кроме как ленью (типо просили - нате) объяснить не могу - ИХМО модель эта ужастна по всем параметрам (ну ладно быстродействие еще более-менее), но остальные поддерживаемые диалекты уже морально устаревают - да и самая беда - не поддерживают их толком. Вот и получается что дали, то и ешь. Как результат - при появлении популярного .Net'a и выясняется, через 15 лет, что чего-то - для решения элементарной задачи - просто нету.
Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.А причем тут UCS в листах? Ты с видами не путаешь?
А причем тут UCS в листах? Ты с видами не путаешь?Нет, не путаю. Во первых, я же выше сослался на конкретный код, обозначенный мною в #21 - там я оперировал объектом Viewport. Во вторых - я вроде чётко обозначил то, что имею в виду:
оформленных листов, в видовых экранах которых нужно было настраивать системы координатView != Viewport.