Управление ucs в фоне

Автор Тема: Управление ucs в фоне  (Прочитано 24283 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Управление ucs в фоне
« : 26-02-2014, 10:07:07 »
При отрытии БД чертежа через Database.ReadDwgFile не получается сбросить UCS модели в WCS.
Код - C# [Выбрать]
  1. Database db= new Database(false, true);
  2. db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null);
  3. using (Transaction tr = db.TransactionManager.StartTransaction())
  4. {
  5.         ViewportTable vt = (ViewportTable)tr.GetObject(db.ViewportTableId, OpenMode.ForRead);
  6.         ViewportTableRecord vtr = (ViewportTableRecord)tr.GetObject(vt["*Active"], OpenMode.ForWrite);
  7.         vtr.SetUcsToWorld();
  8.         tr.Commit();
  9. }
Кстати, не получается даже если пытаться так сделать в текущем документе.
Алексей

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #1 : 26-02-2014, 10:33:46 »
Код - C# [Выбрать]
  1. db.SaveAs(path, Db.DwgVersion.Current);
:)

AutoCAD 2014 SP1. Система координат успешно установилась в WCS. Курсор - вот он действительно остался ориентированным по предыдущей, пользовательской системе координат (я устанавливал по объекту, развёрнутой на некоторый угол).

UPD

Хотя стоп... После отработки указанного выше кода, автокад показывает пиктограмму так, как будто установлена WCS, но если попытаться начертить полилинию, задав в качестве начальной точки 0,0, то получаем это (проверял в 2009-м SP3 и 2014-м SP1):



Т.е. несоответствие отображаемой пиктограммы текущей системе координат.
« Последнее редактирование: 26-02-2014, 11:17:50 от Андрей Бушман »

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #2 : 26-02-2014, 10:40:24 »
Андрей Бушман, SaveAs делается, конечно ))
ыыыыыыы. А теперь сработало! Чего я забыл до этого прописать - история умалчивает...
« Последнее редактирование: 26-02-2014, 15:11:49 от bargool »
Алексей

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #3 : 26-02-2014, 10:43:22 »
посмотри выше мой UPD.

