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

ADN Club => Civil 3D API => Адаптация Civil 3D => Тема начата: Doublefish от 27-11-2014, 09:40:29

Название: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 27-11-2014, 09:40:29
1. Подскажите пожалуйста, что поменялось начиная с Civil 3D 2014 SP1 c этим сообщением, оно исчезло? 

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

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

4. Скопировав одну линию в другой файл и передав этот другой файл пользователю с автокадом 2012 - у пользователя с автокад 2012 теперь проблемы и с этим сообщением и с печатью?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-11-2014, 09:46:29
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 то штамп учебной версии исчезает.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-11-2014, 09:54:50
Кстати, как программист ты можешь сам диагностировать есть метка учебной версии или нет: свойство Database.IsEmr (в AutoCAD 2015 этого свойства уже нет) и выводить об этом сообщение.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 27-11-2014, 10:05:02
Спасибо за развёрнутый ответ.
Видомо теперь придётся что срочно придумывать - проблемы уже начались, т.к. у половины пользователей  2012.

Пользователи теперь спрашивают как включить это сообщение, т.к. они даже не вкурсе что передали в другую организацию файлы с этим сообщением, при это у нас нет лицензий для учебных заведений (файлы могли появится только из вне).
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-11-2014, 11:50:29
Пользователи теперь спрашивают как включить это сообщение
Никак. Только если ты напишешь для них приложение, которое будет анализировать Database.IsEmr и выдавать сообщение.
Можешь в событии открытия файла, а можешь в фоне по таймеру, т.к. отлавливать необходимо кучу разных операций копирования, то лучше просто проверять HostApplicationServices.WorkingDatabase.IsEmr
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 27-11-2014, 12:27:45
Пользователи теперь спрашивают как включить это сообщение, т.к. они даже не вкурсе что передали в другую организацию файлы с этим сообщением, при это у нас нет лицензий для учебных заведений (файлы могли появится только из вне).
Да, согласен, знатную нам свинью подсунули в 2014 версии SP1. У нас тоже с этим проблемы есть. Казалось бы, если уж убрали сообщение, почему бы сразу не сделать, чтобы штамп снимался при пересохранении? Ан нет, помучайтесь...
У нас уже определились, у кого еще стоит AutoCAD 2014 без SP, на которых проверяем есть штамп или нет. С нетерпением жду, когда нам всем уже 2015 версии установят...
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-11-2014, 13:14:24
Да, согласен, знатную нам свинью подсунули в 2014 версии SP1.
Абсолютно согласен. Если решили отказаться от метки учебной версии, то это нужно было делать только в новой (т.е. 2015) версии. И чтобы сразу при сохранении эта метка снималась.
Насколько я понимаю при помощи DWG True View 2015 эту метку тоже можно снять.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-11-2014, 17:45:40
На всякий случай налепил такой код, который совсем не проверял:
Код - 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. }

Дальше можно допиливать по месту.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 27-11-2014, 19:26:19
Надо будет проверить на досуге... Есть подозрение, что надо допиливать. Я так понимаю, что если "заражена" внешняя ссылка, сообщение не появится при открытии чертежа, куда эта ссылка вставлена. А стандартное сообщение в этом случае появлялось. В любом случае, спасибо за идею!
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Андрей Бушман от 27-11-2014, 22:16:10
Ужастик: в AutoCAD 2016 появится очередное новшество - если ты хотя бы раз открывал в своём акаде файл, созданный в учебной версии, то после этого, при открытии любых других чертежей, они автоматом так же становятся учебными. Причём надпись об учебной версии будет располагаться на весь лист, по диагонали. Не поможет даже переустановка акада, только полный снос системы. :) Всем приятных снов  ;)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 28-11-2014, 00:28:54
Надо будет проверить на досуге... Есть подозрение, что надо допиливать. Я так понимаю, что если "заражена" внешняя ссылка, сообщение не появится при открытии чертежа, куда эта ссылка вставлена. А стандартное сообщение в этом случае появлялось. В любом случае, спасибо за идею!
Ну тогда как-то так. Тоже практически без тестирования:
Код - 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 и исходник.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 28-11-2014, 11:11:14
Ужастик: в 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);
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 28-11-2014, 14:39:30
+ определить есть ли 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. }
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Андрей Бушман от 28-11-2014, 14:42:45
2 Doublefish

Ужасный код.  :-X
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 28-11-2014, 14:50:43
Предложите другой  :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 28-11-2014, 15:04:53
Александр Наумович, по быстрому попробовал проверить - чего-то не работает.
Проверил и исправил. Не хватало одного try/catch.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Андрей Бушман от 28-11-2014, 15:29:23
Предложите другой 
Информацию в реестре о наличии\отсутствии SP для текущей версии AutoCAD я бы искал следующим образом:
Код - C# [Выбрать]
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Microsoft.Win32;
  6.  
  7. #if AUTOCAD
  8. using cad = Autodesk.AutoCAD.ApplicationServices.Application;
  9. using Ap = Autodesk.AutoCAD.ApplicationServices;
  10. using Db = Autodesk.AutoCAD.DatabaseServices;
  11. using Ed = Autodesk.AutoCAD.EditorInput;
  12. using Rt = Autodesk.AutoCAD.Runtime;
  13. using Hs = Autodesk.AutoCAD.DatabaseServices.HostApplicationServices;
  14. using Us = Autodesk.AutoCAD.DatabaseServices.SymbolUtilityServices;
  15. #endif
  16.  
  17. [assembly: Rt.CommandClass(typeof(Bushman.CAD.Sandbox.Commands))]
  18.  
  19. namespace Bushman.CAD.Sandbox {
  20.     public sealed class Commands {
  21.  
  22.         [Rt.CommandMethod("Test")]
  23.         public void Test() {
  24.             Ap.Document doc = cad.DocumentManager.MdiActiveDocument;
  25.             if (null == doc)
  26.                 return;
  27.  
  28.             Ed.Editor ed = doc.Editor;
  29.  
  30.             Version old = new Version(18, 2);
  31.             String appPath = String.Empty;
  32.  
  33. #if CAD_NEWER_THAN_18_2
  34.             appPath = Hs.Current.MachineRegistryProductRootKey;
  35. #else
  36.             appPath = Hs.Current.RegistryProductRootKey;
  37. #endif
  38.             String spParentPath = String.Empty;
  39.             if (cad.Version > old) {
  40.                 Int32 len = appPath.IndexOf(':');
  41.                 spParentPath = appPath.Substring(0, len);
  42.             }
  43.             else {
  44.                 spParentPath = appPath;
  45.             }
  46.  
  47.             using (RegistryKey appKey = Registry.LocalMachine.OpenSubKey(
  48.                 spParentPath)) {
  49.                 using (RegistryKey spKey = appKey.OpenSubKey("Service Packs")) {
  50.  
  51.                     if (null != spKey && 0 != spKey.GetSubKeyNames().Length) {
  52.                         String patchTitle = spKey.OpenSubKey(spKey
  53.                             .GetSubKeyNames()[0]).GetValue("PatchTitle",
  54.                             String.Empty).ToString();
  55.                         ed.WriteMessage("{0}\n", patchTitle);
  56.                     }
  57.                     else {
  58.                         ed.WriteMessage("Service Packs is not installed.\n");
  59.                     }
  60.                     if (null != spKey) {
  61.                         spKey.Close();
  62.                     }
  63.                 }
  64.             }
  65.         }
  66.     }
  67. }
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Андрей Бушман от 28-11-2014, 15:36:25
Подправил код: добавил обработку IDisposable.

