Создание листов

Автор Тема: Создание листов  (Прочитано 19621 раз)

0 Пользователей и 3 Гостей просматривают эту тему.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создание листов
« Ответ #15 : 19-10-2015, 11:47:17 »
Кстати, есть оказывается официальное этому подтверждение: http://forums.autodesk.com/t5/net/need-help-programming-around-2015-api-createlayout-big/m-p/5484373
Там в конце рекомендация от сотрудника Autodesk как раз об разделении транзакции:
http://forums.autodesk.com/t5/net/need-help-programming-around-2015-api-createlayout-big/m-p/5496718#M43207
Похоже, что это баг связан с FIBERWORLD == 0, который начался как стандартный в AutoCAD 2015. В предыдущих версиях эта ошибка тоже проявлялась, но только если специально переключали FIBERWORLD в 0  для отладки приложений: http://adn-cis.org/tochki-ostanova-v-polzovatelskoj-forme-ne-obrabatyivayutsya-pri-otladke.html
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Создание листов
« Ответ #16 : 08-06-2022, 11:23:22 »
Здравствуйте, проблема следующая, беру код из справки (как говорили мне ранее), а он завершается единственным словом "eInvalidInput"
Код - vb.net [Выбрать]
  1. Imports Autodesk.AutoCAD.Runtime
  2. Imports Autodesk.AutoCAD.ApplicationServices
  3. Imports Autodesk.AutoCAD.DatabaseServices
  4. Imports Autodesk.AutoCAD.PlottingServices
  5.  
  6. ' Creates a new page setup or edits the page set if it exists
  7. <CommandMethod("CreateOrEditPageSetup")> _
  8. Public Shared Sub CreateOrEditPageSetup()
  9.     ' Get the current document and database, and start a transaction
  10.     Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  11.     Dim acCurDb As Database = acDoc.Database
  12.  
  13.     Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
  14.  
  15.         Dim plSets As DBDictionary = _
  16.             acTrans.GetObject(acCurDb.PlotSettingsDictionaryId, OpenMode.ForRead)
  17.         Dim vStyles As DBDictionary = _
  18.             acTrans.GetObject(acCurDb.VisualStyleDictionaryId, OpenMode.ForRead)
  19.  
  20.         Dim acPlSet As PlotSettings
  21.         Dim createNew As Boolean = False
  22.  
  23.         ' Reference the Layout Manager
  24.         Dim acLayoutMgr As LayoutManager = LayoutManager.Current
  25.  
  26.         ' Get the current layout and output its name in the Command Line window
  27.         Dim acLayout As Layout = _
  28.             acTrans.GetObject(acLayoutMgr.GetLayoutId(acLayoutMgr.CurrentLayout), _
  29.                               OpenMode.ForRead)
  30.  
  31.         ' Check to see if the page setup exists
  32.         If plSets.Contains("MyPageSetup") = False Then
  33.             createNew = True
  34.  
  35.             ' Create a new PlotSettings object:
  36.             '    True - model space, False - named layout
  37.             acPlSet = New PlotSettings(acLayout.ModelType)
  38.             acPlSet.CopyFrom(acLayout)
  39.  
  40.             acPlSet.PlotSettingsName = "MyPageSetup"
  41.             acPlSet.AddToPlotSettingsDictionary(acCurDb)
  42.             acTrans.AddNewlyCreatedDBObject(acPlSet, True)
  43.         Else
  44.             acPlSet = plSets.GetAt("MyPageSetup").GetObject(OpenMode.ForWrite)
  45.         End If
  46.  
  47.         ' Update the PlotSettings object
  48.         Try
  49.             Dim acPlSetVdr As PlotSettingsValidator = PlotSettingsValidator.Current
  50.  
  51.             ' Set the Plotter and page size
  52.             acPlSetVdr.SetPlotConfigurationName(acPlSet, _
  53.                                                 "DWF6 ePlot.pc3", _
  54.                                                 "ANSI_B_(17.00_x_11.00_Inches)")
  55.  
  56.             ' Set to plot to the current display
  57.             If acLayout.ModelType = False Then
  58.                 acPlSetVdr.SetPlotType(acPlSet, _
  59.                                        DatabaseServices.PlotType.Layout)
  60.             Else
  61.                 acPlSetVdr.SetPlotType(acPlSet, _
  62.                                        DatabaseServices.PlotType.Extents)
  63.  
  64.                 acPlSetVdr.SetPlotCentered(acPlSet, True)
  65.             End If
  66.  
  67.             ' Use SetPlotWindowArea with PlotType.Window
  68.             'acPlSetVdr.SetPlotWindowArea(plSet, _
  69.             '                             New Extents2d(New Point2d(0.0, 0.0), _
  70.             '                             New Point2d(9.0, 12.0)))
  71.  
  72.             ' Use SetPlotViewName with PlotType.View
  73.             'acPlSetVdr.SetPlotViewName(plSet, "MyView")
  74.  
  75.             ' Set the plot offset
  76.             acPlSetVdr.SetPlotOrigin(acPlSet, _
  77.                                      New Point2d(0, 0))
  78.  
  79.             ' Set the plot scale
  80.             acPlSetVdr.SetUseStandardScale(acPlSet, True)
  81.             acPlSetVdr.SetStdScaleType(acPlSet, StdScaleType.ScaleToFit)
  82.             acPlSetVdr.SetPlotPaperUnits(acPlSet, PlotPaperUnit.Inches)
  83.             acPlSet.ScaleLineweights = True
  84.  
  85.             ' Specify if plot styles should be displayed on the layout
  86.             acPlSet.ShowPlotStyles = True
  87.  
  88.             ' Rebuild plotter, plot style, and canonical media lists
  89.             ' (must be called before setting the plot style)
  90.             acPlSetVdr.RefreshLists(acPlSet)
  91.  
  92.             ' Specify the shaded viewport options
  93.             acPlSet.ShadePlot = PlotSettingsShadePlotType.AsDisplayed
  94.  
  95.             acPlSet.ShadePlotResLevel = ShadePlotResLevel.Normal
  96.  
  97.             ' Specify the plot options
  98.             acPlSet.PrintLineweights = True
  99.             acPlSet.PlotTransparency = False
  100.             acPlSet.PlotPlotStyles = True
  101.             acPlSet.DrawViewportsFirst = True
  102.  
  103.             ' Use only on named layouts - Hide paperspace objects option
  104.             ' plSet.PlotHidden = True
  105.  
  106.             ' Specify the plot orientation
  107.             acPlSetVdr.SetPlotRotation(acPlSet, PlotRotation.Degrees000)
  108.  
  109.             ' Set the plot style
  110.             If acCurDb.PlotStyleMode = True Then
  111.                 acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.ctb")
  112.             Else
  113.                 acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.stb")
  114.             End If
  115.  
  116.             ' Zoom to show the whole paper
  117.             acPlSetVdr.SetZoomToPaperOnUpdate(acPlSet, True)
  118.         Catch es As Autodesk.AutoCAD.Runtime.Exception
  119.             MsgBox(es.Message)
  120.         End Try
  121.  
  122.         ' Save the changes made
  123.         acTrans.Commit()
  124.  
  125.         If createNew = True Then
  126.             acPlSet.Dispose()
  127.         End If
  128.     End Using
  129. End Sub

