乐筑天下

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

[编程交流] 无法使用selec删除文本

[复制链接]

10

主题

23

帖子

20

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-6 22:25:51 | 显示全部楼层 |阅读模式
我快疯了。。。
 
这是可行的,但我不想在屏幕上选择。。。
  1. ss.SelectOnScreen

 
我试图选择两个坐标的交叉点,但没有成功。。。
  1. ss.Select acSelectionSetCrossing, ip, ipCross

 
我的下一步是过滤文本和层名称,但这也不起作用。。。
  1.     Dim FilterType(0 To 1) As Variant
  2.    Dim FilterData(0 To 1) As Variant
  3.    FilterType(0) = 0: FilterData(0) = "TEXT"
  4.    FilterType(1) = 8: FilterData(1) = "FILEPATHTEXT"
  5.    ss.Select acSelectionSetAll, , , FilterType, FilterData

 
所以我有一个很好的小程序来添加文本,如果它已经存在,我只想先删除它,但我做不到。非常感谢您的帮助。
 
  1.     ' Define Text String coordinates
  2.    Dim dwgscale As Integer
  3.    dwgscale = ThisDrawing.GetVariable("DIMSCALE")
  4.    
  5.    Dim h As Double
  6.    h = 0.1 * dwgscale
  7.    
  8.    Dim minext As Variant
  9.    minext = ThisDrawing.GetVariable("EXTMIN")
  10.    Dim min(0 To 2) As Double
  11.    min(0) = minext(0)
  12.    min(1) = minext(1)
  13.    min(2) = minext(2)
  14.    Dim ip(0 To 2) As Double
  15.    ip(0) = min(0)
  16.    ip(1) = min(1) + negret(h * 1.3)
  17.    ip(2) = 0
  18.    
  19.    ' Check for Text String at coordinates and delete
  20.    Dim ipCross(0 To 2) As Double
  21.    ipCross(0) = ip(0) + h
  22.    ipCross(1) = ip(1) + h
  23.    ipCross(2) = 0
  24.            
  25.    Dim ss As AcadSelectionSet
  26.    On Error Resume Next
  27.    Set ss = ThisDrawing.SelectionSets.Add("DEL")
  28.    Set ss = ThisDrawing.SelectionSets.Item("DEL")
  29.    
  30.    ' ss.Select acSelectionSetCrossing, ip, ipCross ' This doesn't work
  31.    ' ss.SelectOnScreen ' This Works!
  32.    Dim FilterType(0 To 1) As Variant
  33.    Dim FilterData(0 To 1) As Variant
  34.    FilterType(0) = 0: FilterData(0) = ""
  35.    FilterType(1) = 8: FilterData(1) = "FILEPATHTEXT"
  36.    ss.Select acSelectionSetAll, , , FilterType, FilterData
  37.       
  38.    Dim Ent As AcadEntity
  39.    Dim c As Integer
  40.    c = ss.Count
  41.    For c = 0 To ss.Count - 1
  42.        Ent = ss.Item(c)
  43.        Ent.Erase
  44.        Ent.Update
  45.    
  46.    Next
  47.    ss.Update
  48.    ss.Delete
  49.    'ThisDrawing.SelectionSets.Item("DEL").Delete

 
提前谢谢。
回复

使用道具 举报

5

主题

194

帖子

193

银币

初来乍到

Rank: 1

铜币
24
发表于 2022-7-6 22:36:24 | 显示全部楼层
你好
 
只要看看代码的逻辑。您是否对正在过滤的对象始终位于计算点ip和ip之间感到满意?
 
negret函数做什么?
 
当做
 
杰米
回复

使用道具 举报

10

主题

23

帖子

20

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-6 22:49:31 | 显示全部楼层
这应该是一个十字路口。无论如何,我否决了那一条。现在,如果我能把所有的文字放在一个图层上,我会很高兴,但这也不行。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 22:57:12 | 显示全部楼层
我自己无法测试,但如果你改变会发生什么:
 
Dim FilterType(0到1)作为变体
 
