Jump to content

ISL

Клуб разработчиков
  • Posts

    447
  • Joined

  • Last visited

  • Days Won

    4

Everything posted by ISL

  1. "Чемодан" автозагрузки в APPLOAD срабатывает после загрузки первого документа, что для работы с первым документом, действительно, не особо подходит. Создал приложенный load.config в "c:\ProgramData\Nanosoft\nanoCAD x64 21.0\DataRW", пример CustomObjects.dll из SDK грузится на старте, примитив TextInBox в переданном на старте документе живой, и команда TEXTINBOX тоже работает. @Robink, у Вас не работает только на Вашем модуле или и на примере из SDK тоже? load.config
  2. @doctorraz всё верно написал, MultiCAD.NET на 4.5, остальное на 4.0.
  3. RXObject.GetClass() на MultiCAD.NET объектах не работает, т.к. у них нет атрибута HostMgd.Runtime.WrapperClass(), связывающего .NET класс и DXF имя объекта. А нет его там, т.к. MultiCAD.NET не зависит от классического .NET API. RxClass по DXF имени можно получить так: SystemObjects.ClassDictionary.At("AcDbLine");
  4. Так нет, видать, такого класса среди зарегистрированных. А если у экземпляра его класс спросить?
  5. DXF код добавили в техобновление 21-й версии. В ранее выпущенных версиях можно попытаться добраться до пути через COM, свойство IAcadBlock.Path.
  6. Технология создания LISP функций на .NET в nanoCAD-e не реализована. Создал в Клубе разработчиков пожелание #455.
  7. В nanoCAD-е подобные вычисления произвести куда проще: Команда: L L,LINE,ЛИНИЯ,ОТ,ОТРЕЗОК - Отрезок Первая точка: 200,200+5 Следующая точка: @300,300-10
  8. Странно, но факт, галочка разрешения комментирования была в настройках снята. Не помню такого, чтобы это делалось специально. Подкрутил, теперь писать комментарии можно.
  9. Базу данных без загрузки в редактор можно получить при помощи Utility.OpenDatabase(). var app = getApp(); app.Visible = true; var odR15_dwg = 12 var fIn = app.Utility.ChooseFile("File to load", "DWG files (*.dwg)|*.dwg|DXF files (*.dxf)|*.dxf|All files (*.*)|*.*||") var db1 = app.Utility.OpenDatabase(fIn); var ls = db1.Layers; echo("\r\n We have " + ls.Count + " layers"); ls.Add("foo" + ls.Count); echo(" and now we have another one " + ls.Count); app.Utility.SaveDatabase(db1, app.Utility.ChooseFile("File to save", "DWG files (*.dwg)|*.dwg|DXF files (*.dxf)|*.dxf|All files (*.*)|*.*||", 12), odR15_dwg) function echo(m) { WScript.StdOut.Write(m + "\r\n") } function getApp() { var app; var appCLS = "nanoCAD.Application"; try { app = WScript.GetObject(appCLS); WScript.StdOut.WriteLine("got it using GetObject()") } catch (ex) { try { app = WScript.CreateObject(appCLS) WScript.StdOut.WriteLine("got it using new CreateObject()") } catch (ex) { WScript.StdErr.WriteLine("There is no app") WScript.Quit(); } } return app; }
  10. В nanoCAD-е нет механизма загрузки по требованию, реализованного, как предварительная регистрация связки команда-модуль. Для загрузки Публикатора CADLib, входящего в состав nanoCAD-а, мы сами используем подобную Вашей конструкцию: (defun RUN_CADLIBENABLER_COMMAND (command_name / ) (if (eq nil (member "linCSLoader.nrx" (applist))) (appload "CADLibEnabler\\bin\\linCSLoader.nrx") ) (command command_name) (princ) )
  11. Перед /register всегда автоматически проходит /unregister, и он-то похоже, работает правильно. Ломать не строить ;).
  12. Действительно, под ограниченным пользователем регистрация не работает, а должна. Причём, эффект наблюдаю и в 21.0 и в 20.1. Будем разбираться.
  13. > HKEY_CLASSES_ROOT\nanoCADx64.Application.21.0 действительно появляется. > А вот в HKEY_USERS его нет ... Значит, не под текущим пользователем смотрите. HKEY_CLASSES_ROOT — это же представление (view), которое собирается из ключа HKEY_LOCAL_MACHINE\SOFTWARE\Classes, на который сверху накладывается ключ HKEY_CURRENT_USER\SOFTWARE\Classes. Не обращали, кстати, внимание на такую "странность"? Чтобы удалить ключ в HKEY_CLASSES_ROOT, это надо сделать дважды, удалил-F5-появилось-удалил-F5-уже не появилось. Это так именно потому, что сперва удаляется из HKCU, по F5 отображается HKLM и следующее удаление (если прав хватит) удаляет уже там. Что касается перерегистрации на 21-ю версию, проблему подтвердить не удалось, у меня что зарегистрировано, то и стартует. Проверял следующим скриптом: var ncApp = getNCApp(); ncApp.Visible = true; var ThisDrawing = ncApp.ActiveDocument; function getNCApp() { var ncApp; var appCLS = "nanoCAD.Application"; try { ncApp = GetObject(appCLS) } catch (ex) { try { ncApp = new ActiveXObject(appCLS); } catch (ex) { WScript.StdErr.WriteLine("There is no ncApp") WScript.Quit(); } } return ncApp; }
  14. 21-я и 20-я версия в реестре различаются, после ncad.exe /register ключ HKEY_CLASSES_ROOT\nanoCADx64.Application.21.0 появляется. Аналогично и после установки, инсталлятор тоже зовёт ncad.exe /register.
  15. Странно выглядит реестр. А где в нём nanoCADx64.Application.21.0? Что зарегистрировано на nanoCAD.Application, 20.x или 21.x, нужно смотреть в ключе nanoCAD.Application, а не в nanoCADx64.Application.20.0, откуда там взяться 21-й версии? Что касается подключения к бегущему nanoCAD-у, для различения версий, рекомендуем использовать полные названия вида nanoCADx64.Application.20.0 или nanoCADx64.Application.21.0.
  16. Эти данные подхватывает инсталлятор из системы, в дальнейшем их изменить нельзя.
  17. Может, от файлов зависит? Я попробовал пару — не повторяется. Опять же, добавлял код в пример HelloHost.
  18. В 20.1 описанного эффекта не наблюдаю. В какой версии смотрите?
  19. Чисто из спортивного интереса, вынести данные из транзакции (именно данные, а не объект) можно при помощи Clone(), но это получится уже другой объект, не добавленный в базу чертежа.
  20. Ну так это давно известно, что AutoCAD не соответствует своей собственной документации и рекомендациям по времени жизни объектов, которые живут дольше, чем должны. Но практика работы с большими приложениями, работающими под обеими платформами, показывает, что отказ от обращений к закрытым объектам повышает надёжность приложений. У нас всё просто: закрыли — значит закрыли, проблема видна сразу. В АвтоКАДе же такой код почти всегда работает, но иногда сборщик мусора приходит чуть раньше и начинаются блуждающие проблемы. Справедливо и для C++, где нет сборщика мусора, но эффект есть.
  21. Взял пример SDK HelloHost, добавил в команду HelloHost_Example1 строки: Database db = HostApplicationServices.WorkingDatabase; using (Transaction tr = db.TransactionManager.StartTransaction()) { var lt = tr.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; } Собрал в VS2012, загрузил в 20.1 x64: Что я делаю не так?
  22. Приведите, пожалуйста, код, в котором получено значение lt.
  23. Содержимое UserDataCache копируется каждому пользователю в AppData при первом старте, так что модифицированный cfg.ini попадёт куда нужно.
  24. Тоже костыль, но вероятно чуть поудобней, чем удаление ссылки. Можно вместо тяжёлого файла положить одноимённый пустой и лёгкий. Главное, не забыть вернуть всё обратно.
×
×
  • Create New...