Вместо "*Active" лучше используй
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices.ViewportActiveName

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #4 : 26-02-2014, 10:56:40 »
за ViewportActiveName спасибо.
Апдейт подтверждаю. иконка UCS делает вид, что она WCS, но по факту UCS остается на месте (кстати, один раз было всё нормально, а несколько раз даже иконка никуда не сдвигалась - теперь, правда не повторить)
Алексей

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #5 : 26-02-2014, 16:16:43 »
Думаю что тут еще играет роль UCSFOLLOW.
И еще. Изменения в ViewportTableRecord напрямую не отражаются в редакторе. Стоит еще и установить Editor.CurrentUserCoordinateSystem в WCS
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #6 : 26-02-2014, 16:21:34 »
Стоит еще и установить Editor.CurrentUserCoordinateSystem в WCS
И как же он это сделает, если редактирует Database не создавая при этом Document?
Думаю, что пара-тройка строчек кода, демонстрирующих решение обозначенной проблемы, вполне бы устроили "отца Российской Демократии" (с) ;)

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #7 : 26-02-2014, 16:23:29 »
Александр, дело в том, что я открываю этот файл с помощью Database.ReadDwgFile, документа у меня нет, ведь так?
Алексей

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #8 : 26-02-2014, 16:24:01 »
И как же он это сделает, если редактирует Database не создавая при этом Document?
Ага. Интересный вопрос. Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #9 : 26-02-2014, 16:25:09 »
Александр, дело в том, что я открываю этот файл с помощью Database.ReadDwgFile, документа у меня нет, ведь так?
Объясни зачем ты меняешь систему координат. Может можно обойтись другими средствами.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #10 : 26-02-2014, 16:25:58 »
Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.
В отладчике показывается именно оно. Кроме того, на всякий случай, я выше рекомендовал использовать
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices.ViewportActiveName

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #11 : 26-02-2014, 16:26:37 »
Может можно обойтись другими средствами.
А если нельзя? Предположим, что нужно программно систему координат, для некоторого видового экрана, установить в WCS. :) Можно и перефразировать вопрос, задав его, что называется в лоб: почему SetUcsToWorld не работает должным образом? Если для корректной работы обозначенного метода требуется подправить код, то какие именно правки нужны?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #12 : 26-02-2014, 16:57:15 »
Я тестировал так:
Код - C# [Выбрать]
  1. // © Andrey Bushman, 2014
  2. // Тестирование метода ViewportTableRecord.SetUcsToWorld().
  3. // Обсуждение здесь: http://adn-cis.org/forum/index.php?topic=559.0
  4. using System;
  5. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  6. using App = Autodesk.AutoCAD.ApplicationServices;
  7. using Db = Autodesk.AutoCAD.DatabaseServices;
  8. using Ed = Autodesk.AutoCAD.EditorInput;
  9. using Gm = Autodesk.AutoCAD.Geometry;
  10. using Rt = Autodesk.AutoCAD.Runtime;
  11.  
  12. [assembly: Rt.CommandClass(typeof(AndreyBushman.Samples.TestClass))]
  13.  
  14. namespace AndreyBushman.Samples {
  15.  
  16.         public sealed class TestClass {
  17.  
  18.                 [Rt.CommandMethod("test", Rt.CommandFlags.Session)]
  19.                 public static void Test() {
  20.                         const String path = @"C:\test\test.dwg"; // Предполагается, что DWG присутствует
  21.                         Db.Database prevDb = Db.HostApplicationServices.WorkingDatabase;
  22.                         Db.Database db = new Db.Database(false, true);
  23.                         db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null);
  24.                         db.CloseInput(true); // Пробовал и без этой строки, но результат тот же
  25.                         Db.HostApplicationServices.WorkingDatabase = db;
  26.                         using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
  27.                                 Db.ViewportTable vt = (Db.ViewportTable)tr.GetObject(db.ViewportTableId,
  28.                                         Db.OpenMode.ForRead);
  29.                                 Db.ViewportTableRecord vtr = (Db.ViewportTableRecord)tr.GetObject(
  30.                                         vt[Db.SymbolUtilityServices.ViewportActiveName], Db.OpenMode.ForWrite);
  31.  
  32.                                 vtr.UcsFollowMode = true; // допустим, пусть разворачивает вид параллельно UCS  (хотя мне это и не надо)
  33.                                 vtr.SetUcsToWorld(); // не сработало: не назначена WCS
  34.                                 vtr.SetViewDirection(Db.OrthographicView.TopView); // пробовал даже так                                                 
  35.  
  36.                                 tr.Commit();
  37.                         }
  38.                         Db.HostApplicationServices.WorkingDatabase = prevDb;
  39.                         db.SaveAs(path, Db.DwgVersion.Current);
  40.                 }
  41.         }
  42. }
