VBA和AutoCAD布局页面Se
大家好!在解决了上一个视口问题后,我现在在尝试编辑页面大小时遇到了一个奇怪的问题/情况。
我目前拥有的是分配新页面配置的代码的一部分:
Set plotconfig = acaddoc.PlotConfigurations.Add("Setup 1")
plotconfig.ConfigName = "None"
plotconfig.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"
'acaddoc is an external reference to the drawing, i.e. ThisDrawing.Blah
稍后,我按如下方式调用我的页面配置,然后移动并调整视口大小:
acaddoc.ActiveLayout = clayout
clayout.CopyFrom plotconfig
clayout.Regen 'clayout=current layout
For i = 1 To clayout.Block.count - 1
acaddoc.mspace = False
Set Entity = clayout.Block.Item(i)
If TypeOf Entity Is AcadPViewport Then
Set PVport = Entity
PVport.Display True
PVport.Height = VPheight
PVport.Width = VPwidth
VPcenter = PVport.Center
VPcenter(0) = TitleIPx + distfromx + 0.5 * VPwidth
VPcenter(1) = TitleIPy + distfromy + 0.5 * VPheight
VPcenter(2) = 0
PVport.Center = VPcenter
acaddoc.mspace = True
'lower left corner of the zoom window
LLCZ(0) = (counter - 1) * Targetwidth
LLCZ(1) = 0
LLCZ(2) = 0:
'upper right corner of the zoom window
UPCZ(0) = (counter) * Targetwidth
UPCZ(1) = Targetheight
UPCZ(2) = 0:
acadapp.ZoomWindow LLCZ, UPCZ
acaddoc.mspace = False
End If
Next
我的问题是,当代码完成时,视口在“正确”的位置,但它下面的页面不是。i、 e.角点是正确的坐标,但当刷新页面大小时,它改变了原点。
为了进一步尝试和澄清:如果我进入布局并手动插入块,并指定将块插入到点(0,0,0),它将放置在布局中的空白处。此外,当我将光标移动到块上指定的插入点(即矩形的左下角)上时,它表示其当前位置为负。
如果需要的话,我可以试着拍一些照片。
提前感谢!
Riddlez。 另一个澄清:我试图做的事情相当于进入一个word文档,并将pagesetup属性更改为横向,大小为ARCH D 24x36,其中页面是白色的“背景”页面,始终位于布局中(可打印区域?)。
里德兹 仅供参考,一些页面设置(像打印预览一样的“白色背景”)是由打印机驱动程序允许的内容决定的。一些人要求“保证金”,不能真正设置为外部边界,而其他人可以。我不知道这是否是你的情况。我在VB中写了一些东西来满足您的要求,但纸张尺寸必须“预先安排”以删除边距,并具有精确的尺寸。 我想我在某种程度上知道你在说什么。
首先是一些背景:
我正在尝试重复以下步骤来设置我的页面:
1.转到绘图仪管理器,并为当前布局选择“修改”
2.将打印机设置为无,以便执行步骤3
3.将页面大小设置为“ARCH\u D_(24.00\u x\u 36.00\u Inches)”,以强制白色背景为上述页面大小
4.应用设置并按ok。
5.返回plot manager,使用打印机和首选打印机尺寸进行设置
总而言之:制作白色背景“ARCH_D_(24.00_x_36.00_英寸)”,然后打印出来,例如“Tabloid_(11.00_x_17.00_英寸)”。
关于您的参考,borgunit,我绕过了打印机的功能,然后将布局打印为“装配”、“居中”和“范围”打印输出。
我希望这能澄清一点。
关于我的问题的更多细节:当我的程序完成时,整个布局有一个白色背景。如果我将任何对象放置到该布局(之前)中,并将布局留到另一个布局中,则空白将变回页面,视口和对象的范围将缩小以适合给定的页面大小(之后)。
之前:
之后:
如果我指定了一个新对象的插入点,它将始终将该对象放在同一点上,而不是页面/空白的左下角。
令人沮丧的。
Riddlez。 所以我的代码的这一部分应该扔进垃圾桶:
acaddoc.ActiveLayout = clayout
clayout.CopyFrom plotconfig
clayout.Regen 'clayout=current layout
替换为:
clayout.ConfigName = "None"
clayout.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"
acaddoc.Regen acAllViewports
clayout.PlotType = acExtents
clayout.CenterPlot = True
clayout.StandardScale = acScaleToFit
然后在for循环后放入下一部分:
clayout.ConfigName = "\\LAN\PrinterSomeWhereInTheEther "
clayout.CanonicalMediaName = "Tabloid"
现在我得到了接近我想要的东西。页面设置都是按照我想要的方式完成的,但是,空白区域不断调整大小,以达到不需要的效果。
...我会继续实验。。。
Riddlez。 我不确定这是否在其中起了作用,但这可能需要考虑。从开发者文档:
谢谢你的留言,肖特,但我已经查过了。
我通过将打印机设置为“无”并将页面大小设置为Arch D来解决(/绕过)我的问题,以便调整布局中的“空白”大小。相应的代码行为:
'clayout is an object refering to some layout
clayout.ConfigName = "None"
clayout.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"
然后我将一个新的绘图配置嵌入到dwg文件中,这样我就可以使用它发布所有布局。我使用了以下代码:
Dim acaddoc As Object 'the autocad document that is being opened
Dim plotconfig As Object 'the object of the generated plot config
Set acadapp = _
GetObject(, "AutoCADLT.Application")'ACAD must be open
Set acaddoc = acadapp.ActiveDocument
Set plotconfig = _
acaddoc.PlotConfigurations.Add("PLOT CONFIG NAME")
plotconfig.ConfigName = "\\SomePrinterOnMyLAN"
plotconfig.PlotType = acExtents
plotconfig.CenterPlot = True
plotconfig.StandardScale = acScaleToFit
plotconfig.CanonicalMediaName = "Tabloid"
plotconfig.StyleSheet = "123456abcd.ctb"
关于CanonicalMediaName的注意事项:输入的字符串如绘图或绘图设置管理器窗口中的下拉菜单所示。然而,至少根据我的经验,所有空格都必须用下划线(_)表示。
我希望这能帮助那些在互联网论坛上艰难跋涉的人,他们想知道如何解决这个问题,或者如何自动化一些无聊的布局设置,
Riddlez。
页:
[1]