doctorraz Posted September 20, 2021 Report Share Posted September 20, 2021 (edited) Если в модели вручную задать рамку печати и применить к модели, затем программно сформировать другие настройки печати и применить к модели (layout.CopyFrom(ps )) то при открытии печати нано выдает такое предупреждение Собственно вопрос, как этого избежать? Подавить появление окна, что бы применялись программные настройки или что то надо подкрутить в конфиге layout? ---------------- И еще вопрос, при задании рамки в модели и применении ее к пространству, то как бы мы не крутили модель, на превью печати картинка всегда будет как сохранили. Есть ли доступ к этой фиче программно? Edited September 20, 2021 by doctorraz 1 Quote Link to comment Share on other sites More sharing options...
Светлана Мирончик Posted September 21, 2021 Report Share Posted September 21, 2021 22 часа назад, doctorraz сказал: Собственно вопрос, как этого избежать? Это из-за коллекции PlotAreas. Нужно ее очистить в CustomPlotSettings перед тем, как копировать в лист новые настройки области печати. Через COM: private void CleanPlotAreas() { HostMgd.ApplicationServices.Document doc = HostMgd.ApplicationServices.Application.DocumentManager.MdiActiveDocument; nanoCAD.Document comDoc = doc.AcadDocument as nanoCAD.Document; nanoCAD.Plot plot = (nanoCAD.Plot)comDoc.Plot; foreach (OdaX.IAcadLayout layout in comDoc.Layouts) { nanoCAD.InanoCADPlotCustomParams customPlotSettings = plot.CustomPlotSettings[layout]; customPlotSettings.PlotAreas.Clear(); plot.CustomPlotSettings[layout] = customPlotSettings; } } 22 часа назад, doctorraz сказал: как бы мы не крутили Что именно изменяется в модели и не видно на превью? 1 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted September 21, 2021 Author Report Share Posted September 21, 2021 10 минут назад, Светлана Мирончик сказал: Нужно ее очистить в CustomPlotSettings перед тем, как копировать в лист новые настройки области печати. Спасибо, вычитал в твоем коде. Получилось Net Api к CustomPlotSettings (PlotAreas ) нет и не будет??? ----------- 13 минут назад, Светлана Мирончик сказал: Что именно изменяется в модели и не видно на превью? Наоборот, если выставить вид и PlotArea Add через UI, то потом как модель не крути, на превьюшке будет вид примененный к листу. Крутая фича!!! Собственно в связи с этим вопрос: Подсмотрел в метаданных PlotArea Add(object ptMin, object ptMax); Судя по названию точки на вход принимает???, но какие Point2d или Point3d, object смущает... В каких координатах подсовывать? В общем, как в лист программно дописать PlotArea? -------------- И последний (сегодня) вопрос Plot на вход принимает PlotSetting ?? естественно при активном нужном пространстве? Или не морочиться и настраивать печать в Layout, один фих пакетной печати нет и не предвидится(( добавлено через 6 минут Спойлер 1 Quote Link to comment Share on other sites More sharing options...
Светлана Мирончик Posted September 21, 2021 Report Share Posted September 21, 2021 56 минут назад, doctorraz сказал: Net Api к CustomPlotSettings (PlotAreas ) нет и не будет??? Пока нет, будет ли - не могу однозначно ответить. 57 минут назад, doctorraz сказал: PlotArea Add(object ptMin, object ptMax); Судя по названию точки на вход принимает???, но какие Point2d или Point3d, object смущает... принимает массив double[] с двумя числами-координатами: первое - X, второе - Y. Координаты нужно преобразовывать в Display Coordinate System. 35 минут назад, doctorraz сказал: В общем, как в лист программно дописать PlotArea? Был топик по областям печати, я выкладывала пример, как добавить "Рамку" и другие области печати программно через API nanoCAD: 52 минуты назад, doctorraz сказал: Plot на вход принимает PlotSetting ?? Если речь о nanoCAD.Plot и Teigha.DatabaseServices.PlotSettings, то - нет. У nanoCAD.Plot другой тип данных для наборов параметров: OdaX.IAcadPlotConfiguration. Он так просто не преобразовывается в PlotSettings.. 1 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted September 21, 2021 Author Report Share Posted September 21, 2021 33 минуты назад, Светлана Мирончик сказал: принимает массив double[] с двумя числами-координатами: первое - X, второе - Y. Координаты нужно преобразовывать в Display Coordinate System. Спасибо, а я му Point совал))), удивлялся, чего не жрет))) 34 минуты назад, Светлана Мирончик сказал: Был топик по областям печати, я выкладывала пример, как добавить "Рамку" и другие области печати программно через API nanoCAD: Ага видел, уже почти наизусть 34 минуты назад, Светлана Мирончик сказал: Он так просто не преобразовывается в PlotSettings.. Жаль, хотел с минимальными затратами и под АК publish и для нано plot Не беда, ветки уже разделились, как выяснилось нано умеет кое что, что АК и не снилось, ну и наоборот соответственно. Будем использовать сильные стороны обоих кадов 2 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted September 21, 2021 Author Report Share Posted September 21, 2021 2 часа назад, Светлана Мирончик сказал: принимает массив double[] Спасибо. принимает, и вид от ПСК не зависит.. Разбираюсь с очередностью передачи параметров и сорока нано_точками выравнивания... затейники.. енум нафих... и так все понятно))) 1 1 Quote Link to comment Share on other sites More sharing options...
doctorraz Posted September 22, 2021 Author Report Share Posted September 22, 2021 18 часов назад, Светлана Мирончик сказал: принимает массив double[] с двумя числами-координатами: первое - X, второе - Y. Координаты нужно преобразовывать в Display Coordinate System. похоже все несколько сложнее((( double[3] В листе координаты совпадают с GetWindowToPlot и Z=0 Спойлер Спойлер Sub PlotArea() 'Для успеха эксперимента 'В пространстве настраиваем область печати РАМКОЙ 'задаем границы и давим применить 'Потом стартуем этот скрипт '******************** Set objApp = GetObject(, "nanoCAD.Application") 'цепляемся к нане, или AutoCAD Set comDoc = objApp.ActiveDocument Set ActiveLayout = comDoc.ActiveLayout Set Plot = comDoc.Plot Set CustomPlotSettings = Plot.CustomPlotSettings(ActiveLayout) Dim ptMinWin, ptMinPa, ptMinGet 'шоб рядом в отладке были Dim ptMaxWin, ptMaxPa, ptMaxGet 'point Win ActiveLayout.GetWindowToPlot ptMinWin, ptMaxWin Set pa = CustomPlotSettings.PlotAreas Set pa0 = CustomPlotSettings.PlotAreas(0) offPa = pa0.Offset 'point PA ptMaxPa = pa0.ptMax ptMinPa = pa0.ptMin 'Stop pa.Clear Plot.CustomPlotSettings(ActiveLayout) = CustomPlotSettings 'если добавить PlotAreas pa.Add ptMinPa, ptMaxPa ' с теми же точками спрашивает какую область((( Plot.CustomPlotSettings(ActiveLayout) = CustomPlotSettings Stop 'get point comDoc.Activate AppActivate (objApp.Caption) ptMinGet = comDoc.Utility.GetPoint ptMaxGet = comDoc.Utility.GetPoint Stop 'point Get ptMinGet = comDoc.Utility.TranslateCoordinates(ptMinGet, 0, 2, False) ptMaxGet = comDoc.Utility.TranslateCoordinates(ptMaxGet, 0, 2, False) Stop Debug.Print "ptMinWin: X"; vbTab; ptMinWin(0); vbTab; "Y "; vbTab; ptMinWin(1) Debug.Print "ptMinGet: X"; vbTab; ptMinGet(0); vbTab; "Y "; vbTab; ptMinGet(1) Debug.Print "ptMinPa: X"; vbTab; ptMinPa(0); vbTab; "Y "; vbTab; ptMinPa(1); vbTab; "Z "; vbTab; ptMinPa(2) Debug.Print "*******************" Debug.Print "ptMaxWin: X"; vbTab; ptMaxWin(0); vbTab; "Y "; vbTab; ptMaxWin(1) Debug.Print "ptMaxGet: X"; vbTab; ptMaxGet(0); vbTab; "Y "; vbTab; ptMaxGet(1) Debug.Print "ptMaxPa: X"; vbTab; ptMaxPa(0); vbTab; "Y "; vbTab; ptMaxPa(1); vbTab; "Z "; vbTab; ptMaxPa(2) Stop End Sub если удалить PlotAreas и потом добавить с теми же координатами, то ------------------------ Короче либо я не не понимаю, как... либо опять недопилено и брошено Quote Link to comment Share on other sites More sharing options...
Светлана Мирончик Posted September 22, 2021 Report Share Posted September 22, 2021 1 час назад, doctorraz сказал: Короче либо я не не понимаю, как... либо опять недопилено и брошено Да, что-то намудрили. Надо разбираться, почему так происходит Quote Link to comment Share on other sites More sharing options...
doctorraz Posted September 22, 2021 Author Report Share Posted September 22, 2021 (edited) 1 час назад, Светлана Мирончик сказал: Надо разбираться, почему так происходит -------------- Мощная штука эта PlotArea. С ее помощью можно (пофих в какой ПСК и как повернута модель) задавать параметры печати= план МСК и не разворачивая чертеж печатать *для СПФОРМАТ весьма актуально) офф А там пакетная печать подтянется, остальные баги выгребутся, продажи нано пойдут вертикально в гору, он вытеснит оригинал с рынка....Нью Васюки, центр вселенной... upd щас проверил если напрямую писать координаты --- Set pa = CustomPlotSettings.PlotAreas Set pa0 = CustomPlotSettings.PlotAreas(0) comDoc.Activate AppActivate (objApp.Caption) ptMinGet = comDoc.Utility.GetPoint ptMaxGet = comDoc.Utility.GetPoint 'point Get ptMinGet = comDoc.Utility.TranslateCoordinates(ptMinGet, 0, 2, False) ptMaxGet = comDoc.Utility.TranslateCoordinates(ptMaxGet, 0, 2, False) pa0.ptMax = ptMaxGet pa0.ptMin = ptMinGet Plot.CustomPlotSettings(ActiveLayout) = CustomPlotSettings то координаты к модели применяются и нана не ругается, но... PlotAreas должна уже быть (походу PlotAreas.Add че то некорректно делает) непонятно что это за координаты в модели??!!! -------------- кстати в пространстве листа после PlotAreas.Add нана не ругается и координаты применяет исправно, при том, что если изменить только координаты PlotAreas , то координаты PlotAreas и GetWindowToPlot не бьются (естественно) , на превьюшке показывает по заданным координатам т.е. PlotAreas если PlotAreas.Clear то область печати определяется SetWindowToPlot, на превьюшке т.е. в листе работает как задумано, PlotAreas есть, печатаем по ней, нет.... печатаем по WindowToPlot и координаты с dcs копейка в копейку. ----- А вот с моделью ой((( --------------------- Спойлер ------------------ upd еще нюанс, если добавлять PlotAreas в модели к существующим, предварительно не очищая, нана не ругается. Edited September 22, 2021 by doctorraz 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.