UPD Мне почему-то запомнилось, что в .Net 3.5 класс RegistryKey не имел реализацию IDisposable, в виду чего я и предложил сначала такой вариант:
Код - C# [Выбрать]
  1. foreach (RegistryKey rk in new RegistryKey[] { spKey, appKey }) {
  2.         rk.Close();
  3.         if (rk is IDisposable) {
  4.                 (rk as IDisposable).Dispose();
  5.         }
  6. }
Сейчас полез, проверил и вижу, что обозначенный класс реализует данный интерфейс и в .Net 3.5. В виду этого отредактировал код, оформив вызов Dispose посредством блоков using, а так же добавил один блок else, пропущенный мною (всплыл при тестировании в AutoCAD 2009).
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 28-11-2014, 20:20:03
Информацию в реестре о наличии\отсутствии SP для текущей версии AutoCAD я бы искал следующим образом:
А я бы сделал проще: проверил значение системной переменной _VERNUM. Для AutoCAD 2014 SP1:
Цитировать
Command: _VERNUM
_VERNUM = "I.108.0.0 (UNICODE)" (read only)
Думаю что для Civil 3D 2014 SP1 аналогичное значение. Но можно проверить.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 28-11-2014, 20:58:55
Спасибо за идею
C3D без SP: _VERNUM = "I.18.0.0 (UNICODE)"
C3D c  SP1: _VERNUM = "I.108.0.4 (UNICODE)"
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 28-11-2014, 23:46:59
Спасибо за идею
C3D без SP: _VERNUM = "I.18.0.0 (UNICODE)"
C3D c  SP1: _VERNUM = "I.108.0.4 (UNICODE)"
Соответственно достаточно проверки первых 5 байт на "I.108"
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 01-12-2014, 16:59:16
C3D c SP2 _vernum: "I.108.0.11 (UNICODE)"
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 01-12-2014, 17:00:46
C3D c SP2 _vernum: "I.108.0.11 (UNICODE)"
В нем же тоже нет уведомления об учебной версии?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 01-12-2014, 17:05:42
Да - c SP2 I.108.0.11 тоже нету сообщения, а штемпель в файле есть.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 01-12-2014, 17:20:24
Тогда это моё предположение остаётся в силе:
Соответственно достаточно проверки первых 5 байт на "I.108"
И его лучше всего проверять перед подпиской на событие DocumentLockModeChanged. Если не "I.108", то и подписывать незачем.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 05-06-2015, 12:59:21
А вот крамольный вопрос. Работаю я это приложение запустил, проверил всё нормально версия не учебная, а потом вставил блок который подпорчен и имеет сообщение о учебной версии. Вопрос в том что при вставке блока сообщение о учебной версии буде работать?  Или,  когда начну загружать файл, узнаю об этом. :)  Это к том у что пару дней я работал с файлом учебной версии, перенёс в свой из подпорченного файла что либо. А в процессе работы изменял, блоки и сохранял их из этого файла в свою библиотеку. Первое я не знаю когда файл стал с сообщением, а узнал уже десяток другой блоков менял. Теперь эти блоки будут вставляться в другие файлы.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 05-06-2015, 15:34:52
Вопрос в том что при вставке блока сообщение о учебной версии буде работать?
А попробовать самому? ;) Думаю, что если ты вставишь такой "испорченный" блок это сообщение появится сразу после окончания команды вставки.
P.S.: У тебя задача разбивается на две:
1) Исправить уже испорченные чертежи.
2) Не допустить порчу новых чертежей.
Так вот EmrInfo.dll решает только вторую задачу. А первую задачи ты можешь решить или при помощи AutoCAD 2015, который при сохранении чертежа эту метку убирает или при помощи DWG TrueView 2015 (в составе которого DWG TrueConvert), которые тоже позволяет убрать метку.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 06-06-2015, 07:22:25
А попробовать самому?
Спасибо. Попробовать конечно можно, но дело в том что сегодня не знаю какие блоки и файлы у меня подпорчены. От того и вопрос, что бы знать к чему готовится. И потом я говорю о последней сессии когда обнаружил о таком приколе и это около 20 блоков. В конечном итоге, всё может оказаться значительно веселее.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 06-06-2015, 13:30:49
Попробовать конечно можно, но дело в том что сегодня не знаю какие блоки и файлы у меня подпорчены.
Т.е. вопрос заключается в том, что необходима массовая проверка dwg-файлов на наличие в них заразы? Например, проверить все dwg-файлы в заданном подкаталоге?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 07-06-2015, 07:11:09
необходима массовая проверка
Смотрите. Я с помощью вашего приложения справлюсь со своими проблемами, а контора пока не готова к этому. С момента как начал разбираться выяснил,  первое, что при наличии штампа "Учебной версии" в 2014 версии на плоттер она не выходит. В общем, внутри конторы это как бы не вопрос. У нас в конторе у всех  2014. Есть только одна 2012. На ней я и тестировал этот момент. Т.е. вроде печать нормально в пределах конторы. А вот отправляя на сторону файл DWG, там могут оказаться не только 2014 но и ранние версии. Я выразил это мнение, пока начальство молчит. Исходя из этого свои огрехи я выловлю по ходу. А вопрос проверки всех файлов в конторе не могу сказать. Менталитет и логика израильтян, не всегда вписывается в наши понятия. Они типа живут сегодняшним днём. Что будет завтра, будет завтра тогда и будет искаться решение.  Я сказал, что есть версия на английском для проверки наличия штампа об учебной версии.  У меня стоит сейчас сообщение на русском, но чуть позже переведу  на английскую.  Когда отсутствую, могут  сесть за компьютер и открыть файл. Если будет файл со штампом то получат сообщение, что бы им было понятно, о чём речь.
Вкратце так.

