Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: bargool от 26-02-2014, 10:07:07

Название: Управление ucs в фоне
Отправлено: bargool от 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. }
Кстати, не получается даже если пытаться так сделать в текущем документе.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 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):

(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fs2.ipicture.ru%2Fuploads%2F20140226%2FaZB9H1w3.png&hash=040954f6a3c31b5a0894e76ad49a5e6e)

Т.е. несоответствие отображаемой пиктограммы текущей системе координат.
Название: Re: Управление ucs в фоне
Отправлено: bargool от 26-02-2014, 10:40:24
Андрей Бушман, SaveAs делается, конечно ))
ыыыыыыы. А теперь сработало! Чего я забыл до этого прописать - история умалчивает...
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 26-02-2014, 10:43:22
посмотри выше мой UPD.

Вместо "*Active" лучше используй
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices.ViewportActiveName
Название: Re: Управление ucs в фоне
Отправлено: bargool от 26-02-2014, 10:56:40
за ViewportActiveName спасибо.
Апдейт подтверждаю. иконка UCS делает вид, что она WCS, но по факту UCS остается на месте (кстати, один раз было всё нормально, а несколько раз даже иконка никуда не сдвигалась - теперь, правда не повторить)
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 26-02-2014, 16:16:43
Думаю что тут еще играет роль UCSFOLLOW. (http://docs.autodesk.com/ACD/2010/ENU/AutoCAD%202010%20User%20Documentation/files/WS1a9193826455f5ffa23ce210c4a30acaf-4e25.htm)
И еще. Изменения в ViewportTableRecord напрямую не отражаются в редакторе. Стоит еще и установить Editor.CurrentUserCoordinateSystem в WCS
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 26-02-2014, 16:21:34
Стоит еще и установить Editor.CurrentUserCoordinateSystem в WCS
И как же он это сделает, если редактирует Database не создавая при этом Document?
Думаю, что пара-тройка строчек кода, демонстрирующих решение обозначенной проблемы, вполне бы устроили "отца Российской Демократии" (с) ;)
Название: Re: Управление ucs в фоне
Отправлено: bargool от 26-02-2014, 16:23:29
Александр, дело в том, что я открываю этот файл с помощью Database.ReadDwgFile, документа у меня нет, ведь так?
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 26-02-2014, 16:24:01
И как же он это сделает, если редактирует Database не создавая при этом Document?
Ага. Интересный вопрос. Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 26-02-2014, 16:25:09
Александр, дело в том, что я открываю этот файл с помощью Database.ReadDwgFile, документа у меня нет, ведь так?
Объясни зачем ты меняешь систему координат. Может можно обойтись другими средствами.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 26-02-2014, 16:25:58
Тогда и vt["*Active"] неправильно, так оно имеет такое имя только в редакторе AutoCAD.
В отладчике показывается именно оно. Кроме того, на всякий случай, я выше рекомендовал использовать
Код - C# [Выбрать]
  1. Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices.ViewportActiveName
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 26-02-2014, 16:26:37
Может можно обойтись другими средствами.
А если нельзя? Предположим, что нужно программно систему координат, для некоторого видового экрана, установить в WCS. :) Можно и перефразировать вопрос, задав его, что называется в лоб: почему SetUcsToWorld не работает должным образом? Если для корректной работы обозначенного метода требуется подправить код, то какие именно правки нужны?
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 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. }
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 26-02-2014, 17:11:10
Думаю что тут еще играет роль UCSFOLLOW.
Хотелось бы обойтись без этого, тем более, что в данном случае оно не срабатывает.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 26-02-2014, 19:03:23
В действительности vtr.SetUcsToWorld(); устанавливает WCS в качестве системы координат для вида, но не устанавливает её текущей для чертежа. Все методы для установки UCS для Database (кроме Database.UcsBase) read-only. В ObjectARX ситуация таже. Есть недокументированный класс AcDbHeader, в котором есть методы setUcsXXX, и которые похоже используются внутри AutoCAD для установки системы координат при запуске команды _UCS.
Я задал вопрос в ADN DevHelp возможно ли вообще установить текущей системой координат WCS для чертежа, который не открыт в редакторе AutoCAD. Подождем ответа.
Название: Re: Управление ucs в фоне
Отправлено: bargool от 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.
И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 10:05:10
И из-за этой, как оказалось, пустой фразы было потеряно достаточно много времени!
Фраза не пустая. Почувствуй разницу между "установить МСК для видового порта" и "установить МСК для чертежа". В редакторе AutoCAD есть метод Editor.UpdateTiledViewportsFromDatabase, который приводит в соответствие видовой порт с базой и соответственно и ПСК должна стать такой, как у активного вида. Но как сделать это без загрузки в редактор - я пока не знаю.
Название: Re: Управление ucs в фоне
Отправлено: bargool от 27-02-2014, 10:18:57
Александр, мне не нужно устанавливать новую МСК для чертежа. Мне нужно, что бы пользователь открыл модель получившегося файла и увидел, что там ПСК установлена в МСК (менять расположение  самой МСК я не имею права).
В моем понимании, это именно "Установить ПСК видового экрана модели в МСК"
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 10:25:14
Александр, мне не нужно устанавливать новую МСК для чертежа.
А это и принципиально невозможно. МСК она и в Африке МСК - она единая и единственная. И поэтому новой быть не может.

