乐筑天下

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

在Sset中捕获命名视图

[复制链接]

17

主题

162

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
234
发表于 2008-5-5 10:55:22 | 显示全部楼层 |阅读模式

我有一个大约73个命名视图的绘图。
我正在编写一些代码;
在一些帮助下(谢谢鲍勃!)
这部分工作正常代码0]
它所做的只是抓取绘图中的每个blkref(每个视图1个),并使用blk ref . name作为幻灯片名称,为每个视图制作一个幻灯片
但是,我希望能够抓取绘图中每个视图的左下角点和右上角点,作为每个幻灯片的选取点。我写了下面的代码,我得到了每个点的提示,视图被缩放到窗口,这是非常重要的,但我不能让视图被识别为sset中的实体类型,或者我可能做错了什么。
我遇到的另一个问题是,通过使用for each循环,我以幻灯片放映结束。
我想做的就是提示每个视图,选择我的点,然后让代码为该视图分配blockref名称作为每个幻灯片的名称,然后将视图返回到上一个视图并提示下一个选择。
此外,对于视图,每个视图都需要恢复(-view,r等),以便使用冻结的(视图)图层状态。
希望这有意义?
谢谢!M
  1. Dim NView As AcadView
  2. Dim Sset As AcadSelectionSet
  3. Dim Ent As AcadEntity
  4. Dim Pnt1 As Variant
  5. Dim Pnt2 As Variant
  6. Pnt1 = ThisDrawing.Utility.GetPoint(, "Pick First Point")
  7. Pnt2 = ThisDrawing.Utility.GetPoint(, "Pick Second Point")
  8. Set Sset = ThisDrawing.SelectionSets.Add("Sset")
  9. Sset.Select acSelectionSetWindow, Pnt1, Pnt2
  10. ZoomWindow Pnt1, Pnt2
  11. For Each Ent In Sset
  12. If TypeOf Ent Is AcadView Then
  13.   strName = NView.Name
  14.   ThisDrawing.SendCommand "-view" & vbCr & "r" & vbCr & strName & vbCr
  15.   End If
  16. Next Ent


本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 11:12:23 | 显示全部楼层

好吧,
有了这个代码,我几乎拥有了我需要的东西
  1. Sub CreateSlides()
  2.   On Error Resume Next
  3.   ThisDrawing.SelectionSets.Item("Sset").Delete
  4.   
  5.   Dim Sset As AcadSelectionSet
  6.   Dim Ent As AcadEntity
  7.   Dim BlkRef As AcadBlockReference
  8.   Dim NView As AcadView
  9.    
  10.   Dim strName As String
  11.   Dim VName As String
  12.   Dim sysFileDia As Integer
  13.       
  14.   Dim Pnt1 As Variant
  15.   Dim Pnt2 As Variant
  16.    
  17.   Pnt1 = ThisDrawing.Utility.GetPoint(, "Pick First Point")
  18.   Pnt2 = ThisDrawing.Utility.GetPoint(, "Pick Second Point")
  19.       
  20.   Set Sset = ThisDrawing.SelectionSets.Add("Sset")
  21.   Sset.Select acSelectionSetWindow, Pnt1, Pnt2
  22.   ZoomWindow Pnt1, Pnt2
  23.   
  24.   sysFileDia = ThisDrawing.GetVariable("FILEDIA")
  25.   ThisDrawing.SetVariable "FILEDIA", 0
  26.    
  27.   For Each Ent In Sset
  28.    If TypeOf Ent Is AcadView Then
  29.     VName = NView.Name
  30.     GoTo Continue
  31.    End If
  32.   Next Ent
  33. Continue:
  34.   For Each Ent In Sset
  35.    If TypeOf Ent Is AcadBlockReference Then
  36.     Set BlkRef = Ent
  37.     strName = BlkRef.Name
  38.     ThisDrawing.SendCommand "-view" & vbCr & "r" & vbCr & VName & vbCr
  39.     ThisDrawing.SendCommand "MSLIDE c:\tempslide" & strName & vbCr
  40.    '*****MAKE SURE THE ABOVE FOLDER EXISTS*****
  41.     End If
  42.   Next Ent
  43.   ThisDrawing.SetVariable "FILEDIA", sysFileDia
  44. End Sub