Вот возникла одна проблема. При автосохранении файла пишет что Присутствует штамп учебной версии. Ситуация была такая. Вставлял блок получил сообщение что блок имеет штамп учебной версии. Нашёл файл блока открыл получил сообщение о штампе персохранил в DXF. Закрыл файл, потом открыл файл DXF и сохранил DWG. При последующем отрытии собщение о штампе отсутсвовало. Потом обнововил блоки в файле в который вставлял, и там сообщение исчезло, анологично при открытии файла сообщение о штампе отсутсвовалло. Но при автосообщении выскакивает сообщение что штамп есть. Я пару раз вызрузил и загрузил файл сообщения не было.

Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 07-06-2015, 18:23:08
Честно говоря из последней проблемы я мало что понял, кроме того, что моя программа определяет файл автосохранения как "зараженный".
Я переделал код и добавил две команды:
1) CheckEmr - проверяет открытый в AutoCAD файл и сообщает "заражен" он или нет.
2) CheckFilesEmr - проверяет выбранные пользователем dwg-файлы. Пути к "зараженным" dwg-файлам печатаются в командной строке.
Код - C# [Выбрать]
  1. using System;
  2. using System.Reflection;
  3. using System.Resources;
  4. using System.Globalization;
  5. using System.Collections.Generic;
  6. using Autodesk.AutoCAD.Runtime;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Geometry;
  10. using Autodesk.AutoCAD.EditorInput;
  11. using AcRx = Autodesk.AutoCAD.Runtime;
  12. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  13. using AcDb = Autodesk.AutoCAD.DatabaseServices;
  14. using AcGe = Autodesk.AutoCAD.Geometry;
  15. using AcEd = Autodesk.AutoCAD.EditorInput;
  16.  
  17. // This line is not mandatory, but improves loading performances
  18. [assembly: ExtensionApplication(typeof(EmrInfo.MyPlugin))]
  19.  
  20. namespace EmrInfo
  21. {
  22.   public class MyPlugin : IExtensionApplication
  23.   {
  24.     static bool isRussian = (SystemObjects.DynamicLinker.ProductLcid == 1049);
  25.  
  26.     List<string> fileNames = new List<string>();
  27.  
  28.     void IExtensionApplication.Initialize()
  29.     {
  30.       try
  31.       {
  32.         string ver = AcAp.Application.GetSystemVariable("_VERNUM") as string;
  33.         if (ver.ToUpper().Substring(0, 5) == "I.108")
  34.         {
  35.           AcAp.Application.DocumentManager.DocumentLockModeChanged +=
  36.             new AcAp.DocumentLockModeChangedEventHandler(DocumentManager_DocumentLockModeChanged);
  37.         }
  38.       }
  39.       catch { }
  40.     }
  41.  
  42.     void IExtensionApplication.Terminate()
  43.     {
  44.     }
  45.  
  46.     List<AcDb.Database> GetAllXrefedDatabase(AcDb.Database db)
  47.     {
  48.       List<AcDb.Database> dbs = new List<AcDb.Database>();
  49.       if (db != null)
  50.       {
  51.         if (!dbs.Contains(db)) dbs.Add(db);
  52.         AcDb.XrefGraph xg = db.GetHostDwgXrefGraph(true);
  53.         AcDb.XrefGraphNode root = xg.RootNode as AcDb.XrefGraphNode;
  54.         for (int i = 0; i < root.NumOut; i++)
  55.         {
  56.           AcDb.XrefGraphNode node = root.Out(i) as AcDb.XrefGraphNode;
  57.           if (node.XrefStatus == AcDb.XrefStatus.Resolved)
  58.           {
  59.             AcDb.Database db_child = node.Database;
  60.             if (db_child != null && !dbs.Contains(db_child))
  61.             {
  62.               List<AcDb.Database> dbs_child = GetAllXrefedDatabase(db_child);
  63.               for (int j = 0; j < dbs_child.Count; j++)
  64.                 if (!dbs.Contains(dbs_child[j])) dbs.Add(dbs_child[j]);
  65.             }
  66.           }
  67.         }
  68.       }
  69.       return dbs;
  70.     }
  71.     public void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  72.     {
  73.       try
  74.       {
  75.         AcDb.Database db = e.Document.Database;
  76.         fileNames.Clear();
  77.         List<AcDb.Database> dbs = GetAllXrefedDatabase(db);
  78.         string fileNamesString = "";
  79.         for (int i = 0; i < dbs.Count; i++)
  80.         {
  81.           if (dbs[i].IsEmr && !fileNames.Contains(dbs[i].Filename))
  82.           {
  83.             fileNames.Add(dbs[i].Filename);
  84.             fileNamesString += ("\n<" + dbs[i].Filename + ">");
  85.           }
  86.         }
  87.         if (fileNamesString.Length > 0)
  88.         {
  89.           AcAp.Application.ShowAlertDialog(isRussian ?
  90.             "\n!!! ВНИМАНИЕ-ВНИМАНИЕ-ВНИМАНИЕ !!!" +
  91.             "\nСледующие чертежи содержат метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА:"
  92.             + fileNamesString :
  93.             "\n!!! ATTENTION-ATTENTION-ATTENTION !!!" +
  94.             "\nNext dwg-files has a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT:"
  95.             + fileNamesString
  96.           );
  97.         }
  98.       }
  99.       catch { };
  100.     }
  101.    
  102.  
  103.     [CommandMethod("CheckEmr")]
  104.     public static void CheckEmr()
  105.     {
  106.       if (AcAp.Application.DocumentManager.MdiActiveDocument.Database.IsEmr)
  107.       {
  108.         AcAp.Application.ShowAlertDialog(isRussian ?
  109.           "ВНИМАНИЕ: Чертеж содержит метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА!!!" :
  110.           "ATTENTION: Drawing has a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT!!!");
  111.       }
  112.       else
  113.       {
  114.         AcAp.Application.ShowAlertDialog(isRussian ?
  115.           "Чертеж НЕ содержит метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА!!!" :
  116.           "Drawing has NOT a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT!!!");
  117.       }
  118.     }
  119.     [CommandMethod("CheckFilesEmr")]
  120.     public static void CheckFilesEmr()
  121.     {
  122.       AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  123.       if (doc == null) return;
  124.       AcEd.Editor ed = doc.Editor;
  125.       Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
  126.       openFileDialog.Title = isRussian ? "Выберите dwg-файлы" : "Select dwg-files";
  127.       openFileDialog.Filter = isRussian ? "dwg-файлы|*.dwg" : "dwg-files|*.dwg";
  128.       openFileDialog.Multiselect = true;
  129.       bool? bClickedOK = openFileDialog.ShowDialog();
  130.       if (!bClickedOK.HasValue || !bClickedOK.Value) return;
  131.       ed.WriteMessage(isRussian ?
  132.         "\nСледующие файлы имеют метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА:\n" :
  133.         "\nNext dwg-files has a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT:\n");
  134.      
  135.       foreach (string fileName in openFileDialog.FileNames) {
  136.         System.Windows.Forms.Application.DoEvents();
  137.         using (AcDb.Database db = new Database(false, false))
  138.         {
  139.           try
  140.           {
  141.             db.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndAllShare, false, "");
  142.             if (db.IsEmr) ed.WriteMessage("{0}\n");
  143.           }
  144.           catch {}
  145.         }
  146.       }
  147.     }
  148.   }
  149. }