« Последнее редактирование: 26-02-2014, 17:30:45 от Андрей Бушман »

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #13 : 26-02-2014, 17:11:10 »
Думаю что тут еще играет роль UCSFOLLOW.
Хотелось бы обойтись без этого, тем более, что в данном случае оно не срабатывает.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #14 : 26-02-2014, 19:03:23 »
В действительности vtr.SetUcsToWorld(); устанавливает WCS в качестве системы координат для вида, но не устанавливает её текущей для чертежа. Все методы для установки UCS для Database (кроме Database.UcsBase) read-only. В ObjectARX ситуация таже. Есть недокументированный класс AcDbHeader, в котором есть методы setUcsXXX, и которые похоже используются внутри AutoCAD для установки системы координат при запуске команды _UCS.
Я задал вопрос в ADN DevHelp возможно ли вообще установить текущей системой координат WCS для чертежа, который не открыт в редакторе AutoCAD. Подождем ответа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #15 : 27-02-2014, 09:21:04 »
Объясни зачем ты меняешь систему координат. Может можно обойтись другими средствами.
Подготовка заданий смежникам, среди прочей обработки в модели UCS должна быть сброшена в WCS. Хотел обрабатывать файл в фоне, без мельтешения. Пока приходится ради ucs пользоваться editor'ом.
Но кроме всего прочего теперь уже действительно интересно
почему SetUcsToWorld не работает должным образом? Если для корректной работы обозначенного метода требуется подправить код, то какие именно правки нужны?
Ведь в SDK написано
Цитировать
This function sets the UCS for the view or viewport table record to the world UCS.
И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!
Алексей

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #16 : 27-02-2014, 10:05:10 »
И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!
Фраза не пустая. Почувствуй разницу между "установить МСК для видового порта" и "установить МСК для чертежа". В редакторе AutoCAD есть метод Editor.UpdateTiledViewportsFromDatabase, который приводит в соответствие видовой порт с базой и соответственно и ПСК должна стать такой, как у активного вида. Но как сделать это без загрузки в редактор - я пока не знаю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #17 : 27-02-2014, 10:18:57 »
Александр, мне не нужно устанавливать новую МСК для чертежа. Мне нужно, что бы пользователь открыл модель получившегося файла и увидел, что там ПСК установлена в МСК (менять расположение  самой МСК я не имею права).
В моем понимании, это именно "Установить ПСК видового экрана модели в МСК"
Алексей

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #18 : 27-02-2014, 10:25:14 »
Александр, мне не нужно устанавливать новую МСК для чертежа.
А это и принципиально невозможно. МСК она и в Африке МСК - она единая и единственная. И поэтому новой быть не может.

В моем понимании, это именно "Установить ПСК видового экрана модели в МСК"
Нет ПСК видового экрана и ПСК чертежа - это две совершенно разных вещи. Ты сам смог в этом убедится. У твоего видового экрана действительно ПСК стало равным МСК, но это никак не повлияло на ПСК чертежа.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #19 : 27-02-2014, 10:58:03 »
Почувствуй разницу между "установить МСК для видового порта" и "установить МСК для чертежа".

Давайте почувствуем разницу вместе... Итак, поехали:

Код - C# [Выбрать]
  1. // © Andrey Bushman, 2014
  2. // Тестирование метода ViewportTableRecord.SetUcsToWorld().
  3. // Обсуждение здесь: http://adn-cis.org/forum/index.php?topic=559.0
  4. using System;
  5. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  6. using Ap = Autodesk.AutoCAD.ApplicationServices;
  7. using Db = Autodesk.AutoCAD.DatabaseServices;
  8. using Ed = Autodesk.AutoCAD.EditorInput;
  9. using Gm = Autodesk.AutoCAD.Geometry;
  10. using Rt = Autodesk.AutoCAD.Runtime;
  11.  
  12. [assembly: Rt.CommandClass(typeof(AndreyBushman.Samples.TestClass))]
  13.  
  14. namespace AndreyBushman.Samples {
  15.  
  16.         public sealed class TestClass {
  17.  
  18.                 [Rt.CommandMethod("test", Rt.CommandFlags.Session)]
  19.                 public static void Test() {
  20.                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor;
  21.                         // Предполагается, что DWG присутствует, в нём один лист (он же текущий)
  22.                         // и на этом листе текущим является единственный видовой экран.
  23.                         const String path = @"C:\test\test.dwg";
  24.                         Db.Database prevDb = Db.HostApplicationServices.WorkingDatabase;
  25.                         Db.Database db = new Db.Database(false, true);
  26.                         db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null);
  27.                         db.CloseInput(true);
  28.                         Db.HostApplicationServices.WorkingDatabase = db;
  29.                         using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
  30.                                 ed.WriteMessage("Current layout name: {0}\n", Db.LayoutManager.Current.CurrentLayout);
  31.                                 ed.WriteMessage("Current viewport name: {0}\n", Db.SymbolUtilityServices.ViewportActiveName);
  32.                                 Db.ViewportTable vt = (Db.ViewportTable)tr.GetObject(db.ViewportTableId,
  33.                                         Db.OpenMode.ForRead);
  34.                                 Db.ViewportTableRecord vtr = (Db.ViewportTableRecord)tr.GetObject(
  35.                                         vt[Db.SymbolUtilityServices.ViewportActiveName], Db.OpenMode.ForWrite);
  36.  
  37.                                 vtr.SetUcsToWorld(); // не сработало: не назначена WCS                           
  38.                                 tr.Commit();
  39.                         }
  40.                         Db.HostApplicationServices.WorkingDatabase = prevDb;
  41.                         db.SaveAs(path, Db.DwgVersion.Current);
  42.                 }
  43.         }
  44. }
  45.  

