Перейти к содержанию

Dmitros

Пользователи
  • Публикаций

    4
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о Dmitros

  • Звание
    Новичок

Информация

  • Пол
    Мужчина
  1. ISL спасибо, все получилось. Единственно осталось выяснить закончилась ли команда plot печатью или окно с настройками печати просто закрыли. Есть идея решения этой пооблемы через просмотр очереди печати.
  2. Извините, не увидел этой темы http://forum.nanocad.ru/index.php?showtopic=5082&view=findpost&p=18737 однако остался вопрос автоматического запуска команды из загруженной сборки при старте nanocad или открытии документа. Еще раз извините, если опять чего-то недоглядел
  3. Как автоматически при запуске nanocad запускать .Net приложение и команду из него. Я знаю, что имеется возможность автоматической загрузки .Net сборки при открытии документа (Пункт меню "загрузка приложения". При этом сборка загружается, но команду нужно вызывать вручную), Есть пункт меню "Загрузка .Net приложения", но его тоже нужно вызавать вручную (указывать файл сборки). Использую 5-й nanocad. Спасибо за помощь. Более подробно проблема описана здесь http://forum.nanocad...indpost&p=24730
  4. Есть задача: отметить рамкой отпечатанную область после вывода на печать части изображения из листа модели. Понимаю, что задача не сложная, но я столкнулся с некоторыми проблемами. 1) Как автоматически при запуске nanocad запускать .Net приложение и команду из него. (При вызове команды срабатывает конструктор в котором я подписываюсь на событие завершения печати) 2) Событие завершения печати EndPlot есть, но оно не срабатывает, поэтому приходится использовать EndCommand и в нем узнавать какая команда завершается. Однако EndCommand (Plot)срабатывает даже, если нажать кнопку «Отмена» в окне печати или вовсе закрыть его, при этом выбранная область печать также отмечается, чего не должно происходить. Первую проблему пытался решить так. Сборка .Net подгружается автоматически при открытии документа, становится доступна команда PrintMarker, при вызове которой я пытался вызвать команду PLOT, однако оказывается нельзя вызвать команду, если активна другая. Подскажите как возможно решить эти проблемы. Ниже привожу исходный код. using System.Runtime.InteropServices; using System.Windows.Forms; using OdaX; using Teigha.Runtime; namespace nanoPrintMarker { public class nanoClass { private nanoCAD.Document _document; private nanoCAD.Application _ncApp; public nanoClass() { _ncApp = (nanoCAD.Application) Marshal.GetActiveObject("nanoCAD.Application"); _ncApp.EndCommand -= _ncApp_EndCommand; _ncApp.EndCommand += _ncApp_EndCommand; } private void _ncApp_EndCommand(string CommandName) { // заходит! if (CommandName == "Plot") { MarkPrintArea();//отмечаем область печати } if (CommandName == "PrintMarker") { //нажимаем ctrl+P :-) SendKeys.Send("PLOT" + "{ENTER}"); // ничего не происходит SendKeys.SendWait("PLOT" + "{ENTER}"); // пишет, что нельзя запустить команду, когда активна другая } } private void MarkPrintArea() { object ur; object ll; object ul; object lr; object tchk; _ncApp.ActiveDocument.Utility.CreateTypedArray(out tchk, 5, new object[] {0, 0, 0}); AcadViewport vp = _ncApp.ActiveDocument.ActiveViewport; vp.Target = tchk; // получаем выбранную область для печати _ncApp.ActiveDocument.ActiveLayout.GetWindowToPlot(out ll, out ur); ul = newdouble[] {((double[]) ll)[0], ((double[]) ur)[1]}; lr = newdouble[] {((double[]) ur)[0], ((double[]) ll)[1]}; // создаемслой AcadLayer layer = _ncApp.ActiveDocument.Layers.Add("PrintMarkerLayer"); _ncApp.ActiveDocument.ActiveLayer = layer; layer.Plottable = false; layer.color = AcColor.acGreen; // диагонали _ncApp.ActiveDocument.ModelSpace.AddLine(ul, lr); _ncApp.ActiveDocument.ModelSpace.AddLine(ll, ur); // прямоугольник _ncApp.ActiveDocument.ModelSpace.AddLine(ll, ul); _ncApp.ActiveDocument.ModelSpace.AddLine(ul, ur); _ncApp.ActiveDocument.ModelSpace.AddLine(ur, lr); _ncApp.ActiveDocument.ModelSpace.AddLine(lr, ll); } private void setupPlotConfig() { var myPlotConfig = _ncApp.ActiveDocument.ActiveLayout; _document = _ncApp.ActiveDocument; myPlotConfig.RefreshPlotDeviceInfo(); myPlotConfig.ConfigName = "Canon LBP3010/LBP3018/LBP3050"; myPlotConfig.CanonicalMediaName = "A3"; myPlotConfig.PlotOrigin = "0,0"; myPlotConfig.PaperUnits = AcPlotPaperUnits.acMillimeters; myPlotConfig.PlotType = AcPlotType.acWindow; // рамка myPlotConfig.PlotRotation = AcPlotRotation.ac90degrees; myPlotConfig.StandardScale = AcPlotScale.acScaleToFit; myPlotConfig.StyleSheet = "monochrome.ctb"; myPlotConfig.PlotWithPlotStyles = true; myPlotConfig.PlotWithLineweights = true; } [CommandMethod("PrintMarker")] publicvoid PrintMarker() { setupPlotConfig(); _document.Utility.Prompt("PrintMarker is runing ..."); _ncApp.ActiveDocument.SendCommand("PLOT"); //так не работает (ничего не происходит) } } }
×
×
  • Создать...