Исходники и EmrInfo.dll прицеплены в архиве.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 08-06-2015, 07:33:01
Честно говоря из последней проблемы я мало что понял, кроме того, что моя программа определяет файл автосохранения как "зараженный".
В момент автоссохранения, появляется сообщение что в файле присутствует штам учебной версии, хотя я его удалил через пересохранение в  DXF. При повторном открытии файла нет сообщения что штам есть, но в этом же файле в момент автосохранения появляется сообщение что в файле присуствует штамп учебной версии. А сами файлы Автосохранения я не открывал. Хотя наверное надо было. Вчера не подумал на эту тему.
Где то было написанно как подкючить это приложение что бы не загружать его каждый раз, но не могу найти эту тему.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 08-06-2015, 16:32:12
Где то было написанно как подкючить это приложение что бы не загружать его каждый раз, но не могу найти эту тему.
Самый простой способ - это правка реестра. Если не боишься с ним работать, то я напишу что и как.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 08-06-2015, 17:09:17
Я подумал и решил, что для простоты (а особенно если нужно будет поставить эту программу сотрудникам вашей фирмы), то достаточно будет разархивировать прикреплённый файл в каталог "C:\Program Files\Autodesk\ApplicationPlugins" (считается, что системный диск C: - если нет, то в соответствующий каталог системного диска). В результате появится каталог "C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle"
EmrInfo.dll будет автоматически загружаться при каждом запуске AutoCAD 2014 - с другими версиями AutoCAD эта программа работать не будет - впрочем в ней и нет необходимости.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 09-06-2015, 06:25:02
Если не боишься с ним работать, то я напишу что и как.
Нет, с реестром я не работал, так что начинать, сегодня не стоит. Вчера подгрузил последнюю версию EmpInfo. Есть проблема. Открываю файл со штампом, получаю сообщение, жму ОК окно не закрывается, жму несколько раз не выходит закрыть, читаю в ком строке предлагается нажать Enter. Поле значительного количества попыток, окно закрывается. Но теперь я хочу закрыть файл, при этом опять появляется окно с сообщением что есть штамп, жму ОК закрытия файла не происходит, снова пытаюсь закрыть файл, опять получаю сообщение и так несколько раз. В конечном итоге файл всё таки удаётся закрыть.
Так что с автозагрузкой я пока повременю.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 09-06-2015, 10:52:16
По поводу надоедливого сообщения предлагаю такую схему - если в одном сеансе работы с AutoCAD в dwg-файле метка была обнаружена и сообщение об этом уже было, то в дальнейшем в этом сеансе сообщений об этом файле не делать. Если такая логика тебя устроит - я так и сделаю.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 09-06-2015, 11:33:41
По поводу надоедливого сообщения предлагаю такую схему - если в одном сеансе работы с AutoCAD в dwg-файле метка была обнаружена и сообщение об этом уже было, то в дальнейшем в этом сеансе сообщений об этом файле не делать.
Вот первый вариант, что был меня, устраивал вполне. Я сегодня вернулся к файлу и 30 поста, просто вчера было в конце дня  и я не ожидал, что придётся попробовать и понять процесс.  Здесь уже если штамп присутствует от сообщение закрывается только после нескольких раз нажатия ОК, и когда закрываешь или сохраняешь опять сообщается что метка есть. И опять же после много кратного нажатия ОК процесс идёт дальше и файл закрывается.(файл я не исправлял так что закрывал с тем что метка остаётся и сообщение оно правильно) Но закрыть или открыть файл тяжело. Да и хватило бы наверное сообщения при открытии и вставке файла. Т.е. если закончил и закрываешь, то уже не важно с меткой или без неё файл. А то что приходит сообщение если вставляешь блок с меткой это вообще отлично. Со ссылочными у меня пока файлы нормальные. Т.е. в новых файлах я слежу за этим. А к старым я пока не возвращался. Так что самый первый вариант меня устраивал выше крыши и там сообщалось что ссылочные имеют метку. Его только по-простому поставить, что бы он загружался при запуске. Хотя и загрузить отдельно не проблема. 
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 09-06-2015, 14:21:22
Если ты сделаешь то что написано здесь: http://adn-cis.org/forum/index.php?topic=1110.msg9845#msg9845, а затем заменишь EmrInfo.dll, на тот, который тебя устраивает, то получишь автозагрузку.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 10-06-2015, 05:49:42
Если ты сделаешь то что написано здесь: http://adn-cis.org/forum/index.php?topic=1110.msg9845#msg9845, а затем заменишь EmrInfo.dll, на тот, который тебя устраивает, то получишь автозагрузку.
Понял. Спасибо. Хорошо попробую.

