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

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


Рекомендуемые сообщения

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

image.png.383e209bfbbf1788d2de520b2f07f434.png

 

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

 

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты
10 часов назад, Robink сказал:

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

Упсс,

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

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

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

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

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

 

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, Robink сказал:

AcPlotRotation.ac180degrees

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

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

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

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

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

olayt

Layout крутишь?

Не pageset?

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

Ссылка на сообщение
Поделиться на другие сайты
10 минут назад, doctorraz сказал:

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

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

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

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

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

Layout крутишь?

Не pageset?

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

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

Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, Robink сказал:

Да Layout

Спасибо, посмотрю

Ссылка на сообщение
Поделиться на другие сайты
В 04.09.2021 в 19:28, doctorraz сказал:

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

image.png.383e209bfbbf1788d2de520b2f07f434.png

 

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

 

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

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

 

SetPaperFormat.cs

Ссылка на сообщение
Поделиться на другие сайты
1 час назад, Светлана Мирончик сказал:

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

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

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

----

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

______

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

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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Светлана Мирончик сказал:

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
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

Ссылка на сообщение
Поделиться на другие сайты
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

Изменено пользователем doctorraz
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 недели спустя...
В 11.09.2021 в 15:51, doctorraz сказал:

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

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

Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, Светлана Мирончик сказал:

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

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Расскажите друзьям

    Нравится Официальный форум компании Нанософт? Расскажите друзьям!
×
×
  • Создать...