,除了它仍然在问我想要恢复什么视图;我不知道如何传递它,所以当我做vslide时,幻灯片仍然显示视图和施工线,我只想看到blkref。
最后,我想把观点恢复到以前的水平。
谁能帮我克服这最后的蜷缩?
谢谢
M
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2008-5-5 12:51:35 | 显示全部楼层
没有抛弃你,只是很忙。
看看这个,需要添加目录选择和文本文件位。
  1. Option Explicit
  2. Sub MLides()
  3. Dim objView As AcadView
  4. Dim objViews As AcadViews
  5. Dim varViewCen As Variant
  6. Dim dblHgt As Double
  7. Dim dblWdt As Double
  8. Dim dblLLPt(0 To 2) As Double
  9. Dim dblURPt(0 To 2) As Double
  10. Dim objEnt As AcadEntity
  11. Dim objBlkRef As AcadBlockReference
  12. Dim objSelSet As AcadSelectionSet
  13. Dim objSelSets As AcadSelectionSets
  14. Dim strSldName As String
  15. Set objViews = ThisDrawing.Views
  16. For Each objView In objViews
  17.   varViewCen = objView.Center
  18.   dblHgt = objView.Height
  19.   dblWdt = objView.Width
  20.   dblLLPt(0) = varViewCen(0) - (dblWdt / 2)
  21.   dblLLPt(1) = varViewCen(1) - (dblHgt / 2)
  22.   dblLLPt(2) = 0
  23.   dblURPt(0) = varViewCen(0) + (dblWdt / 2)
  24.   dblURPt(1) = varViewCen(1) + (dblHgt / 2)
  25.   dblURPt(2) = 0
  26.   ZoomWindow dblLLPt, dblURPt
  27.         
  28.   Set objSelSet = ThisDrawing.SelectionSets
  29.   For Each objSelSet In objSelSets
  30.     If objSelSet.Name = "blkpick" Then
  31.       ThisDrawing.SelectionSets.Item(strSet).Delete
  32.     Exit For
  33.     End If
  34.   Next
  35.   Set objSelSet = objSelSets.Add("blkpick")
  36.   objSelSet.Select acSelectionSetWindow, dblllpnt, dblurpnt
  37.   For Each objEnt In objSelSet
  38.     If TypeOf objEnt Is AcadBlockReference Then
  39.       Set objBlkRef = objEnt
  40.       strSldName = objBlkRef.Name
  41.       Exit For
  42.     End If
  43.   Next objEnt
  44.   ThisDrawing.SendCommand "MSLIDE c:\tempslide" & strSldName & vbCr
  45. Next objView
  46.    
  47.    
  48. Next objView
  49. End Sub

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 13:52:34 | 显示全部楼层
别忘了更改文件。我只是快速地完成了视图,没有测试阶段,然后将其他东西的一部分放了进去。肯定会需要一些清理。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 14:08:12 | 显示全部楼层

嘿Bob
我很感激
我有一个想法,中心、高度和宽度方法是门票,但我没有取得进展,所以我试图改变。
无论如何,我可以从尝试您发布的代码中看出它“将”开始工作;这太酷了!
它正在创建幻灯片,但不是在正确的目录中,我现在正在处理该部分,我刚刚将文件代码放入其中。
此外,在最后,我只是将zoomago
所以,让我看看我可以在这里做什么
马克
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2008-5-5 15:21:33 | 显示全部楼层

鲍勃
我仍然遇到问题,使这项工作正常工作,但我想到了一件事
为什么我需要恢复每个视图?
如果我只是冻结模块开头所有视图所在的图层,该怎么办?呵呵