Как обозначено в комментариях, в файле test.dwg текущим является некоторый видовой экран на листе. Однако и в этом случае не срабатывает SetUcsToWorld (вообще никаких изменений не наблюдаю). Может я в коде чего не так сделал? Тестовый файл прилагается.

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Управление ucs в фоне
« Ответ #20 : 27-02-2014, 11:47:20 »
По моему ошибка (недочет) не в этом api, а во время открытия файла в редакторе, если открыв такой файл прыгуть лист-модель и обратно - то UCS редактора придет в соответствие с db, причем если просто запустить _regenall - не помогает. Как вариант вижу только добавить в автозагрузку UpdateTiledViewportsFromDatabase().
з.ы. автокад ИХМО вобще слишком много ненужного кэширует, при сохранении файла - я понимаю по работе это существенно влияет на скорость процесса, но для сохранения в файл - у него явная избыточность - что иногда и приводит к таким противоречиеям.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #21 : 27-02-2014, 12:33:31 »
Я попробовал вызывать SetUcsToWorld не у ViewportTableRecord, а у Viewport. Вообще, поскольку обозначенный метод присутствует у обоих классов, то он должен работать, иначе нет смысла в его существовании.

Код - C# [Выбрать]
  1. // © Andrey Bushman, 2014
  2. // Тестирование метода ViewportTableRecord.SetUcsToWorld().
  3. // Обсуждение здесь: http://adn-cis.org/forum/index.php?topic=559.0
  4. using System;
  5. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  6. using Ap = Autodesk.AutoCAD.ApplicationServices;
  7. using Db = Autodesk.AutoCAD.DatabaseServices;
  8. using Ed = Autodesk.AutoCAD.EditorInput;
  9. using Gm = Autodesk.AutoCAD.Geometry;
  10. using Rt = Autodesk.AutoCAD.Runtime;
  11.  
  12. [assembly: Rt.CommandClass(typeof(AndreyBushman.Samples.TestClass))]
  13.  
  14. namespace AndreyBushman.Samples {
  15.  
  16.         public sealed class TestClass {
  17.  
  18.                 [Rt.CommandMethod("test", Rt.CommandFlags.Session)]
  19.                 public static void Test() {
  20.                         Ed.Editor ed = cad.DocumentManager.MdiActiveDocument.Editor;
  21.                         // Предполагается, что DWG присутствует, в нём один лист (он же текущий)
  22.                         // и на этом листе текущим является единственный видовой экран.
  23.                         const String path = @"C:\test\test.dwg";
  24.                         Db.Database prevDb = Db.HostApplicationServices.WorkingDatabase;
  25.                         Db.Database db = new Db.Database(false, true);
  26.                         db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null);
  27.                         db.CloseInput(true);
  28.                         Db.HostApplicationServices.WorkingDatabase = db;
  29.                         using (Db.Transaction tr = db.TransactionManager.StartTransaction()) {
  30.                                 Db.ViewportTable vt = (Db.ViewportTable)tr.GetObject(db.ViewportTableId,
  31.                                         Db.OpenMode.ForRead);
  32.                                 Db.ViewportTableRecord vtr = (Db.ViewportTableRecord)tr.GetObject(
  33.                                         vt[Db.SymbolUtilityServices.ViewportActiveName], Db.OpenMode.ForWrite);
  34.  
  35.                                 Db.Layout layout = tr.GetObject(Db.LayoutManager.Current.GetLayoutId(
  36.                                         Db.LayoutManager.Current.CurrentLayout), Db.OpenMode.ForWrite) as Db.Layout;
  37.                                 layout.LayoutName += "+";
  38.  
  39.                                 // Для одного и того же файла я получаю здесь то 2, то 1 в разных сеансах работы. Почему?
  40.                                 Int16 cvportIndex = (Int16)cad.GetSystemVariable("CVPORT");
  41.                                 // Здесь количество элементов всегда 2
  42.                                 Db.ObjectIdCollection ids = layout.GetViewports();
  43.  
  44.                                 Db.Viewport vp = tr.GetObject(ids[1], // пока задал 1 вместо cvportIndex
  45.                                         Db.OpenMode.ForWrite) as Db.Viewport;
  46.  
  47.                                 Boolean vpLocked = vp.Locked;
  48.                                 vp.Locked = false;
  49.                                 // Меняю цвет видового экрана, с которым работаю
  50.                                 vp.Color = Autodesk.AutoCAD.Colors.Color.FromColor(System.Drawing.Color.Red);
  51.                                 vp.SetUcsToWorld(); // это работает
  52.                                 vp.Locked = vpLocked;
  53.  
  54.                                 // vtr.SetUcsToWorld(); // это не работает
  55.  
  56.                                 ed.WriteMessage("Current layout name: {0}\n", Db.LayoutManager.Current.CurrentLayout);
  57.                                 ed.WriteMessage("Current viewport name: {0}\n", Db.SymbolUtilityServices.ViewportActiveName);
  58.  
  59.                                 tr.Commit();
  60.                         }
  61.                         Db.HostApplicationServices.WorkingDatabase = prevDb;
  62.                         db.SaveAs(path, Db.DwgVersion.Current);
  63.                 }
  64.         }
  65. }

