Создано в программе Autodesk для учебных заведений

Автор Тема: Создано в программе Autodesk для учебных заведений  (Прочитано 28261 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
1. Подскажите пожалуйста, что поменялось начиная с Civil 3D 2014 SP1 c этим сообщением, оно исчезло? 

2. Где об этом написано?

3. Теперь пользователи даже не вкурсе, что к ним попал файл созданый для учебных заведений?

4. Скопировав одну линию в другой файл и передав этот другой файл пользователю с автокадом 2012 - у пользователя с автокад 2012 теперь проблемы и с этим сообщением и с печатью?

Отмечено как Решение Александр Ривилис 19-03-2015, 15:40:42

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Подскажите пожалуйста, что поменялось начиная с Civil 3D 2014 SP1 c этим сообщением, оно исчезло?
Исчезло.
2. где об этом написано?
http://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/Educational-Plot-Stamp-Removal-Issues.html

3. Теперь пользователи даже не вкурсе что к ним попал файл созданый для учебных заведений?
Да. Из стандартных средств проверки: http://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/AutoCAD-Detect-drawings-with-educational-plot-stamp.html
4. Скопировав одну линию в другой файл и передав этот другой файл пользователю с автокадом 2012 - у пользователя с автокад 2012 теперь проблемы и с этим сообщеним и с печатью?
Это вопрос или утверждение?
Если сохранить чертеж в AutoCAD 2015 то штамп учебной версии исчезает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
Кстати, как программист ты можешь сам диагностировать есть метка учебной версии или нет: свойство Database.IsEmr (в AutoCAD 2015 этого свойства уже нет) и выводить об этом сообщение.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Спасибо за развёрнутый ответ.
Видомо теперь придётся что срочно придумывать - проблемы уже начались, т.к. у половины пользователей  2012.

Пользователи теперь спрашивают как включить это сообщение, т.к. они даже не вкурсе что передали в другую организацию файлы с этим сообщением, при это у нас нет лицензий для учебных заведений (файлы могли появится только из вне).
« Последнее редактирование: 27-11-2014, 10:17:43 от Doublefish »

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
Пользователи теперь спрашивают как включить это сообщение
Никак. Только если ты напишешь для них приложение, которое будет анализировать Database.IsEmr и выдавать сообщение.
Можешь в событии открытия файла, а можешь в фоне по таймеру, т.к. отлавливать необходимо кучу разных операций копирования, то лучше просто проверять HostApplicationServices.WorkingDatabase.IsEmr
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1585
  • Карма: 361
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Пользователи теперь спрашивают как включить это сообщение, т.к. они даже не вкурсе что передали в другую организацию файлы с этим сообщением, при это у нас нет лицензий для учебных заведений (файлы могли появится только из вне).
Да, согласен, знатную нам свинью подсунули в 2014 версии SP1. У нас тоже с этим проблемы есть. Казалось бы, если уж убрали сообщение, почему бы сразу не сделать, чтобы штамп снимался при пересохранении? Ан нет, помучайтесь...
У нас уже определились, у кого еще стоит AutoCAD 2014 без SP, на которых проверяем есть штамп или нет. С нетерпением жду, когда нам всем уже 2015 версии установят...

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
Да, согласен, знатную нам свинью подсунули в 2014 версии SP1.
Абсолютно согласен. Если решили отказаться от метки учебной версии, то это нужно было делать только в новой (т.е. 2015) версии. И чтобы сразу при сохранении эта метка снималась.
Насколько я понимаю при помощи DWG True View 2015 эту метку тоже можно снять.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
На всякий случай налепил такой код, который совсем не проверял:
Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using AcRx = Autodesk.AutoCAD.Runtime;
  9. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  10. using AcDb = Autodesk.AutoCAD.DatabaseServices;
  11. using AcGe = Autodesk.AutoCAD.Geometry;
  12. using AcEd = Autodesk.AutoCAD.EditorInput;
  13.  
  14. // This line is not mandatory, but improves loading performances
  15. [assembly: ExtensionApplication(typeof(EmrInfo.MyPlugin))]
  16.  
  17. namespace EmrInfo
  18. {
  19.   public class MyPlugin : IExtensionApplication
  20.   {
  21.     List<AcDb.Database> dbs = new List<AcDb.Database>();
  22.     void IExtensionApplication.Initialize()
  23.     {
  24.       AcAp.Application.DocumentManager.DocumentLockModeChanged +=
  25.         new AcAp.DocumentLockModeChangedEventHandler(DocumentManager_DocumentLockModeChanged);
  26.     }
  27.  
  28.     void IExtensionApplication.Terminate()
  29.     {
  30.     }
  31.     public void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  32.     {
  33.       if (e.Document.Database.IsEmr && !dbs.Contains(e.Document.Database)) {
  34.         dbs.Add(e.Document.Database); // Чтобы каждый раз не сообщать.
  35.         AcAp.Application.ShowAlertDialog("\nВнимание! Чертеж <" +
  36.           e.Document.Name + "> выполнен в учебной версии AutoCAD!");
  37.       }
  38.     }
  39.   }
  40. }

Дальше можно допиливать по месту.
« Последнее редактирование: 27-11-2014, 17:56:50 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1585
  • Карма: 361
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Надо будет проверить на досуге... Есть подозрение, что надо допиливать. Я так понимаю, что если "заражена" внешняя ссылка, сообщение не появится при открытии чертежа, куда эта ссылка вставлена. А стандартное сообщение в этом случае появлялось. В любом случае, спасибо за идею!

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Ужастик: в AutoCAD 2016 появится очередное новшество - если ты хотя бы раз открывал в своём акаде файл, созданный в учебной версии, то после этого, при открытии любых других чертежей, они автоматом так же становятся учебными. Причём надпись об учебной версии будет располагаться на весь лист, по диагонали. Не поможет даже переустановка акада, только полный снос системы. :) Всем приятных снов  ;)

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

  • Administrator
  • *****
  • Сообщений: 8027
  • Карма: 948
  • Рыцарь ObjectARX
  • Skype: rivilis