P.s. сделал всё отлично получилось. :) Спасибо.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 10-06-2015, 16:24:57
Я исправил огрехи с повторным сообщением о метке учебной версии в файле и еще несколько более мелких.
Код - C# [Выбрать]
  1. using System;
  2. using System.Reflection;
  3. using System.Resources;
  4. using System.Globalization;
  5. using System.Collections.Generic;
  6. using Autodesk.AutoCAD.Runtime;
  7. using Autodesk.AutoCAD.ApplicationServices;
  8. using Autodesk.AutoCAD.DatabaseServices;
  9. using Autodesk.AutoCAD.Geometry;
  10. using Autodesk.AutoCAD.EditorInput;
  11. using AcRx = Autodesk.AutoCAD.Runtime;
  12. using AcAp = Autodesk.AutoCAD.ApplicationServices;
  13. using AcDb = Autodesk.AutoCAD.DatabaseServices;
  14. using AcGe = Autodesk.AutoCAD.Geometry;
  15. using AcEd = Autodesk.AutoCAD.EditorInput;
  16.  
  17. // This line is not mandatory, but improves loading performances
  18. [assembly: ExtensionApplication(typeof(EmrInfo.MyPlugin))]
  19.  
  20. namespace EmrInfo
  21. {
  22.   public class MyPlugin : IExtensionApplication
  23.   {
  24.     static bool isRussian = (SystemObjects.DynamicLinker.ProductLcid == 1049);
  25.     static List<string> fileNames = new List<string>();
  26.  
  27.     void IExtensionApplication.Initialize()
  28.     {
  29.       try
  30.       {
  31.         string ver = AcAp.Application.GetSystemVariable("_VERNUM") as string;
  32.         if (ver.ToUpper().Substring(0, 5) == "I.108")
  33.         {
  34.           AcAp.Application.DocumentManager.DocumentLockModeChanged +=
  35.             new AcAp.DocumentLockModeChangedEventHandler(DocumentManager_DocumentLockModeChanged);
  36.         }
  37.       }
  38.       catch { }
  39.     }
  40.  
  41.     void IExtensionApplication.Terminate()
  42.     {
  43.     }
  44.  
  45.     List<AcDb.Database> GetAllXrefedDatabase(AcDb.Database db)
  46.     {
  47.       List<AcDb.Database> dbs = new List<AcDb.Database>();
  48.       if (db != null)
  49.       {
  50.         if (!dbs.Contains(db)) dbs.Add(db);
  51.         AcDb.XrefGraph xg = db.GetHostDwgXrefGraph(true);
  52.         AcDb.XrefGraphNode root = xg.RootNode as AcDb.XrefGraphNode;
  53.         for (int i = 0; i < root.NumOut; i++)
  54.         {
  55.           AcDb.XrefGraphNode node = root.Out(i) as AcDb.XrefGraphNode;
  56.           if (node.XrefStatus == AcDb.XrefStatus.Resolved)
  57.           {
  58.             AcDb.Database db_child = node.Database;
  59.             if (db_child != null && !dbs.Contains(db_child))
  60.             {
  61.               List<AcDb.Database> dbs_child = GetAllXrefedDatabase(db_child);
  62.               for (int j = 0; j < dbs_child.Count; j++)
  63.                 if (!dbs.Contains(dbs_child[j])) dbs.Add(dbs_child[j]);
  64.             }
  65.           }
  66.         }
  67.       }
  68.       return dbs;
  69.     }
  70.     public void DocumentManager_DocumentLockModeChanged(object sender, DocumentLockModeChangedEventArgs e)
  71.     {
  72.       try
  73.       {
  74.         AcDb.Database db = e.Document.Database;
  75.         List<AcDb.Database> dbs = GetAllXrefedDatabase(db);
  76.         string fileNamesString = "";
  77.         for (int i = 0; i < dbs.Count; i++)
  78.         {
  79.           if (dbs[i].IsEmr && !fileNames.Contains(dbs[i].Filename))
  80.           {
  81.             fileNames.Add(dbs[i].Filename);
  82.             fileNamesString += ("\n<" + dbs[i].Filename + ">");
  83.           }
  84.         }
  85.         if (fileNamesString.Length > 0)
  86.         {
  87.           AcAp.Application.ShowAlertDialog(isRussian ?
  88.             "\n!!! ВНИМАНИЕ-ВНИМАНИЕ-ВНИМАНИЕ !!!" +
  89.             "\nСледующие чертежи содержат метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА:"
  90.             + fileNamesString :
  91.             "\n!!! ATTENTION-ATTENTION-ATTENTION !!!" +
  92.             "\nNext dwg-files has a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT:"
  93.             + fileNamesString
  94.           );
  95.         }
  96.       }
  97.       catch { };
  98.     }
  99.    
  100.     [CommandMethod("CheckEmr")]
  101.     public static void CheckEmr()
  102.     {
  103.       if (AcAp.Application.DocumentManager.MdiActiveDocument.Database.IsEmr)
  104.       {
  105.         AcAp.Application.ShowAlertDialog(isRussian ?
  106.           "ВНИМАНИЕ: Чертеж содержит метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА!!!" :
  107.           "ATTENTION: Drawing has a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT!!!");
  108.       }
  109.       else
  110.       {
  111.         AcAp.Application.ShowAlertDialog(isRussian ?
  112.           "Чертеж НЕ содержит метку ФАЙЛ СОЗДАН В УЧЕБНОЙ ВЕРСИИ ПРОДУКТА!!!" :
  113.           "Drawing has NOT a mark PRODUCED BY AN AUTODESK EDUCATIONAL PRODUCT!!!");
  114.       }
  115.     }
  116.     [CommandMethod("CheckFilesEmr")]
  117.     public static void CheckFilesEmr()
  118.     {
  119.       AcAp.Document doc = AcAp.Application.DocumentManager.MdiActiveDocument;
  120.       if (doc == null) return;
  121.       AcEd.Editor ed = doc.Editor;
  122.       Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog();
  123.       openFileDialog.Title = isRussian ? "Выберите dwg-файлы" : "Select dwg-files";
  124.       openFileDialog.Filter = isRussian ? "dwg-файлы|*.dwg" : "dwg-files|*.dwg";
  125.       openFileDialog.Multiselect = true;
  126.       bool? bClickedOK = openFileDialog.ShowDialog();
  127.       if (!bClickedOK.HasValue || !bClickedOK.Value) return;
  128.       ed.WriteMessage(isRussian ? "\nОбработаны файлы:\n" : "\nProcessed files:\n");
  129.      
  130.       foreach (string fileName in openFileDialog.FileNames) {
  131.         System.Windows.Forms.Application.DoEvents();
  132.         using (AcDb.Database db = new Database(false, false))
  133.         {
  134.           try
  135.           {
  136.             db.ReadDwgFile(fileName, FileOpenMode.OpenForReadAndAllShare, false, "");
  137.             if (db.IsEmr)
  138.               ed.WriteMessage(isRussian ? "\tЕсть метка: {0}\n" : "Has mark: {0}\n", fileName);
  139.             else
  140.               ed.WriteMessage(isRussian ? "\tНет  метки: {0}\n" : "Has not mark: {0}\n", fileName);
  141.           }
  142.           catch {}
  143.         }
  144.       }
  145.       ed.WriteMessage(isRussian ? "\nГотово!\n" : "\nDone!\n");
  146.     }
  147.   }
  148. }

