Jump to content

Как средствами Net Api сменить ориентацию листа для печати?


Recommended Posts

В принципе простой вопрос, как сменить книжную на альбомную

image.png.383e209bfbbf1788d2de520b2f07f434.png

 

При том, что SetPlotRotation  в нано работает совсем не так , как работает в оригинале...

 

Link to comment
Share on other sites

10 часов назад, Robink сказал:

А они реализовали на. Net  печать? Раньше точно не работало. Только через COM. 

Упсс,

Что publish  заглушка стоит я уже в курсе.

А вот что больше никак на Net не печатает неожиданно(((

добавлено через 6 минут

С другой стороны настройка ориентации листа что в com что в нет реализована одинаково.. некорректно

Rotatedegre -0 в пространстве листа не меняет альбомную на книжную, но поворот становится 0 как бэ книжная и нано с этой настройкой печатает все линиями нулевой толщины. Еще и боком(((

 

Link to comment
Share on other sites

//вертикальная
olayt.PlotRotation = AcPlotRotation.ac180degrees;    
//горизонтальная
olayt.PlotRotation = AcPlotRotation.ac270degrees;

 

Я вот так задаю ориентацию

Link to comment
Share on other sites

34 минуты назад, Robink сказал:

AcPlotRotation.ac180degrees

В каде это книжная вверхногами  (галочка перевернуть стоит)

270 это альбом вверх ногами

Проблема в том, что в нано AcPlotRotation не меняет книжную альбомную, а крутит положение бумаги.

А книжная альбомная в нано меняет размер бумаги

добавлено через 5 минут
41 минуту назад, Robink сказал:

olayt

Layout крутишь?

Не pageset?

А в модели тогда как?

Link to comment
Share on other sites

10 минут назад, doctorraz сказал:

В каде это книжная вверхногами  (галочка перевернуть стоит)

270 это альбом вверх ногами

Проблема в том, что в нано AcPlotRotation не меняет книжную альбомную, а крутит положение бумаги.

А книжная альбомная в нано меняет размер бумаги

добавлено через 5 минут

Layout крутишь?

Не pageset?

А в модели тогда как?

Да Layout. Из модели не печатаю, только с листов.

  • Like 2
Link to comment
Share on other sites

В 04.09.2021 в 19:28, doctorraz сказал:

В принципе простой вопрос, как сменить книжную на альбомную

image.png.383e209bfbbf1788d2de520b2f07f434.png

 

При том, что SetPlotRotation  в нано работает совсем не так , как работает в оригинале...

 

Через API ориентацию листа можно изменить через свойство CanonicalMediaName конкретного листа COM-документа nanoCAD.

Свойство PlotRotation изменит книжный/альбомный только в листе, в пространстве модели оно изменит поворот области печати на листе, но на сам формат листа не повлияет. Прикрепляю пример на C#, как изменить формат листа через CanonicalMediaName. Эта команда изменит ориентацию листа одинаково и в пространстве модели и в листе

 

SetPaperFormat.cs

  • Like 4
  • Thanks 1
Link to comment
Share on other sites

1 час назад, Светлана Мирончик сказал:

Свойство PlotRotation изменит книжный/альбомный только в листе

и сделает все примитивы нулевой толщины..

Любой plotrotation который не ноль.

----

Спасибо за код

______

Теперь вопрос к ТП, как нано сопоставляет бумагу портрет/ландшафт одного размера и настроек внутри себя? Неужели нет API?

В каде это решалось через plotrotation, логично предположить что, коль нанодев отступил от оригинала, то что то сделал взамен и намного круче?

Edited by doctorraz
Link to comment
Share on other sites

3 часа назад, Светлана Мирончик сказал:

PlotRotation изменит книжный/альбомный только в листе

Кстати нет, не меняет оно книжный альбомный в листе..

Переключает виртуальный комбобокс (который нанодев забыл наверное вытащить в лист 0 90 180 270)

Альбомная книжная остается по бумаге, а сама печать по плотротатион.. с артефактами в виде всех примитивов нулевой толщиной..

Бага.. однако

Link to comment
Share on other sites

15 часов назад, doctorraz сказал:

как нано сопоставляет бумагу портрет/ландшафт одного размера и настроек внутри себя?

Бумага портрет/ландшафт одного размера сопоставляются по системному названию размера бумаги. У альбомной ориентации в системном названии всегда есть символы _L, например

Letter_(8.50_x_11.00_Inches) - книжный

Letter_(8.50_x_11.00_Inches)_L - альбомный

Возможны другие интерпретации, в зависимости от выбранного принтера, например, может быть (Альбомная)_L или _L_L, или _L6

Для того, чтобы изменить ориентацию бумаги одного размера, в API отдельного метода не предусмотрено.

Для решения этой задачи нужно оперировать содержимым свойства CanonicalMediaName и пользоваться поиском в коллекции форматов бумаги, доступных при текущих настройках листа. Коллекцию можно получить методом GetCanonicalMediaNames() (возвращает массив строк) нужного листа COM-документа nanoCAD.

 

 

 

добавлено через 9 минут
18 часов назад, doctorraz сказал:

и сделает все примитивы нулевой толщины..

Любой plotrotation который не ноль.

Просьба протестировать у себя мою команду, которая изменяет PlotRotation. У меня описанных проблем не возникает.

SetPlotOrientation.cs

  • Like 1
Link to comment
Share on other sites

1 час назад, Светлана Мирончик сказал:

протестировать

Все то же самое

Хотя на предосмотре печати не видно

Спойлер

image.thumb.png.f45bf057c0385f4517227bc5bd4e0f0f.png

 

Спойлер

image.thumb.png.ac941a2ed6b0892135af4f5e49a3edad.png

 

Дело в том, что ты крутишь лист, а я настраиваю PageSet

и потом применяю его к пространству, поэтому nanoкосяк видно сразу

Спойлер

using System;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Collections.Specialized;
//-----------------
#if MC
using Multicad;
using Multicad.AplicationServices;
using Multicad.Runtime;
using Mrtm = Multicad.Runtime;
using Multicad.DatabaseServices;
using Multicad.DataServices;
using Multicad.Geometry;
using Multicad.CustomObjectBase;
using Multicad.Symbols;
using Multicad.Symbols.Tables;

#endif
#if NC
using App = HostMgd.ApplicationServices;
using HostMgd.ApplicationServices;
using HostMgd.EditorInput;
using HostMgd.Windows;
using Teigha.Colors;
using Teigha.DatabaseServices;
using Tds = Teigha.DatabaseServices;
using Teigha.Geometry;
using Teigha.Runtime;
using Platform = HostMgd;
using PlatformDb = Teigha;
using Trtm = Teigha.Runtime;
using HostMgd.PlottingServices;
using PltS = HostMgd.PlottingServices;
using HostMgd.Publishing;
using HostMgd.Internal;

#else
using App = Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using Tds = Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Windows;
using Platform = Autodesk.AutoCAD;
using PlatformDb = Autodesk.AutoCAD;
using Trtm = Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.PlottingServices;
using PltS = Autodesk.AutoCAD.PlottingServices;
using Autodesk.AutoCAD.Publishing;		

namespace drz
{
    public class PagSet
    {		
		/// <summary>
        /// Тест настройки параметров печати
        /// </summary>
        [Trtm.CommandMethod("t-PagSet1")]
        public void tstPagSet()
        {
            App.Document doc = Application.DocumentManager.MdiActiveDocument;
            Database db = doc.Database;
            Editor ed = doc.Editor;

            StringCollection viewsToPlot = new StringCollection();
            viewsToPlot.Add("Test0");
            viewsToPlot.Add("Test90");
            viewsToPlot.Add("Test180");
            viewsToPlot.Add("Test270");
            // Create page setup based on the views
            PlotRotation counter = 0;
            using (Transaction Tx = db.TransactionManager.StartTransaction())
            {
                ObjectId layoutId = LayoutManager.Current.GetLayoutId
                                (LayoutManager.Current.CurrentLayout);

                Layout layout = Tx.GetObject(layoutId, OpenMode.ForWrite) as Layout;

                foreach (String viewName in viewsToPlot)
                {
                    PlotSettings ps = new PlotSettings(layout.ModelType);//в активном пространстве
                    ps.CopyFrom(layout);
                    PlotSettingsValidator psv = PlotSettingsValidator.Current;
#if NC
                    psv.SetPlotConfigurationName(ps, "Встроенный PDF-принтер",
                        "ISO A2 (420.00 x 594.00 мм)");
#else
                    psv.SetPlotConfigurationName(ps,
                        "DWF6 ePlot.pc3", "ANSI_A_(8.50_x_11.00_Inches)");
#endif
                    psv.RefreshLists(ps);
                    psv.SetPlotPaperUnits(ps, PlotPaperUnit.Millimeters);
                    psv.SetCurrentStyleSheet(ps, "monochrome.ctb");
                    psv.SetPlotRotation(ps, counter);

                    // https://adn-cis.org/forum/index.php?topic=10114.msg45976#msg45976
                    Point2d minPoint2d = new Point2d(0.0, 0.0);
                    Point2d maxPoint2d = new Point2d(420.0, 420.0);
                    Extents2d points = new Extents2d(minPoint2d, maxPoint2d);
                    psv.SetPlotWindowArea(ps, points);
                    psv.SetPlotType(ps, Tds.PlotType.Window);

                    psv.SetUseStandardScale(ps, false);
                    psv.SetCustomPrintScale(ps, new CustomScale(1, 1));
                    psv.SetPlotCentered(ps, true);

                    ps.PrintLineweights = true;
                    ps.PlotSettingsName = String.Format("{0}{1}", viewName, "PS");

                    ps.AddToPlotSettingsDictionary(db);
                    Tx.AddNewlyCreatedDBObject(ps, true);

                    psv.RefreshLists(ps);

                    layout.CopyFrom(ps);
                    counter++;
                }
                Tx.Commit();
            }
        }
	}
}

 

 

Спойлер

image.thumb.png.4e50172dd45c6edd8bf7c33a684df432.png

четко видно, что в пространстве ЛИСТА при PlotRotation !=0

все линии нулевой толщины

добавлено через 5 минут

С альбомной книжной разобрался Спасибо тебе..

но в CanonicalMediaName всю фантазию для портретов применили

плотер None без _L  или  альбомная

Встроенный PDF-принтер - (Альбомная)

[Отправить в OneNote 16] - USER_L1...USER_L37

короче зоопарк))))

sPlot20.ini

Edited by doctorraz
  • Like 3
Link to comment
Share on other sites

Еще нюансик..

В листе нет комбо поворота.

Но PlotRotation в листе крутить можно.

Собственно хотел уточнить..

Комбо на лист второпях вытащить забыли? Или что...

Link to comment
Share on other sites

  • 2 weeks later...
В 11.09.2021 в 15:51, doctorraz сказал:

Комбо на лист второпях вытащить забыли? Или что...

На листе он особо не нужен. Там ориентация бумаги меняется переключением Альбомный/Книжный, через API тот же эффект. С ног на голову чертеж в листе не повернуть, в отличие от пространства модели.

Link to comment
Share on other sites

4 минуты назад, Светлана Мирончик сказал:

С ног на голову чертеж в листе не повернуть, в отличие от пространства модели.

СПФОРМАТ не повернуть, он всегда wcs plane

А вот видовые экраны и примитивы легко..

Но учитывая, КАК nanodev реализовал работу с бумагой, PlotRotation  получается атавизм

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...