1. Прошу обратить внимание на блок кода в строках 39-42.

2. Если по выполнении приведённого в этом сообщении кода открыть файл test.dwg и не производя зуммирования попытаться выполнить команду pline, указав в качестве базовой точки координаты 0,0, то получаем то, что показано на 1-й картинке (обратите внимание на ориентацию курсора). Но если сначала пошевелить колёсиком мышки, тем самым выполнив предварительное зуммирование, то вид обновляется и дальнейший вызов pline 0,0 выполняется корректно: см. 2-ю картинку.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #22 : 27-02-2014, 12:34:28 »
Как вариант вижу только добавить в автозагрузку UpdateTiledViewportsFromDatabase().
Я все-так рассчитываю, что мы что-то упустили и ADN DevHelp нам поможет. Ну или точно скажут, что это невозможно.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #23 : 27-02-2014, 12:53:16 »
Ну или точно скажут, что это невозможно.
Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #24 : 27-02-2014, 12:53:57 »
Код - C# [Выбрать]
  1. Int16 cvportIndex = (Int16)cad.GetSystemVariable("CVPORT");
Это работает для текущего чертежа в редакторе AutoCAD и никак не связано с Database для чертежа, который не открыт в редакторе.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #25 : 27-02-2014, 12:55:55 »
Это работает для текущего чертежа в редакторе AutoCAD и никак не связано с Database для чертежа, который не открыт в редакторе.
Ну тогда возникает законный вопрос: как в Database, открытой обозначенным выше способом, получить текущий видовой экран (Viewport) на листе?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #26 : 27-02-2014, 12:56:15 »
Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...
Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #27 : 27-02-2014, 12:58:05 »
Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.
Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #28 : 27-02-2014, 13:10:47 »
Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.
Мы говорим на разных языках? Я объясняю, что ты неправильно понял смысл этого метода. Он меняет установки UCS для ViewportTableRecord. И всё! И так и должно быть. А вот как установить UCS в WCS для Database - это уже другой вопрос, на который ответа мы пока не знаем.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Управление ucs в фоне
« Ответ #29 : 27-02-2014, 14:49:02 »
Хотел обрабатывать файл в фоне, без мельтешения. Пока приходится ради ucs пользоваться editor'ом.Но кроме всего прочего теперь уже действительно интересно
Второй пункт остается открытым, а по первому - если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exe.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #30 : 27-02-2014, 14:55:14 »
если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exe
мне, в данном случае, не повезло. :)

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Управление ucs в фоне
« Ответ #31 : 27-02-2014, 15:01:56 »
по большому секрету говорю - консоль 2013 (про 14 не знаю) от демоверсии продолжает успешно работать и после срока Х без каких-либо посторонних телодвижений, а т.к. у автодеска не было условия стереть когда кончиться срок ознакомления - то я ее даже с официальной точки зрения могу использовать и в хвост и в гриву

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #32 : 27-02-2014, 15:25:19 »
по большому секрету говорю - консоль 2013 (про 14 не знаю) от демоверсии продолжает успешно работать и после срока Х без каких-либо посторонних телодвижений, а т.к. у автодеска не было условия стереть когда кончиться срок ознакомления - то я ее даже с официальной точки зрения могу использовать и в хвост и в гриву
насколько я помню, accoreconsole в 2013-м был годен только на "Hello World".

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #33 : 27-02-2014, 15:31:16 »
насколько я помню, accoreconsole в 2013-м был годен только на "Hello World".
Он годен для пакетной обработки, а то что у него проблемы с русскими буквами - это второй вопрос. И думаю, что в данном случае Дима прав.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #34 : 27-02-2014, 15:35:22 »
К сожалению, мне надобно и на 2013 и на 2014. А пока, в ожидании ответа от ADN DevHelp, продолжу мельтешить  :)
Алексей

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #35 : 27-02-2014, 15:35:35 »
Он годен для пакетной обработки