Прикрепил EmrInfo.bundle в архиве, которым можно заменить старый. Там же и исходники.
P.S.: Не забывай про команду CheckFilesEmr для массовой проверки dwg-файлов на метку учебной версии.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 11-06-2015, 07:35:49
Спасибо попробую на досуге. Сейчас нормально работаю со старой.  Если проверять файлы все, то нужно исправлять, а я не могу все сразу. Тем более что, в общем, контору не клюнуло серьёзно. А я не хочу через месяц два сидеть с кучей файлов и исправлять. Так что исправляю по мере столкновения, в процессе работы, а начальство пускай думает, я им сообщение о том, что нет сообщения, и что есть решение. Так что для себя проблему решил, когда до начальства дойдет, посмотрим, что будет. Да и  волнуюс за свои блоки. Когда вставляешь меченный блок он сообщает, а вот когда блок уже присутствует уже в файле, не помню что тогда.  Но по ходу разберусь. :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 11-06-2015, 12:21:54
Если проверять файлы все, то нужно исправлять, а я не могу все сразу.
Я так понимаю, что проблема в том, что ты используешь для убирания метки сохранение в DXF. Способ далеко не идеальный и не работает (или работает плохо) с чертежами, созданными в вертикальных приложениях (Civil 3D, Architectural Desktop и т.д.).
Я подумал, взвесил все "За" и "Против", и решил, что раз Autodesk отказался от использования метки учебной версии, то я могу выложить программу (без исходников - этот вопрос не обсуждается), которую я создал и использовал для себя (и только для себя!!!) для снятия этой метки в течении многих лет.
Итак в приложенном архиве есть еще два arx-файла:
EmrTools2014x64.arx
EmrTools2014x32.arx
Если установить новую версию EmrInfo.bundle, то при запуске AutoCAD 2014 появится новая команда EMRCLEAR - эта команда снимает флаг учебной версии в активном чертеже. Она никаких сообщений не выдаёт. При помощи команды CheckEmr можно будет убедится в том, что метка исчезла. Для того, чтобы метка отсутствовала и в соответствующем dwg-файле, чертеж необходимо после этого сохранить. Я не проверял работоспособность этой команды в вертикальных приложениях AutoCAD линейки 2014, но по всей вероятности должно работать.
P.S.: Программа работает Как есть (https://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%BA_%D0%B5%D1%81%D1%82%D1%8C).
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 11-06-2015, 13:18:24
Да Александр Наумович, вы меня озадачили. Для вертикальных приложений я как то  в основном своими файлами пользуюсь, не откуда не получаю и ни куда не передаю. Я с Civil_лом работаю. Но последние дни закрадывается вопрос, а что с файлами Civil_ла. Я работая с Civil часто использую _NCOPY и притаскиваю в файл Civil_ла объекты из ссылочных. И в данной ситуации не факт что файлы получатся не с меткой. И для Civil_ла через DXF ни чего хорошего не получается. Хорошо в конце дня не буду пробовать, а завтра с утра на свежую голову попробую. Так файла *.arx работают во всех приложениях и самом Автокаде?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 11-06-2015, 13:22:43
Так файла *.arx работают во всех приложениях и самом Автокаде?
Те arx-файлы, которые я выложил, должны работать в AutoCAD только версии 2014 без и с Service Pack, а так же в 2014-ых вертикальных приложениях.
Проверишь в Civil 3D 2014. :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 11-06-2015, 14:39:18
Проверишь в Civil 3D 2014
Да обязательно проверю.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 12-06-2015, 08:54:52
Если установить новую версию EmrInfo.bundle
Что то с утра не пошло. Разместил папку на то месте где была старая. При запуске Автокада и открытия файл появляется сообщение что есть метка. Сохраняю и открываю в 2012 сообщение есть. При последующих открытиях в 2014 сообщения нет. Пока вернул предыдущую сборку. Возможно что файлы *.arx  нужно разместитьв другой папке, а не только подгрузить? Наверное отложу до воскресенья. И ещё раз с утра попробую разобраться.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 12-06-2015, 10:37:28
Сохраняю и открываю в 2012 сообщение есть.
А команду EMRCLEAR запускал?

Короче говоря, лучше один раз увидеть чем 100 раз услышать:

Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 12-06-2015, 11:54:53
А команду EMRCLEAR запускал?

Конечно не запускал. :) Щас попоробую.
PS. Вот теперь всё работает. Осталось макрос с ваять, и забыть. С блоками как это буде, догадываюсь, что также останется сообщение, и потом открыть файл и провести чистку. Ссылочные не чистит, т.е. нужно каждый открыть и повести процедуру и сохранить и тогда ОК.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 12-06-2015, 16:16:43
Осталось макрос с ваять, и забыть.
Кнопку с кодом
Код - INI [Выбрать]
  1. ^C^CEMRCLEAR;_QSAVE;