鲍勃,这是正在生成的错误
你看到我哪里出错了吗?
另外,我不太确定我们甚至需要写出块名列表;我可能是错的。
如果我们使用slidelib从DOS创建一个幻灯片库,那么我们绝对需要该txt文件
这是到目前为止的代码:
  1. On Error Resume Next
  2. ThisDrawing.SelectionSets.Item("blkpick").Delete
  3. Dim objView As AcadView
  4. Dim objViews As AcadViews
  5. Dim varViewCen As Variant
  6. Dim dblHgt As Double
  7. Dim dblWdt As Double
  8. Dim dblLLPt(0 To 2) As Double
  9. Dim dblURPt(0 To 2) As Double
  10. Dim objEnt As AcadEntity
  11. Dim objBlkRef As AcadBlockReference
  12. Dim objSelSet As AcadSelectionSet
  13. Dim objSelSets As AcadSelectionSets
  14. Dim intFile As Integer
  15. Dim strFileName As String
  16. Dim strSldName As String
  17. Dim sysFileDia As Integer
  18. sysFileDia = ThisDrawing.GetVariable("FILEDIA")
  19. ThisDrawing.SetVariable "FILEDIA", 0
  20. Set objViews = ThisDrawing.Views
  21. For Each objView In objViews
  22.   varViewCen = objView.Center
  23.   dblHgt = objView.Height
  24.   dblWdt = objView.Width
  25.   dblLLPt(0) = varViewCen(0) - (dblWdt / 2)
  26.   dblLLPt(1) = varViewCen(1) - (dblHgt / 2)
  27.   dblLLPt(2) = 0
  28.   dblURPt(0) = varViewCen(0) + (dblWdt / 2)
  29.   dblURPt(1) = varViewCen(1) + (dblHgt / 2)
  30.   dblURPt(2) = 0
  31.   ZoomWindow dblLLPt, dblURPt
  32.         
  33.   Set objSelSets = ThisDrawing.SelectionSets
  34.   Set objSelSet = objSelSets.Add("blkpick")
  35.   
  36.   objSelSet.Select acSelectionSetWindow, dblLLPt, dblURPt
  37.       
  38.   For Each objEnt In objSelSet
  39.     If TypeOf objEnt Is AcadBlockReference Then
  40.       Set objBlkRef = objEnt
  41.       strSldName = objBlkRef.Name
  42.       Exit For
  43.     End If
  44.   Next objEnt
  45.   ThisDrawing.SendCommand "MSLIDE c:\tempslide" & strSldName & vbCr
  46.   strFileName = "C:\tempslide" & ThisDrawing.GetVariable("dwgname") & ".lst"
  47.   '*****MAKE SURE THIS FOLDER EXISTS*****
  48.       intFile = FreeFile
  49.       Open strFileName For Append As #intFile
  50.       Print #intFile, strSldName & ".sld"
  51.       Close #intFile
  52. Next objView
  53.   ThisDrawing.SetVariable "FILEDIA", sysFileDia
  54.   ZoomPrevious

谢谢
Mark
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2008-5-5 15:30:52 | 显示全部楼层

好的
好消息和坏消息
好消息是我没有正确地看到filedia。
我修复了这个问题,所有的幻灯片都创建好了
但是,冻结图层毕竟不是一个好主意
如果我这样做了,那么会选择哪些点呢?DUHHH
所以,如果你能帮助我在选择点之前恢复每个视图,那么我会说,这是一个明确的目标
如果我有时间,我也会再试一次
你肯定得到了循环部分工作完美的标志
回复

使用道具 举报

18

主题

222

帖子

51

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
260
发表于 2008-5-5 15:36:51 | 显示全部楼层
这些点是根据视图的宽度和高度生成的
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 16:35:00 | 显示全部楼层
是的,我知道<br>所以,你不会认为冻结该层会产生任何影响,对吗
当您执行手动mslide和在冻结层的情况下运行此代码时,肯定会有明显的差异
我不确定问题出在哪里。
我在想,可能是我需要去掉代码中的zoomwindow部分
我很想冻结图层并完成,但幻灯片没有给出高度和宽度大小
我没有仔细查看Bob的代码,我假设数学是正确的
标记
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 16:56:25 | 显示全部楼层
被冻结的图层与任何事情都无关。 您保存的视图可能与基于矩形的窗口不同。 我还没有检查,现在也没有时间这样做。 我会再试一次...我已经说过好几次了,其他人也说过。 逐行逐行浏览代码,查看发生的情况。 当我发布的代码根据视图“1”缩放窗口时,屏幕看起来是否与手动还原视图相同?
如果您删除了代码的缩放窗口部分,会发生什么? 提示,mslide 制作当前显示的幻灯片。 如果不更改当前显示并制作幻灯片,您将获得什么? 如果您不再更改它,并制作另一张幻灯片,您将获得什么?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-5 15:33 , Processed in 1.179018 second(s), 72 queries .

© 2020-2025 乐筑天下

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