В моем понимании, это именно "Установить ПСК видового экрана модели в МСК"
Нет ПСК видового экрана и ПСК чертежа - это две совершенно разных вещи. Ты сам смог в этом убедится. У твоего видового экрана действительно ПСК стало равным МСК, но это никак не повлияло на ПСК чертежа.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 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 (вообще никаких изменений не наблюдаю). Может я в коде чего не так сделал? Тестовый файл прилагается.
Название: Re: Управление ucs в фоне
Отправлено: Дима_ от 27-02-2014, 11:47:20
По моему ошибка (недочет) не в этом api, а во время открытия файла в редакторе, если открыв такой файл прыгуть лист-модель и обратно - то UCS редактора придет в соответствие с db, причем если просто запустить _regenall - не помогает. Как вариант вижу только добавить в автозагрузку UpdateTiledViewportsFromDatabase().
з.ы. автокад ИХМО вобще слишком много ненужного кэширует, при сохранении файла - я понимаю по работе это существенно влияет на скорость процесса, но для сохранения в файл - у него явная избыточность - что иногда и приводит к таким противоречиеям.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 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-ю картинку.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 12:34:28
Как вариант вижу только добавить в автозагрузку UpdateTiledViewportsFromDatabase().
Я все-так рассчитываю, что мы что-то упустили и ADN DevHelp нам поможет. Ну или точно скажут, что это невозможно.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 12:53:16
Ну или точно скажут, что это невозможно.
Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 12:53:57
Код - C# [Выбрать]
  1. Int16 cvportIndex = (Int16)cad.GetSystemVariable("CVPORT");