Надо будет проверить на досуге... Есть подозрение, что надо допиливать. Я так понимаю, что если "заражена" внешняя ссылка, сообщение не появится при открытии чертежа, куда эта ссылка вставлена. А стандартное сообщение в этом случае появлялось. В любом случае, спасибо за идею!
Ну тогда как-то так. Тоже практически без тестирования:
Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using Autodesk.AutoCAD.Runtime;
  4. using Autodesk.AutoCAD.ApplicationServices;
  5. using Autodesk.AutoCAD.DatabaseServices;
  6. using Autodesk.AutoCAD.Geometry;
  7. using Autodesk.AutoCAD.EditorInput;
  8. using AcRx = Autodesk.AutoCAD.Runtime;
  9. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  10. using AcDb = Autodesk.AutoCAD.DatabaseServices;
  11. using AcGe = Autodesk.AutoCAD.Geometry;
  12. using AcEd = Autodesk.AutoCAD.EditorInput;
  13.  
  14.  
  15. // This line is not mandatory, but improves loading performances
  16. [assembly: ExtensionApplication(typeof(EmrInfo.MyPlugin))]
  17.  
  18. namespace EmrInfo
  19. {
  20.   public class MyPlugin : IExtensionApplication
  21.   {
  22.     List<string> fileNames = new List<string>();
  23.     void IExtensionApplication.Initialize()
  24.     {
  25.       AcAp.Application.DocumentManager.DocumentLockModeChanged +=
  26.         new AcAp.DocumentLockModeChangedEventHandler(DocumentManager_DocumentLockModeChanged);
  27.     }
  28.  
  29.     void IExtensionApplication.Terminate()
  30.     {
  31.     }
  32.  
  33.     List<AcDb.Database> GetAllXrefedDatabase(AcDb.Database db)
  34.     {
  35.       List<AcDb.Database> dbs = new List<AcDb.Database>();
  36.       if (db != null)
  37.       {
  38.         if (!dbs.Contains(db)) dbs.Add(db);
  39.         AcDb.XrefGraph xg = db.GetHostDwgXrefGraph(true);
  40.         AcDb.XrefGraphNode root = xg.RootNode as AcDb.XrefGraphNode;
  41.         for (int i = 0; i < root.NumOut; i++)
  42.         {
  43.           AcDb.XrefGraphNode node = root.Out(i) as AcDb.XrefGraphNode;
  44.           if (node.XrefStatus == AcDb.XrefStatus.Resolved)
  45.           {
  46.             AcDb.Database db_child = node.Database;
  47.             if (db_child != null && !dbs.Contains(db_child))
  48.             {
  49.               List<AcDb.Database> dbs_child = GetAllXrefedDatabase(db_child);
  50.               for (int j = 0; j < dbs_child.Count; j++)
  51.                 if (!dbs.Contains(dbs_child[j])) dbs.Add(dbs_child[j]);
  52.             }
  53.           }
  54.         }
  55.       }
  56.       return dbs;
  57.     }
  58.     public void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  59.     {
  60.       try
  61.       {
  62.         AcDb.Database db = e.Document.Database;
  63.         List<AcDb.Database> dbs = GetAllXrefedDatabase(db);
  64.         string fileNamesString = "";
  65.         for (int i = 0; i < dbs.Count; i++)
  66.         {
  67.           if (dbs[i].IsEmr && !fileNames.Contains(dbs[i].Filename))
  68.           {
  69.             fileNames.Add(dbs[i].Filename);
  70.             fileNamesString += ("\n<" + dbs[i].Filename + ">");
  71.           }
  72.         }
  73.         if (fileNamesString.Length > 0)
  74.         {
  75.           AcAp.Application.ShowAlertDialog(
  76.             "\n!!! ВНИМАНИЕ-ВНИМАНИЕ-ВНИМАНИЕ !!!" +
  77.             "\nСледующие чертежи содержат Штамп Учебной Версии:"
  78.             + fileNamesString);
  79.         }
  80.       }
  81.       catch { };
  82.     }
  83.   }
  84. }

