乐筑天下

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

在Sset中捕获命名视图

[复制链接]

17

主题

162

帖子

7

银币

后起之秀

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

铜币
234
发表于 2008-5-5 10:55:22 | 显示全部楼层 |阅读模式
您好,我有一个包含73个命名视图的图形
我正在编写一些代码
需要一些帮助(谢谢鲍勃!)
这部分工作正常[代码它所做的就是抓取图形中的每个blkref(每个视图1个),并使用blkfef为每个BLKEF制作幻灯片。名称为幻灯片名称。然而,我希望能够抓取图形中每个视图的左下角和右上角点,作为每个幻灯片的拾取点。我编写了以下代码,我收到了每个点的提示,视图被缩放到窗口,这对于这一点至关重要,但我无法在sset或中将视图识别为实体类型;我可能做错了什么
我遇到的另一个问题是,通过使用for-each循环,我最终得到了一个幻灯片
我想做的就是提示每个视图,选择我的点,然后让代码为该视图指定blockref名称作为每个幻灯片的名称,然后将视图返回到上一个视图并提示进行下一个选择
此外,对于视图,每个视图都需要恢复(-视图、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
最后,我想将视图恢复到上一个
有人能帮我克服这最后的困境吗
谢谢
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 12:51:35 | 显示全部楼层
HAND#039;我没有抛弃你,只是很忙
看看,需要添加目录选择和文本文件位
  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 | 显示全部楼层
唐#039;别忘了换文件 我只是快速地完成了一些视图,没有测试,然后插入了一些其他内容 肯定需要一些清理。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

嘿,鲍勃,我很欣赏这一点,我有一个想法,中心,高度和宽度的方法是门票,但我没有取得进展,所以我试图改变了
无论如何,我可以从您发布的代码中看出,它是;“继续”;工作;太酷了
它正在创建幻灯片,但不在正确的目录中,我现在正在处理这一部分,我只是把filedia代码放进去了
最后,我把zoomprevious放在这里,让我看看我能做些什么
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

Bob'我仍然有一个问题,使它正常工作,但我想到一件事,为什么我需要恢复每个视图
如果我只冻结模块开头所有视图所在的层,怎么样?这应该行得通
鲍勃,这就是产生的错误,你知道我哪里出错了吗
此外,我真的不确定我们是否需要写出区块名列表;我可能错了
如果我们使用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
谢谢马克
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

好的,好消息和坏消息,好消息是我没有正确地看到文件
我修复了这个问题,所有的幻灯片都被创建了。然而,冻结层毕竟不是一个好主意。如果我这样做了,那么会选取哪些点?DUHHH所以,如果你能帮助我在拾取点之前恢复每个视图,那么我会说,这是一个确定的过程,如果我在这里有一些时间,我也会再试一次,你肯定让循环部分工作得很好
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

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

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 16:35:00 | 显示全部楼层
是的,我知道,所以你不会'我不认为冻结这层会有任何影响,对吗
当您执行手动mslide和在冻结层的情况下运行此代码时,肯定会有明显的不同
I'我不确定问题出在哪里。我在想,也许我需要去掉代码中的zoomwindow部分
如果我们使用zoomwindow,我们需要在屏幕上挑选一些东西,不是吗;我们不是吗
我很想冻结层并完成,但幻灯片的高度和宽度都不合适
我没有'我真的没有仔细看鲍勃's代码,我假设数学是正确的
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2008-5-5 16:56:25 | 显示全部楼层
被冻结的层与任何事情都无关 It#039;您保存的视图可能与基于矩形的窗口不同 我没有#039;t检查和don#039;我现在没有时间这么做 本人'我再试试这个……我'我说过几次,其他人也说过 逐行检查代码,看看是什么#039;正在发生 当我发布的代码基于视图缩放窗口时;1、;,屏幕看起来是否与手动恢复视图相同
如果去掉代码中的zoomwindow部分,会发生什么 提示,mslide对当前显示进行滑动 如果你不't改变当前显示并制作幻灯片,你得到了什么 如果你不'再换一次,再做一张幻灯片,你得到了什么?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-7 18:04 , Processed in 0.322950 second(s), 72 queries .

© 2020-2025 乐筑天下

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