Это работает для текущего чертежа в редакторе AutoCAD и никак не связано с Database для чертежа, который не открыт в редакторе.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 12:55:55
Это работает для текущего чертежа в редакторе AutoCAD и никак не связано с Database для чертежа, который не открыт в редакторе.
Ну тогда возникает законный вопрос: как в Database, открытой обозначенным выше способом, получить текущий видовой экран (Viewport) на листе?
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 12:56:15
Ну тогда уж пусть сразу показывают пример, когда метод ViewportTableRecord.SetUcsToWorld() работает...
Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 12:58:05
Эти методы работают! Посмотри свойства активной ViewportTableRecord. Но (!!!) данные не переносятся на Database.
Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 13:10:47
Мне важен конечный результат. Если ожидаемого результата нет, то вряд ли стоит это считать корректной работой. ИМХО.
Мы говорим на разных языках? Я объясняю, что ты неправильно понял смысл этого метода. Он меняет установки UCS для ViewportTableRecord. И всё! И так и должно быть. А вот как установить UCS в WCS для Database - это уже другой вопрос, на который ответа мы пока не знаем.
Название: Re: Управление ucs в фоне
Отправлено: Дима_ от 27-02-2014, 14:49:02
Хотел обрабатывать файл в фоне, без мельтешения. Пока приходится ради ucs пользоваться editor'ом.Но кроме всего прочего теперь уже действительно интересно
Второй пункт остается открытым, а по первому - если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exe.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 14:55:14
если старше 2013 то можно не "мельтешить", а гнать через accoreconsole.exe
мне, в данном случае, не повезло. :)
Название: Re: Управление ucs в фоне
Отправлено: Дима_ от 27-02-2014, 15:01:56
по большому секрету говорю - консоль 2013 (про 14 не знаю) от демоверсии продолжает успешно работать и после срока Х без каких-либо посторонних телодвижений, а т.к. у автодеска не было условия стереть когда кончиться срок ознакомления - то я ее даже с официальной точки зрения могу использовать и в хвост и в гриву
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 15:25:19
по большому секрету говорю - консоль 2013 (про 14 не знаю) от демоверсии продолжает успешно работать и после срока Х без каких-либо посторонних телодвижений, а т.к. у автодеска не было условия стереть когда кончиться срок ознакомления - то я ее даже с официальной точки зрения могу использовать и в хвост и в гриву
насколько я помню (http://bushman-andrey.blogspot.ru/2012/06/accoreconsoleexe-autocad-2013.html), accoreconsole в 2013-м был годен только на "Hello World".
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 15:31:16
насколько я помню, accoreconsole в 2013-м был годен только на "Hello World".
Он годен для пакетной обработки, а то что у него проблемы с русскими буквами - это второй вопрос. И думаю, что в данном случае Дима прав.
Название: Re: Управление ucs в фоне
Отправлено: bargool от 27-02-2014, 15:35:22
К сожалению, мне надобно и на 2013 и на 2014. А пока, в ожидании ответа от ADN DevHelp, продолжу мельтешить  :)
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 15:35:35
Он годен для пакетной обработки

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

а то что у него проблемы с русскими буквами - это второй вопрос
А в пакетной обработке русские символы маловероятны? :) Имхо - для славян это как раз-таки первый, основной вопрос, т.к. вероятность возникновения обозначенного "счастья" достаточно велика.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 27-02-2014, 15:41:16
Зная эту "особенность" можно обойтись без кириллицы. Ну и мы в разделе программирование, а точнее AutoCAD .NET API. Так что я имел в виду не скриптовую обработку, а .NET-приложение, работающее в accoreconsole с кучей dwg-файлов.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 27-02-2014, 15:50:55
Зная эту "особенность" можно обойтись без кириллицы. Ну и мы в разделе программирование, а точнее AutoCAD .NET API. Так что я имел в виду не скриптовую обработку, а .NET-приложение, работающее в accoreconsole с кучей dwg-файлов.
В пакетной обработке могут быть использованы .NET-плагины, написанные ранее (зачастую именно так и происходит). А поскольку плагины пишутся для русскоязычных пользователей, то и сообщения в этих плагинах выводятся на русском. Это при написании новых можно будет учитывать существующие баги "особенности"... А вот с уже написанными - тут, что называется "бядаааа".
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 28-02-2014, 17:07:41
Получил ответ из ADN DevHelp:
Цитировать
"На данный момент это невозможно в существующих API. Послан запрос на добавление такой функциональности в будущих версиях AutoCAD. Пока рекомендуем пользоваться  AccoreConsole.exe и scr-файлом:"
_UCS

_SAVE

P.S.: ... No Comments ...
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 28-02-2014, 17:10:05
Я постараюсь воздержаться от нецензурных комментариев...

Цитировать
Послан запрос на добавление такой функциональности в будущих версиях AutoCAD.
А это вообще даже не смешно, причём уже давным-давно...
Название: Re: Управление ucs в фоне
Отправлено: bargool от 28-02-2014, 17:13:27
 ;D