Отвечу своей же цитатой:
Цитата: Андрей Бушман
AcCoreConsole.exe не умеет работать с экранированными символами, которые присутствуют в файлах скриптов (SCR файлы).

а то что у него проблемы с русскими буквами - это второй вопрос
А в пакетной обработке русские символы маловероятны? :) Имхо - для славян это как раз-таки первый, основной вопрос, т.к. вероятность возникновения обозначенного "счастья" достаточно велика.
« Последнее редактирование: 27-02-2014, 15:45:52 от Андрей Бушман »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #36 : 27-02-2014, 15:41:16 »
Зная эту "особенность" можно обойтись без кириллицы. Ну и мы в разделе программирование, а точнее AutoCAD .NET API. Так что я имел в виду не скриптовую обработку, а .NET-приложение, работающее в accoreconsole с кучей dwg-файлов.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #37 : 27-02-2014, 15:50:55 »
Зная эту "особенность" можно обойтись без кириллицы. Ну и мы в разделе программирование, а точнее AutoCAD .NET API. Так что я имел в виду не скриптовую обработку, а .NET-приложение, работающее в accoreconsole с кучей dwg-файлов.
В пакетной обработке могут быть использованы .NET-плагины, написанные ранее (зачастую именно так и происходит). А поскольку плагины пишутся для русскоязычных пользователей, то и сообщения в этих плагинах выводятся на русском. Это при написании новых можно будет учитывать существующие баги "особенности"... А вот с уже написанными - тут, что называется "бядаааа".

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #38 : 28-02-2014, 17:07:41 »
Получил ответ из ADN DevHelp:
Цитировать
"На данный момент это невозможно в существующих API. Послан запрос на добавление такой функциональности в будущих версиях AutoCAD. Пока рекомендуем пользоваться  AccoreConsole.exe и scr-файлом:"
_UCS

_SAVE

P.S.: ... No Comments ...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #39 : 28-02-2014, 17:10:05 »
Я постараюсь воздержаться от нецензурных комментариев...

Цитировать
Послан запрос на добавление такой функциональности в будущих версиях AutoCAD.
А это вообще даже не смешно, причём уже давным-давно...

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #40 : 28-02-2014, 17:13:27 »
 ;D
