Riddlez 发表于 2022-7-6 17:09:18

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。

Riddlez 发表于 2022-7-6 17:28:54

另一个澄清:我试图做的事情相当于进入一个word文档,并将pagesetup属性更改为横向,大小为ARCH D 24x36,其中页面是白色的“背景”页面,始终位于布局中(可打印区域?)。
 
里德兹

borgunit 发表于 2022-7-6 17:37:03

仅供参考,一些页面设置(像打印预览一样的“白色背景”)是由打印机驱动程序允许的内容决定的。一些人要求“保证金”,不能真正设置为外部边界,而其他人可以。我不知道这是否是你的情况。我在VB中写了一些东西来满足您的要求,但纸张尺寸必须“预先安排”以删除边距,并具有精确的尺寸。

Riddlez 发表于 2022-7-6 17:40:22

我想我在某种程度上知道你在说什么。
 
首先是一些背景:
我正在尝试重复以下步骤来设置我的页面:
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。

Riddlez 发表于 2022-7-6 17:59:10

所以我的代码的这一部分应该扔进垃圾桶:

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。

SEANT 发表于 2022-7-6 18:00:06

我不确定这是否在其中起了作用,但这可能需要考虑。从开发者文档:

Riddlez 发表于 2022-7-6 18:10:06

谢谢你的留言,肖特,但我已经查过了。
 
我通过将打印机设置为“无”并将页面大小设置为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]
查看完整版本: VBA和AutoCAD布局页面Se