Продолжу мельтешить
Александр, спасибо за участие!
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 28-02-2014, 17:14:32
Продолжу мельтешить
ты плохо читаешь??? Юзай скрипты (даже уже не autolisp)!!! Нефиг на .net писать :)
Цитировать
Александр, спасибо за участие!
в данном случае "участие" сродни "сочувствию"... :)
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 28-02-2014, 17:16:44
Продолжу мельтешить
В данном случае это бессмысленно, так как ADN DevHelp подтвердили отстутствие возможности это сделать непосредственно из .NET API.
Название: Re: Управление ucs в фоне
Отправлено: Дима_ от 28-02-2014, 17:17:31
Пока рекомендуем пользоваться  AccoreConsole.exe и scr-файлом
Они похоже ответ на нашем форуме почитали...
то Александр - bargool под мельтешить имеет в виду экраном, а не поиском
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 28-02-2014, 17:17:53
отстутствие возможности это сделать непосредственно из .NET API.
а из native C++?
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 28-02-2014, 17:21:51
а из native C++?
Аналогично. Т.е. это API является внутренним и его невозможно использовать ни из ObjectARX, ни из .NET API.

Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 28-02-2014, 17:28:14
Хорошо, на нет, как говорится, нет и папахи, и шашки, и коня...

А что насчёт #21 (http://adn-cis.org/forum/index.php?topic=559.msg1849#msg1849)?  Я там показал код и результаты обозначил - это несколько иная ситуация, отличная от той, которая обозначена автором топика. Там тоже всё печально?
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 06-03-2014, 02:22:53
Там тоже всё печально?
Тоже. Сегодня получил подтверждение от Art Cooney, что нет средств установки ПСК для Database открытого через Database.ReadDwgFile, т.е. установка ПСК возможна только для открытого в редакторе AutoCAD документа. Отсутствие такой возможности обнаружилось около года назад и в существующих версиях AutoCAD этой возможности не будет. Просто до прошлого года никто о такой возможности не спрашивал. Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось. Никакого недокументированного API для этого тоже нет.
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 06-03-2014, 10:11:25
А собираются ли реально реализовывать это, или же будет стандартная отписка "добавленно wishlist" (читать как "мы вас услышали, спасибо...") - на эту тему что-то сообщили?  Тем более, что
Цитата: Александр Ривилис
Отсутствие такой возможности обнаружилось около года назад
Отсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.
Цитата: Александр Ривилис
Лично для меня достаточно странно - за приблизительно 15 лет (речь идет об ObjectARX) никому это не понадобилось.
Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.
Название: Re: Управление ucs в фоне
Отправлено: bargool от 06-03-2014, 10:28:32
Отсутствие обозначенного функционала делает невозможным программную генерацию оформленных листов, в видовых экранах которых систему координат следует располагать специфически.
Даже если сделают эту возможность (установку ucs), генерировать листы в файле, отрытом с помощью ReadDwgFile не получится (у меня не получалось настроить листы без перехода LayoutManager'ом на настраиваемый лист, правда, я не слишком глубоко копал в этом направлении)
Название: Re: Управление ucs в фоне
Отправлено: Дима_ от 06-03-2014, 10:37:27
Значит никто никогда не делал программной генерации таких оформленных листов
Не делал через ARX. А через него вообще, относительно других методов взаимодействия, сделанно не много ввиду чрезмерной низкоуровности API (какая-то старая книжка была, где вобще рассматривался вариант прямого программирования DXF файла - так вот ARX не далеко ушел по уровню). Зачем при создании .Net интерфейса (как популярного направления программирования) автодесковцы решили практически "втупую" обернуть именно ARX модель, лично я кроме как ленью (типо просили - нате) объяснить не могу - ИХМО модель эта ужастна по всем параметрам (ну ладно быстродействие еще более-менее), но остальные поддерживаемые диалекты уже морально устаревают - да и самая беда - не поддерживают их толком. Вот и получается что дали, то и ешь. Как результат - при появлении популярного .Net'a и выясняется, через 15 лет, что чего-то - для решения элементарной задачи - просто нету.
Название: Re: Управление ucs в фоне
Отправлено: Александр Ривилис от 07-03-2014, 17:16:54
Значит никто никогда не делал программной генерации таких оформленных листов, в видовых экранах которых нужно было настраивать системы координат с учётом специфики изображения.
А причем тут UCS в листах? Ты с видами не путаешь?
Название: Re: Управление ucs в фоне
Отправлено: Андрей Бушман от 07-03-2014, 20:04:00
А причем тут UCS в листах? Ты с видами не путаешь?
Нет, не путаю. Во первых, я же выше сослался на конкретный код, обозначенный мною в #21 - там я оперировал объектом Viewport. Во вторых - я вроде чётко обозначил то, что имею в виду:

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