乐筑天下

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

[编程交流] 通过vb向块添加属性

[复制链接]

34

主题

105

帖子

91

银币

后起之秀

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

铜币
224
发表于 2022-7-6 14:16:55 | 显示全部楼层 |阅读模式
你好
 
希望有人能帮忙
 
我在下面有一些代码,允许用户选择一个块,然后向块添加一个属性,该属性由块名称填充,基本上是零件号。这一切都很好,直到块以某种方式镜像,将x、y或z比例从1更改为-1。
 
因此,如果图形上有多个块,则会添加属性,在未镜像的块上,属性是正确的,但在已镜像的块上,属性要么倒置,要么向后,或者两者兼而有之。
 
我不完全理解的是,如果在图形中只有一个未镜像的块时添加属性,则属性很好,然后可以开始镜像该块,而该块反过来会自动更改上下颠倒的值,那么为什么在运行vba程序时它不这样做呢?
 
 
 
  1. Public strMyBlockName As String
  2. Sub SelSet_FindBlockName_StoreName()
  3.    Dim MyBlockRef As AcadBlockReference
  4.    Dim I As Double
  5.    Dim MyoEnt As AcadEntity
  6.    Dim MyAttTextStr As String
  7.    On Error Resume Next
  8.    ThisDrawing.SelectionSets("SelectBlock").Delete
  9.    If Err Then Err.Clear
  10.    With ThisDrawing.Utility
  11.        '' create a new selectionset
  12.        Set objSS = ThisDrawing.SelectionSets.Add("SelectBlock")
  13.        '' let user select entities interactively
  14.        objSS.SelectOnScreen
  15.         'MyObjSS.SelectOnScreen FilterType, FilterData
  16.         'MyObjSS.Select acSelectionSetAll 'FilterType, FilterData
  17.        '' highlight the selected entities
  18.        objSS.Highlight True
  19.       
  20.       
  21.       
  22.        '' pause for the user
  23.        '.Prompt vbCr & objSS.Count & " entities selected"
  24.        '.GetString False, vbLf & "Enter to continue "
  25.        For Each MyoEnt In objSS
  26.            If TypeOf MyoEnt Is AcadBlockReference Then
  27.                Set MyBlockRef = MyoEnt
  28.                      strMyBlockName = MyBlockRef.Name
  29.                      
  30.            End If
  31.        Next
  32. End With
  33.    
  34.                            MyOldBlockObjSS.Erase
  35.       
  36.      Call Add_Att
  37.       
  38.       
  39.   End Sub
  40. Sub Add_Att()
  41.    
  42.    
  43.   ' This example creates an attribute definition in a block.
  44.    ' It then inserts the block. Then it changes the prompt string
  45.    ' of the attribute definition, and inserts the block again.
  46.    
  47.    Call MakeStringUppercase
  48.    
  49.    ' Create the block
  50.    Dim blockobj As AcadBlock
  51.    Dim insertionPnt1(0 To 2) As Double
  52.    Dim insertionPnt2(0 To 2) As Double
  53.   ' insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0#
  54.    'Set blockObj = ThisDrawing.Blocks.Add(insertionPnt1, "SFG101")
  55.    
  56.    Set blockobj = ThisDrawing.Blocks.Add(insertionPnt1, strMyBlockName)
  57.    
  58.    ' Define the attribute definition
  59.    Dim attributeObj As AcadAttribute
  60.    Dim height As Double
  61.    Dim mode As Integer
  62.    Dim prompt As String
  63.    Dim tag As String
  64.    Dim value As String
  65.    
  66.    height = 5
  67.    mode = acAttributeModeNormal
  68.       
  69.        tag1 = "Part_No"
  70.        prompt1 = "What is the Part No?"
  71.        value1 = strMyBlockName
  72.        insertionPnt1(0) = 5#: insertionPnt1(1) = 5: insertionPnt1(2) = 0
  73.    ' Create the attribute definition on the block
  74.        Set attributeObj = blockobj.AddAttribute(height, mode, prompt1, insertionPnt1, tag1, value1)
  75.            
  76.            
  77.            
  78.    ThisDrawing.SendCommand "_ATTSYNC" & vbCr & "NAME" & vbCr & strMyBlockName & vbCr
  79. 'Call SelSet_FindBlockName_StoreName
  80.   ' ZoomAll
  81. End Sub

 
提前感谢您的帮助。
 
Col公司
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 15:20:02 | 显示全部楼层
看看这个线程中的一些代码。如果比较MyBlockRef。XScaleFactor和。YScaleFactor为-1,然后可以调整myvaratt(i)。向后和。UpsideDown属性。
 
http://www.cadtutor.net/forum/showthread.php?t=25352
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:05 , Processed in 0.352261 second(s), 56 queries .

© 2020-2025 乐筑天下

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