Keith™ 发表于 2006-6-21 20:09:55

以编程方式设置 PS 布局

我需要以编程方式设置所有绘图参数。我不想在新图纸上显示任何视口。基本上,我想通过向layouts集合添加布局来创建新布局,设置绘图仪、图纸尺寸等。当用户从选项卡中选择它时,它不应显示默认情况下放置视口的新设置窗口,但我希望页面设置显示用户是否在程序外部创建新布局。这有意义吗。。。简言之,我如何为编程创建的布局关闭该功能?
**** Hidden Message *****

Jeff_M 发表于 2006-6-21 22:36:16

您可以在创建新布局时将xrecord附加到该布局。然后在LayoutSwitched事件中执行以下操作:
Private Sub AcadDocument_LayoutSwitched(ByVal LayoutName As String)
If ThisDrawing.Layouts(LayoutName).HasExtensionDictionary Then
    ' Perhaps add a check here for the presence of a specific xrecord
    Application.Preferences.Display.LayoutCreateViewport = False
    Application.Preferences.Display.LayoutShowPlotSetup = False
Else
    Application.Preferences.Display.LayoutCreateViewport = True
    Application.Preferences.Display.LayoutShowPlotSetup = True
End If
End Sub

Keith™ 发表于 2006-6-22 12:09:28

或者,使用通过查看Chuck代码获得的想法,只需在创建布局之前将这2个变量设置为false,并在完成后将它们返回到以前的设置。

Jeff_M 发表于 2006-6-22 16:53:15

您是否知道有特定的标签、设置、xrecord等会在首次访问新布局时导致页面设置窗口弹出?我问这个问题的原因是,如果在单击布局之前重置变量,新页面设置窗口仍然会显示。我不能利用(无论如何也不容易)事件反应器,因为编程将被编译成dll
我甚至转储了一个包含两个布局的图形的DXF,一个选中,一个未选中,然后比较输出,但我仍然没有找到解决此问题的任何提示。

Keith™ 发表于 2006-6-22 17:30:22

我先说清楚,你想按程序来做

Jeff_M 发表于 2006-6-22 17:32:04

这对我有用,基思。
Sub LayoutTest()
Dim oLayout As AcadLayout
Dim oOrigLayout As AcadLayout
Dim bVP As Boolean
Dim bDialg As Boolean
    bVP = Application.Preferences.Display.LayoutCreateViewport
    bDialg = Application.Preferences.Display.LayoutShowPlotSetup
    Set oOrigLayout = ThisDrawing.ActiveLayout
   
    Application.Preferences.Display.LayoutCreateViewport = False
    Application.Preferences.Display.LayoutShowPlotSetup = False
   
    Set oLayout = ThisDrawing.Layouts.Add("NewLayout")
    'With oLayout
    oLayout.CopyFrom ThisDrawing.Layouts.Item(0) 'gets the plot data from the first layout....probably would want to change this.
    ThisDrawing.ActiveLayout = oLayout
    Application.Preferences.Display.LayoutCreateViewport = bVP
    Application.Preferences.Display.LayoutShowPlotSetup = bDialg
    ThisDrawing.ActiveLayout = oOrigLayout
   
End Sub

Keith™ 发表于 2006-6-22 18:24:48

没有鲍勃..我可以很容易地做到这一点。问题是,我不想关闭这些设置,而是希望AutoCAD在以编程方式创建布局时忽略这些设置。原因是,如果用户希望设置它并且我将其关闭,他们只需将其重新打开即可。从编程的角度来看,这并不好,因为如果他们重新打开它,它将提示进行页面设置,我已经在编程中设置了页面设置。
杰夫 我会尝试一下,看看它是否能解决我的问题。

Keith™ 发表于 2006-6-22 19:25:57

这可能不是在DLL中接收文档级事件的最优雅的方法,但也不会变得更简单。
' EventSink.cls
Private WithEvents m_acadApp As AcadApplication
Private WithEvents m_currentDoc As AcadDocument
Private Sub m_acadApp_BeginCommand(ByVal CommandName As String)
Set m_currentDoc = m_acadApp.ActiveDocument
End Sub
Private Sub m_currentDoc_LayoutSwitched(ByVal LayoutName As String)
m_currentDoc.Utility.Prompt "Switched to layout: " & LayoutName
End Sub
Public Property Set Application(ByRef app As AcadApplication)
Set m_acadApp = app
Set m_currentDoc = m_acadApp.ActiveDocument
End Property
页: [1]
查看完整版本: 以编程方式设置 PS 布局