Во вложении EmrInfo.dll для AutoCAD 2014 и исходник.
« Последнее редактирование: 28-11-2014, 15:19:17 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 1585
  • Карма: 361
  • LISP/C#, AutoCAD/Civil 3D
  • Skype: zagor_dmtr
Ужастик: в AutoCAD 2016 появится очередное новшество - если ты хотя бы раз открывал в своём акаде файл, созданный в учебной версии, то после этого, при открытии любых других чертежей, они автоматом так же становятся учебными. Причём надпись об учебной версии будет располагаться на весь лист, по диагонали. Не поможет даже переустановка акада, только полный снос системы. :) Всем приятных снов  ;)
Да, как-то так :)
Александр Наумович, по быстрому попробовал проверить - чего-то не работает. Падает и на обычном автокаде и на Civil с фатальной ошибкой при попытке открытия нового чертежа:
System.Reflection.TargetInvocationException: Адресат вызова создал исключение. ---> System.InvalidOperationException: Операция является недопустимой из-за текущего состояния объекта.
   в Autodesk.AutoCAD.Runtime.DisposableWrapper.Attach(IntPtr unmanagedPointer, Boolean autoDelete)
   --- Конец трассировки внутреннего стека исключений ---
   в System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor)
   в System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   в System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes, StackCrawlMark& stackMark)
   в System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
   в Autodesk.AutoCAD.Runtime.DisposableWrapper.Create(Type type, IntPtr unmanagedPointer, Boolean autoDelete)
   в Autodesk.AutoCAD.ApplicationServices.Document.get_Database()
   в EmrInfo.MyPlugin.DocumentManager_DocumentLockModeChanged(Object sender, DocumentLockModeChangedEventArgs e)
   в Autodesk.AutoCAD.ApplicationServices.DocumentLockModeChangedEventHandler.Invoke(Object sender, DocumentLockModeChangedEventArgs e)
   в CDocCollReactorImpl.FireDocumentLockModeChanged(CDocCollReactorImpl* , AcApDocument* doc, DocLockMode myPreviousMode, DocLockMode myCurrentMode, DocLockMode currentMode, Char* pGlobalCmdName)
Вроде бы на этой строчке (или где-то рядом):
Код - C# [Выбрать]
  1. List<AcDb.Database> dbs = GetAllXrefedDatabase(db);

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
+ определить есть ли SP
 
Код - C# [Выбрать]
  1. bool yessp = false;
  2. try
  3.             {   //c3d 2014
  4.                 Registry.LocalMachine.OpenSubKey(@"Software\Autodesk\AutoCAD\R19.1\ACAD-D000\Service Packs").ToString();
  5.                 yessp = true;
  6.             }
  7. catch (SystemException)
  8.             {
  9.                 yessp = false;
  10.             }
  11. if (yessp)
  12. {
  13.    сообщение
  14. }

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

  • ADN Club
  • *****
  • Сообщений: 1999
  • Карма: 160
  • Пишу программки...
    • Блог
  • Skype: Compositum78
2 Doublefish

Ужасный код.  :-X

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

  • ADN Club
  • ****
  • Сообщений: 288
  • Карма: 10
  • AutoCAD Civil 3D
Предложите другой  :)