收件人:
 
Dim FilterType(0到1)为整数
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:06:06 | 显示全部楼层
此外,这看起来有点可疑:
 
FilterType(0)=0:FilterData(0)=“”
回复

使用道具 举报

10

主题

23

帖子

20

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-6 23:12:44 | 显示全部楼层
Int,variant,没有区别。另一行实际上是这样写的。
FilterType(0)=0:FilterData(0)=“TEXT”
回复

使用道具 举报

10

主题

23

帖子

20

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-6 23:17:57 | 显示全部楼层
negret返回负#。因此,3=-3和-3=-3。
回复

使用道具 举报

10

主题

23

帖子

20

银币

初来乍到

Rank: 1

铜币
44
发表于 2022-7-6 23:29:36 | 显示全部楼层
好吧,我想出来了。这是代码。不过,很高兴看到选择集可以工作。
 
我唯一的进退维谷是让最大化工作。在下面的完整列表中,我有以下内容:
  1.     ' Regen after deletion
  2.    ThisDrawing.SendCommand "ZOOM" & vbCr & "EXTENTS"
  3.    ThisDrawing.Regen acActiveViewport

 
 
regen的目的是在删除左下角的文本后重新Blish EXTMIN变量。如果我删除它并手动重新生成,程序运行得很好。然而,当按如上所示编程完成时,它会不断添加到EXTMIN,使文本每次都以较低的delta-Y插入。
 
再次感谢。。。
 