Продолжу мельтешить
Александр, спасибо за участие!
Алексей

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #41 : 28-02-2014, 17:14:32 »
Продолжу мельтешить
ты плохо читаешь??? Юзай скрипты (даже уже не autolisp)!!! Нефиг на .net писать :)
Цитировать
Александр, спасибо за участие!
в данном случае "участие" сродни "сочувствию"... :)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #42 : 28-02-2014, 17:16:44 »
Продолжу мельтешить
В данном случае это бессмысленно, так как ADN DevHelp подтвердили отстутствие возможности это сделать непосредственно из .NET API.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Управление ucs в фоне
« Ответ #43 : 28-02-2014, 17:17:31 »
Пока рекомендуем пользоваться  AccoreConsole.exe и scr-файлом
Они похоже ответ на нашем форуме почитали...
то Александр - bargool под мельтешить имеет в виду экраном, а не поиском

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #44 : 28-02-2014, 17:17:53 »
отстутствие возможности это сделать непосредственно из .NET API.
а из native C++?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #45 : 28-02-2014, 17:21:51 »
а из native C++?
Аналогично. Т.е. это API является внутренним и его невозможно использовать ни из ObjectARX, ни из .NET API.

Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #46 : 28-02-2014, 17:28:14 »
Хорошо, на нет, как говорится, нет и папахи, и шашки, и коня...

А что насчёт #21?  Я там показал код и результаты обозначил - это несколько иная ситуация, отличная от той, которая обозначена автором топика. Там тоже всё печально?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #47 : 06-03-2014, 02:22:53 »
Там тоже всё печально?
Тоже. Сегодня получил подтверждение от Art Cooney, что нет средств установки ПСК для Database открытого через Database.ReadDwgFile, т.е. установка ПСК возможна только для открытого в редакторе AutoCAD документа. Отсутствие такой возможности обнаружилось около года назад и в существующих версиях AutoCAD этой возможности не будет. Просто до прошлого года никто о такой возможности не спрашивал. Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось. Никакого недокументированного API для этого тоже нет.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #48 : 06-03-2014, 10:11:25 »
А собираются ли реально реализовывать это, или же будет стандартная отписка "добавленно wishlist" (читать как "мы вас услышали, спасибо...") - на эту тему что-то сообщили?  Тем более, что
Цитата: Александр Ривилис
Отсутствие такой возможности обнаружилось около года назад
Отсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.
Цитата: Александр Ривилис
Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось.
Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.

Оффлайн bargoolАвтор темы

  • ADN Club
  • ***
  • Сообщений: 111
  • Карма: 6
Re: Управление ucs в фоне
« Ответ #49 : 06-03-2014, 10:28:32 »
Отсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.
Даже если сделают эту возможность (установку ucs), генерировать листы в файле, отрытом с помощью ReadDwgFile не получится (у меня не получалось настроить листы без перехода LayoutManager'ом на настраиваемый лист, правда, я не слишком глубоко копал в этом направлении)
Алексей

Оффлайн Дима_

  • ADN Club
  • ****
  • Сообщений: 473
  • Карма: 66
Re: Управление ucs в фоне
« Ответ #50 : 06-03-2014, 10:37:27 »
Значит никто никогда не делал программной генерации таких оформленных листов
Не делал через ARX. А через него вообще, относительно других методов взаимодействия, сделанно не много ввиду чрезмерной низкоуровности API (какая-то старая книжка была, где вобще рассматривался вариант прямого программирования DXF файла - так вот ARX не далеко ушел по уровню). Зачем при создании .Net интерфейса (как популярного направления программирования) автодесковцы решили практически "втупую" обернуть именно ARX модель, лично я кроме как ленью (типо просили - нате) объяснить не могу - ИХМО модель эта ужастна по всем параметрам (ну ладно быстродействие еще более-менее), но остальные поддерживаемые диалекты уже морально устаревают - да и самая беда - не поддерживают их толком. Вот и получается что дали, то и ешь. Как результат - при появлении популярного .Net'a и выясняется, через 15 лет, что чего-то - для решения элементарной задачи - просто нету.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Управление ucs в фоне
« Ответ #51 : 07-03-2014, 17:16:54 »
Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.
А причем тут UCS в листах? Ты с видами не путаешь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Управление ucs в фоне
« Ответ #52 : 07-03-2014, 20:04:00 »
А причем тут UCS в листах? Ты с видами не путаешь?
Нет, не путаю. Во первых, я же выше сослался на конкретный код, обозначенный мною в #21 - там я оперировал объектом Viewport. Во вторых - я вроде чётко обозначил то, что имею в виду:

Цитировать
оформленных листов, в видовых экранах которых нужно было настраивать системы координат
View != Viewport.