?
С блоками как это буде, догадываюсь, что также останется сообщение, и потом открыть файл и провести чистку. Ссылочные не чистит, т.е. нужно каждый открыть и повести процедуру и сохранить и тогда ОК.
Именно. Хотя я не понял это был вопрос или утверждение.  ;)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 12-06-2015, 17:03:00
Хотя я не понял это был вопрос или утверждение
Перспективный план на следующую неделю. За макрос спасибо. Сделаю кнопку на работе. :)

PS. Что намечал, выполнил, установил макрос на кнопку. С блоками тоже хорошо. Заморочек вообще нет. Сегодня попался блок с меткой. Вставил в файл, запустил макрос  "1.^C^CEMRCLEAR;_QSAVE;" метка с блока была снята и основной файл чистый. Затем сохранил через WBLOCK с тем же именем в библиотеку и файл блока без метки. И открывать его не надо. Всё опробовано из описания. Большое спасибо Александр Наумович. :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: tukoan от 16-06-2015, 15:02:02
Если установить новую версию EmrInfo.bundle, то при запуске AutoCAD 2014 появится новая команда EMRCLEAR - эта команда снимает флаг учебной версии в активном чертеже. Она никаких сообщений не выдаёт. При помощи команды CheckEmr можно будет убедится в том, что метка исчезла.

Команда EMRCLEAR работает, а на команды CheckEmr и CheckFilesEmr выдается сообщение о неизвестной команде.
Система Win7 x64, AutoCAD 2014 SP1, NetFrameWork  был 4.52 доустановил 4.0.
Подскажите, пож-ста, чего не хватает до полного счастья?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 16-06-2015, 15:06:11
Команда EMRCLEAR работает, а на команды CheckEmr и CheckFilesEmr выдается сообщение о неизвестной команде.
Странно. Попробуй при помощи команды _NETLOAD загрузить EMRINFO.DLL из указанной папки.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: tukoan от 16-06-2015, 16:49:18
Странно. Попробуй при помощи команды _NETLOAD загрузить EMRINFO.DLL из указанной папки.
Попробовал. Не помогло.
Команда: _NETLOAD
Не удалось загрузить сборку. Сведения об ошибке: System.IO.FileLoadException: Не удалось загрузить файл или сборку "file:///C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\Contents\EmrInfo.dll" либо одну из их зависимостей. Операция не поддерживается. (Исключение из HRESULT: 0x80131515)
Имя файла: 'file:///C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\Contents\EmrInfo.dll' ---> System.NotSupportedException: Предпринята попытка загрузить сборку из сетевого ресурса, что в предыдущих версиях .NET Framework могло привести к помещению сборки в "песочницу". Этот выпуск .NET Framework не включает политику CAS по умолчанию, поэтому данная загрузка может быть опасной. Если эта нагрузка не предназначена для изоляции сборки, включите переключатель loadFromRemoteSources. Дополнительные сведения см. на странице http://go.microsoft.com/fwlink/?LinkId=155569.
   в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
   в System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark)
   в System.Reflection.Assembly.LoadFrom(String assemblyFile)
   в Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
   в loadmgd()


Команда: CheckFilesEmr
Неизвестная команда "CHECKFILESEMR".  Для вызова справки нажмите F1.

Команда: CheckEmr
Неизвестная команда "CHECKEMR".  Для вызова справки нажмите F1.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 16-06-2015, 16:52:15
Почитай эту статью: http://through-the-interface.typepad.com/through_the_interface/2011/07/loading-blocked-and-network-hosted-assemblies-with-net-4.html
Если в двух словах, то в acad.exe.config (находится в том же каталоге, что и acad.exe) нужно вписать:
Код - XML [Выбрать]
  1. <runtime>
  2.     <loadFromRemoteSources enabled="true"/>
  3. </runtime>

Ну и возможно будет достаточно разблокировать (Unblock) этот dll-файл, как показано здесь:

Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: tukoan от 17-06-2015, 10:13:26
Если в двух словах, то в acad.exe.config (находится в том же каталоге, что и acad.exe) нужно вписать:
Код - XML: [Выделить]
<runtime>
    <loadFromRemoteSources enabled="true"/>
</runtime>

Ну и возможно будет достаточно разблокировать (Unblock) этот dll-файл

Работают оба  варианта. Проблема закрыта.
Большое спасибо Вам, Александр Наумович, за предоставленные программы.
Хочется отметить скорость с которой Вы "разделываетесь" с поставленной задачей.

Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 17-06-2015, 14:51:09
Хочется отметить скорость с которой Вы "разделываетесь" с поставленной задачей.
Просто для большинства проблем уже есть известные решения, о которых я помню, или помогает поиск в интернете.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Пашин Евгений от 21-08-2015, 07:31:40
Если в acad.exe.config уже есть тэг <runtime>, то

Код - XML [Выбрать]
  1. <runtime>
  2.     <loadFromRemoteSources enabled="true"/>
  3. </runtime>

вписывать ниже или внутрь тэга?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 21-08-2015, 09:46:13
Если в acad.exe.config уже есть тэг <runtime>, то

Код - XML [Выбрать]
  1. <runtime>
  2.     <loadFromRemoteSources enabled="true"/>
  3. </runtime>

вписывать ниже или внутрь тэга?
Внутрь.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Пашин Евгений от 07-02-2017, 09:42:43
Александр Наумович, добрый день.

Возникла необходимость допилить Ваш проект (EmrInfo) под Autodesk Civil 3D 2017.

Подправил ссылки, компилирую. Ошибка:

'Database" не содержит определения для "IsEmr" и не удалось найти метод расширения "IsEmr", принимающий тип "Database" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).

Заглядываю внутрь и пытаюсь вместо IsEmr найти подходящее свойство, но увы, самого свойства IsEmr не вижу или даже хотя бы что-то аналогичное. Подскажите, может это свойство стало обитать в другом месте?

Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 07-02-2017, 12:58:25
Александр Наумович, добрый день.

Возникла необходимость допилить Ваш проект (EmrInfo) под Autodesk Civil 3D 2017.

Подправил ссылки, компилирую. Ошибка:

'Database" не содержит определения для "IsEmr" и не удалось найти метод расширения "IsEmr", принимающий тип "Database" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку).

Заглядываю внутрь и пытаюсь вместо IsEmr найти подходящее свойство, но увы, самого свойства IsEmr не вижу или даже хотя бы что-то аналогичное. Подскажите, может это свойство стало обитать в другом месте?