完整列表:
  1. Sub AddPath()
  2.    ' Julian Date Conversion Issues
  3.    Dim lastsave As String
  4.    lastsave = ThisDrawing.GetVariable("TDUPDATE")
  5.    ' *****************************
  6.    
  7.    ' Set Layer to 'BORDER'
  8.    ' Get current layer
  9.    Dim currLayer As String
  10.    currLayer = ThisDrawing.GetVariable("CLAYER")
  11.          
  12.    ' Set new layer
  13.    Dim layerObj As AcadLayer
  14.    Set layerObj = ThisDrawing.Layers.Add("FILEPATHTEXT")
  15.    ThisDrawing.ActiveLayer = layerObj
  16.       
  17.    ' Set Style to 'SIMPLEX
  18.    ' Get current style
  19.    Dim currStyle As String
  20.    currStyle = ThisDrawing.GetVariable("DIMTXSTY")
  21.    
  22.    ' Set new style
  23.    Dim styleObj As AcadTextStyle
  24.    Set styleObj = ThisDrawing.TextStyles.Add("SIMPLEX")
  25.    styleObj.fontFile = "simplex.shx"
  26.    styleObj.Width = 1
  27.    styleObj.Height = 0
  28.    ThisDrawing.ActiveTextStyle = styleObj
  29.    
  30.    ' Zoom extents to recalculate extmin
  31.    Application.Application.ZoomExtents
  32.    
  33.    ' Define Text String coordinates
  34.    Dim dwgscale As Integer
  35.    dwgscale = ThisDrawing.GetVariable("DIMSCALE")
  36.    
  37.    Dim h As Double
  38.    h = 0.1 * dwgscale
  39.    
  40.    Dim minext As Variant
  41.    minext = ThisDrawing.GetVariable("EXTMIN")
  42.    Dim min(0 To 2) As Double
  43.    min(0) = minext(0)
  44.    min(1) = minext(1)
  45.    min(2) = minext(2)
  46.    Dim ip(0 To 2) As Double
  47.    ip(0) = min(0)
  48.    ip(1) = min(1) + negret(h * 1.3)
  49.    ip(2) = 0
  50.    
  51.    ' Check for Text String at coordinates and delete - Option 1
  52.    'Dim ipCross(0 To 2) As Double
  53.    'ipCross(0) = ip(0) + h
  54.    'ipCross(1) = ip(1) + h
  55.    'ipCross(2) = 0
  56.            
  57.    'Dim ss As AcadSelectionSet
  58.    'Dim Ent As AcadEntity
  59.      
  60.    'On Error Resume Next
  61.    'Set ss = ThisDrawing.SelectionSets.Add("DEL")
  62.    'Set ss = ThisDrawing.SelectionSets.Item("DEL")
  63.    
  64.    ' ss.Select acSelectionSetCrossing, ip, ipCross ' This doesn't work
  65.    ' ss.SelectOnScreen ' This Works!
  66.    
  67.    'Dim FilterType(0 To 1) As Variant
  68.    'Dim FilterData(0 To 1) As Variant
  69.    'FilterType(0) = 0: FilterData(0) = "TEXT"
  70.    'FilterType(1) = 8: FilterData(1) = "FILEPATHTEXT"
  71.    'ss.Select acSelectionSetAll, , , FilterType, FilterData
  72.            
  73.    'Dim Ent As AcadEntity
  74.    'Dim c As Integer
  75.    'c = ss.Count
  76.    'For c = 0 To ss.Count - 1
  77.    '    Ent = ss.Item(c)
  78.    '    Ent.Erase
  79.    '
  80.    'Next
  81.    '
  82.    'For Each Ent In ss
  83.    '    Ent.Erase
  84.    '
  85.    'Next
  86.    '
  87.    'ss.Clear
  88.    'ss.Delete
  89.    'Set ss = Nothing
  90.    
  91.    ' Check for Text String at coordinates and delete - Option 2
  92.    Dim objDataBase As AcadDatabase
  93.    Dim objBlock As AcadBlock
  94.    Dim Ent As AcadEntity
  95.    Dim c As Integer
  96.    Dim i As Integer
  97.    Dim entCollection As Collection
  98.    Dim varHandle As Variant
  99.       
  100.    Set entCollection = New Collection
  101.    
  102.    For Each objBlock In ThisDrawing.Blocks
  103.        c = objBlock.Count
  104.        For i = 0 To c - 1
  105.            If TypeOf objBlock.Item(i) Is AcadEntity Then
  106.                If objBlock.Item(i).Layer = "FILEPATHTEXT" Then
  107.                    entCollection.Add (objBlock.Item(i).Handle)
  108.            
  109.                End If
  110.       
  111.            End If
  112.            
  113.        Next
  114.                
  115.        On Error Resume Next
  116.        For Each varHandle In entCollection
  117.            Set Ent = ThisDrawing.HandleToObject(CStr(varHandle))
  118.            Ent.Delete
  119.            
  120.        Next
  121.       
  122.        On Error GoTo 0
  123.       
  124.    Next
  125.       
  126.    ' Regen after deletion
  127.    ThisDrawing.SendCommand "ZOOM" & vbCr & "EXTENTS"
  128.    ThisDrawing.Regen acActiveViewport
  129.    
  130.    ' Add Text String
  131.    Dim dir As String
  132.    dir = ThisDrawing.GetVariable("DWGPREFIX")
  133.    Dim fil As String
  134.    fil = ThisDrawing.GetVariable("DWGNAME")
  135.       
  136.    Dim objText2 As AcadText
  137.    Dim textString As String
  138.    textString = dir & fil
  139.    Set objText2 = ThisDrawing.ModelSpace.AddText(textString, ip, h)
  140.    ' Set layer back
  141.    Dim layerObjOrig As AcadLayer
  142.    Set layerObjOrig = ThisDrawing.Layers.Add(currLayer)
  143.    ThisDrawing.ActiveLayer = layerObjOrig
  144.    
  145.    ' Set style back
  146.    Dim styleObjOrig As AcadTextStyle
  147.    Set styleObjOrig = ThisDrawing.TextStyles.Add(currStyle)
  148.    ThisDrawing.ActiveTextStyle = styleObjOrig
  149. End Sub
  150. Function negret(ByVal n As Single) As Single
  151.    If n > 0 Then
  152.        negret = n - (n * 2)
  153.    Else
  154.        negret = n
  155.    End If
  156. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 08:40 , Processed in 0.397918 second(s), 68 queries .

© 2020-2025 乐筑天下

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