Ошибка возникает вот тут
Код - vb.net [Выбрать]
  1. acPlSetVdr.SetCurrentStyleSheet(acPlSet, "acad.ctb")
в переменной, так как она составная и принимает все назначенные значения выше я даже представить не могу чего не хватает, а что лишнее.
А вообще задача следующая мне надо поменять стиль печати т.е. с цветного на чёрно белый, взял код со справки и сперва думал что просто выкину всё лишнее, ошибка была та же что и когда встакил код целиком. Студия 2019 AutoCAD 2021

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Создание листов
« Ответ #17 : 08-06-2022, 12:53:43 »
Посмотри что в коллекции acPlSetVdr.GetPlotStyleSheetList()
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн D_TRex

  • ADN OPEN
  • ***
  • Сообщений: 104
  • Карма: 0
Re: Создание листов
« Ответ #18 : 09-06-2022, 05:30:35 »
Вопрос был в том как присвоить стиль печати и что за ошибка в примере, а это я уже собрал тоже со справки. То есть Get есть а вот Set я не нашёл
Код - vb.net [Выбрать]
  1.         cmbStyle.Items.Clear()
  2.         For Each plotStyle As String In PlotSettingsValidator.Current.GetPlotStyleSheetList()
  3.             ' Output the names of the available plot styles
  4.             cmbStyle.Items.Add(plotStyle)
  5.         Next
А как должна выглядеть вот эта команда
Код - vb.net [Выбрать]
  1. CadDoc.ActiveSpace = AcActiveSpace.acPaperSpace
, я не могу получить координаты центра видового экрана.
« Последнее редактирование: 09-06-2022, 09:03:47 от D_TRex »