Начиная с AutoCAD 2015 этого свойства нет, так как в нём эта метка стирается. Т.е. если в AutoCAD 2015 (и более новых) открыть чертеж с меткой учебной версии и сохранить, то метка исчезает. Ну и проверить была ли эта метка изначально в dwg-файле в версиях AutoCAD 2015 и новее уже нельзя.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Пашин Евгений от 07-02-2017, 13:04:47
Начиная с AutoCAD 2015 этого свойства нет, так как в нём эта метка стирается. Т.е. если в AutoCAD 2015 (и более новых) открыть чертеж с меткой учебной версии и сохранить, то метка исчезает. Ну и проверить была ли эта метка изначально в dwg-файле в версиях AutoCAD 2015 и новее уже нельзя.

Благодарю.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 05-04-2017, 09:54:07
Спасибо попробую на досуге.
Пришёл это самый досуг. Правда не по моей воле. Установили Windows 10 и обещали что все будет работать. Я не проверил прошло время и обнаружил, что программа снятия метки не работает и не сообщает о том что таковая присутствует. Короче имею кучу файлов с меткой. В общем теперь поставил последний вариант и он нормально работает.   Так что еще раз спасибо за программу. Но вот с автозагрузкой что не получается
Размести C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\EmrInfo.bundle\Contents
дал ссылку на этот каталог и вот перегрузил и программа не заработала. Нужно в ручную подгружать.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 05-04-2017, 10:19:38
Вроде bundle должны быть в папке Users...
В надежные пути путь добавлен?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 05-04-2017, 10:31:48
Вроде bundle должны быть в папке Users...
Не обязательно.
Размести C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\EmrInfo.bundle\Contents
Неправильно. Правильно так:
C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\Contents
(т.е. не должно быты повторного EmrInfo.bundle в пути)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Doublefish от 05-04-2017, 10:42:59
 bundle не обязательно должно быть в  Users..., а вот для приложений в apps.autodesk.com было такое требование
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 06-04-2017, 07:10:03
Неправильно. Правильно так:C:\Program Files\Autodesk\ApplicationPlugins\EmrInfo.bundle\Contents
Большое спасибо Александр. Теперь заработало!!!
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Evgenia от 13-04-2017, 12:15:45
Александр Ривилис, скажите, пожалуйста, те файлы, которые вы выложили для 2014 автокада, чтобы удалять метку "создано учебной версией", нельзя ли сделать и для 2012? :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 13-04-2017, 12:24:55
Александр Ривилис, скажите, пожалуйста, те файлы, которые вы выложили для 2014 автокада, чтобы удалять метку "создано учебной версией", нельзя ли сделать и для 2012? :)
Увы. Я и для 2014-ой их сделал только потому, что в нём (и в последующих) отказались от этой метки. Но в 2012-ой версии она есть и я не имею права её снимать.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Evgenia от 13-04-2017, 12:26:19
Понятно, спасибо!
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 13-04-2017, 16:16:37
Evgenia
А почему бы вам для удаления метки не воспользоваться бесплатной Autodesk'овской утилитой DWG TrueView? Начина с версии 2015 она позволяет убирать метку "учебной версии": https://knowledge.autodesk.com/support/autocad/troubleshooting/caas/sfdcarticles/sfdcarticles/Educational-Plot-Stamp-Removal-Issues.html
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Evgenia от 13-04-2017, 21:33:29
Александр Ривилис, да, спасибо! Воспользуюсь именно этим приложением. Просто гораздо удобнее запустить программу не выходя из автокада  :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 03-05-2018, 15:29:23
https://mikhailov-andrey-s.blogspot.ru/2018/04/chto-novogo-v-autocad-2019-3.html
Цитировать
Autodesk решил, что хватит халявы, и решил вернуть маркировку файлов, созданных в студенческой версии AutoCAD.
Теперь введя в командную строку системную переменную STUDENTDRAWING можно узнать, создан ли был файл в коммерческой версии (STUDENTDRAWING = 0), или в учебной (STUDENTDRAWING = 1)
Также при печати возвращается надпись "СОЗДАНО В СТУДЕНЧЕСКОЙ ВЕРСИИ ПРОДУКТА AUTODESK".
Радость была недолгой  :-\
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 03-05-2018, 15:31:48
Радость была недолгой  :-\
Не всё так страшно. В отличие от старых версий "заражение" файлов учебной меткой не происходит. И снова появилось API Database.IsEmr :-)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 03-05-2018, 15:34:58
Если верить Андрею Михайлову, то заражение возможно:
Цитировать
Также нужно помнить, что достаточно в свой проект скопировать какой-то безобидный объект из "студенческого" файла, чтобы навсегда заразить свой коммерческий проект надписями. Будьте бдительны и, если уж используете рабский труд студентов, то делайте это аккуратно и с умом.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Дмитрий Загорулькин от 03-05-2018, 15:49:02
Проверил - действительно, метка учебной версии не передаётся в нормальный файл при копировании объектов из учебного. Видимо, Андрей ошибся.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 03-05-2018, 15:50:13
Проверил - действительно, метка учебной версии не передаётся в нормальный файл при копировании объектов из учебного. Видимо, Андрей ошибся.
Именно:
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 06-05-2018, 09:43:45
Да вроде говорили что ещё в 2015 отказались помечать файлы учебной версии.  Я сегодня ещё работаю в 2014 но сообщение о метке выскакивает редко, а свои подпорченные файлы блоков я почистил. А что в 2019 опять возникла проблема с меткой учебной версии?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 06-05-2018, 16:14:45
А что в 2019 опять возникла проблема с меткой учебной версии?
Возвращается в 2019-ой версии.
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Valery Brelovsky от 09-05-2018, 08:07:08
Спасибо, понял. :)
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: bender от 27-04-2021, 15:10:11
Подниму тему.

Может я чего-то пропустил. Более вменяемых способов снять эту (вырезано цензурой) метку не появилось, кроме как пересохранение через dxf или DWG TrueView?
Название: Re: Создано в программе Autodesk для учебных заведений
Отправлено: Александр Ривилис от 27-04-2021, 15:38:40
bender,
Так как Autodesk повторно ввёл эту метку для образовательных лицензий в последних версиях, то дальнейшее обсуждение этой темы закрываю!