乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 87|回复: 6

[编程交流] VBA和AutoCAD布局页面Se

[复制链接]

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 17:09:18 | 显示全部楼层 |阅读模式
大家好!
 
在解决了上一个视口问题后,我现在在尝试编辑页面大小时遇到了一个奇怪的问题/情况。
 
我目前拥有的是分配新页面配置的代码的一部分:
 
  1. Set plotconfig = acaddoc.PlotConfigurations.Add("Setup 1")
  2. plotconfig.ConfigName = "None"
  3. plotconfig.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"
  4. 'acaddoc is an external reference to the drawing, i.e. ThisDrawing.Blah

 
稍后,我按如下方式调用我的页面配置,然后移动并调整视口大小:
  1. acaddoc.ActiveLayout = clayout
  2. clayout.CopyFrom plotconfig
  3. clayout.Regen 'clayout=current layout
  4. For i = 1 To clayout.Block.count - 1
  5.        acaddoc.mspace = False
  6.        Set Entity = clayout.Block.Item(i)
  7.        If TypeOf Entity Is AcadPViewport Then
  8.            Set PVport = Entity
  9.            PVport.Display True
  10.            PVport.Height = VPheight
  11.            PVport.Width = VPwidth
  12.            VPcenter = PVport.Center
  13.            VPcenter(0) = TitleIPx + distfromx + 0.5 * VPwidth
  14.            VPcenter(1) = TitleIPy + distfromy + 0.5 * VPheight
  15.            VPcenter(2) = 0
  16.            PVport.Center = VPcenter
  17.            acaddoc.mspace = True
  18.             'lower left corner of the zoom window
  19.            LLCZ(0) = (counter - 1) * Targetwidth
  20.            LLCZ(1) = 0
  21.            LLCZ(2) = 0:
  22.            'upper right corner of the zoom window
  23.            UPCZ(0) = (counter) * Targetwidth
  24.            UPCZ(1) = Targetheight
  25.            UPCZ(2) = 0:
  26.            acadapp.ZoomWindow LLCZ, UPCZ
  27.            acaddoc.mspace = False
  28.            End If
  29.    Next

 
我的问题是,当代码完成时,视口在“正确”的位置,但它下面的页面不是。i、 e.角点是正确的坐标,但当刷新页面大小时,它改变了原点。
 
为了进一步尝试和澄清:如果我进入布局并手动插入块,并指定将块插入到点(0,0,0),它将放置在布局中的空白处。此外,当我将光标移动到块上指定的插入点(即矩形的左下角)上时,它表示其当前位置为负。
 
如果需要的话,我可以试着拍一些照片。
 
提前感谢!
Riddlez。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 17:28:54 | 显示全部楼层
另一个澄清:我试图做的事情相当于进入一个word文档,并将pagesetup属性更改为横向,大小为ARCH D 24x36,其中页面是白色的“背景”页面,始终位于布局中(可打印区域?)。
 
里德兹
回复

使用道具 举报

0

主题

132

帖子

198

银币

限制会员

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

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 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,我绕过了打印机的功能,然后将布局打印为“装配”、“居中”和“范围”打印输出。
 
我希望这能澄清一点。
 
关于我的问题的更多细节:当我的程序完成时,整个布局有一个白色背景。如果我将任何对象放置到该布局(之前)中,并将布局留到另一个布局中,则空白将变回页面,视口和对象的范围将缩小以适合给定的页面大小(之后)。
 
之前:
180922y5pylhvyyllhtbb1.jpg
 
 
 
之后:
180923dcyvyik4yx4zyx7q.jpg
 
如果我指定了一个新对象的插入点,它将始终将该对象放在同一点上,而不是页面/空白的左下角。
 
令人沮丧的。
Riddlez。
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 17:59:10 | 显示全部楼层
所以我的代码的这一部分应该扔进垃圾桶:
  1. acaddoc.ActiveLayout = clayout
  2. clayout.CopyFrom plotconfig
  3. clayout.Regen 'clayout=current layout

 
替换为:
  1.    clayout.ConfigName = "None"
  2.    clayout.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"
  3.    
  4.    acaddoc.Regen acAllViewports
  5.       
  6.    clayout.PlotType = acExtents
  7.    clayout.CenterPlot = True
  8.    clayout.StandardScale = acScaleToFit

 
然后在for循环后放入下一部分:
  1.    clayout.ConfigName = "[url="file://LAN/PrinterSomeWhereInTheEther"]\\LAN\PrinterSomeWhereInTheEther[/url] "
  2.    clayout.CanonicalMediaName = "Tabloid"

 
现在我得到了接近我想要的东西。页面设置都是按照我想要的方式完成的,但是,空白区域不断调整大小,以达到不需要的效果。
...我会继续实验。。。
Riddlez。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 18:00:06 | 显示全部楼层
我不确定这是否在其中起了作用,但这可能需要考虑。从开发者文档:
180923wig3ez3muo4k3z3z.jpg
回复

使用道具 举报

3

主题

14

帖子

11

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 18:10:06 | 显示全部楼层
谢谢你的留言,肖特,但我已经查过了。
 
我通过将打印机设置为“无”并将页面大小设置为Arch D来解决(/绕过)我的问题,以便调整布局中的“空白”大小。相应的代码行为:
 
  1. 'clayout is an object refering to some layout
  2.    clayout.ConfigName = "None"
  3.    clayout.CanonicalMediaName = "ARCH_D_(24.00_x_36.00_Inches)"

 
然后我将一个新的绘图配置嵌入到dwg文件中,这样我就可以使用它发布所有布局。我使用了以下代码:
 
  1. Dim acaddoc As Object 'the autocad document that is being opened
  2. Dim plotconfig As Object 'the object of the generated plot config
  3. Set acadapp = _
  4.        GetObject(, "AutoCADLT.Application")  'ACAD must be open
  5. Set acaddoc = acadapp.ActiveDocument
  6. Set plotconfig = _
  7.    acaddoc.PlotConfigurations.Add("PLOT CONFIG NAME")
  8. plotconfig.ConfigName = "[url="file://\\SomePrinterOnMyLAN"]\\SomePrinterOnMyLAN[/url]"
  9. plotconfig.PlotType = acExtents
  10. plotconfig.CenterPlot = True
  11. plotconfig.StandardScale = acScaleToFit
  12. plotconfig.CanonicalMediaName = "Tabloid"
  13. plotconfig.StyleSheet = "123456abcd.ctb"

 
关于CanonicalMediaName的注意事项:输入的字符串如绘图或绘图设置管理器窗口中的下拉菜单所示。然而,至少根据我的经验,所有空格都必须用下划线(_)表示。
 
我希望这能帮助那些在互联网论坛上艰难跋涉的人,他们想知道如何解决这个问题,或者如何自动化一些无聊的布局设置,
Riddlez。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 16:43 , Processed in 0.840178 second(s), 68 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表