明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2635|回复: 15

圖塊會增加

  [复制链接]
发表于 2006-4-10 11:50:00 | 显示全部楼层 |阅读模式

本人写了如下一个VBA程式,就是将所选物体变成一个螺丝孔,但是出现了下面一些问题

假如先画一个圆,第一次将其变成m8,这一次很理想,而再次将m8变成m10就将不理想了,它生成了一个由m8和m10组成的块,我以为是没有删除以前块的原因,於是加了下面绿色的程式,可是还是没有用,请知道原因的老大多多指教,谢谢

Public Sub tt1()        '以下是变为各种螺丝调用程式
Dim r  As Double
On Error Resume Next
Dim sr As String
Dim zm As String
Dim shuz As Double

sr = InputBox("请输入人要变的东东", "变变", "")
zm = Mid(sr, 1, 1)
shuz = Mid(sr, 2)
If zm = "m" Then
     If shuz = 5 Then
     yj = 4.3
     End If
     If shuz = 6 Then
     yj = 5.2
     End If
     If shuz = 8 Then
     yj = 6.8
     End If
     If shuz = 10 Then
     yj = 8.6
     End If
     If shuz = 12 Then
     yj = 10.5
     End If
     If shuz = 14 Then
     yj = 12.5
     End If
     Call gy1(shuz)
End If

If zm = "u" Then '以下是正面沉头的调用公式
     Call u(shuz)

Else
     Call gy(Val(sr))   '这是变为圆的调用程式
End If
End Sub


Public Sub gy1(ls As Double)
On Error Resume Next
Dim ssetobj1 As AcadSelectionSet      '以下是画螺丝的共用程式
Dim icount1 As Integer
Dim i1 As Integer
Dim selobj1 As AcadObject
Dim blockobj As AcadBlock
Dim insertpoint(0 To 2) As Double
Dim i As Integer
Dim blockrefobj As AcadBlockReference

icount1 = ThisDrawing.SelectionSets.Count
While (icount1 > 0)
    If ThisDrawing.SelectionSets.Item(icount1 - 1).Name = "yuan" Then
    ThisDrawing.SelectionSets.Item(icount1 - 1).Delete
    End If
    icount1 = icount1 - 1
    Wend
    Set ssetobj1 = ThisDrawing.SelectionSets.Add("yuan")
    ThisDrawing.Utility.Prompt "please select object"
    ssetobj1.SelectOnScreen
  Const pi = 3.141592654
 
  insertpoint(0) = 0
  insertpoint(1) = 0
  insertpoint(2) = 0
  i = ThisDrawing.Blocks.Count
    While (i > 0)
      If ThisDrawing.Blocks.Item(i - 1).Name = "luosi" Then
             ThisDrawing.Blocks.Item(i - 1).Delete
       End If
       i = i - 1
       Wend

  Set blockobj = ThisDrawing.Blocks.Add(insertpoint, "luosi")
  Set arc1 = blockobj.AddArc(insertpoint, ls / 2, pi, pi / 2)
  Set circ1 = blockobj.AddCircle(insertpoint, yj / 2)

  For i1 = 0 To ssetobj1.Count - 1
      Set selobj1 = ssetobj1.Item(i1)
  If selobj1.ObjectName = "AcDbCircle" Or selobj1.ObjectName = "AcDbCrc" Then

      pt1 = selobj1.Center
  Else

      pt1 = selobj1.InsertionPoint
  End If

Set blockrefobj = ThisDrawing.ModelSpace.InsertBlock(pt1, "luosi", 1#, 1#, 1#, 0)
       selobj1.Delete
   
      Next

End Sub

 楼主| 发表于 2006-4-10 22:33:00 | 显示全部楼层
这么多朋友看过都没有大师回答,还是请请教一下版主,希望版主能帮我一个忙,在此感谢
发表于 2006-4-11 06:48:00 | 显示全部楼层

需要保证你所建的图块没有被插入到图面中才能对块进行删除。

如果块删除不了,则会在下次使用时直接往里面添加东西。

你可以在找到块时,不去删除它,而是把它里面的图元都删除掉。然后再加入新的图元。

 楼主| 发表于 2006-4-11 09:06:00 | 显示全部楼层

版主你好,本人明白了你的意思,操作了一翻,但还是不成功,还是每次都会在上次的块里加东西,不知道是否可以劳驾一下版主在本人上面的程式中改一个地方,并用红色标示一下,多谢你

发表于 2006-4-11 11:13:00 | 显示全部楼层

感觉你的问题最好使用无名块,

 楼主| 发表于 2006-4-11 11:46:00 | 显示全部楼层

版主你好,无名块也试过,好象没有反应

请问各版主及管理员还有各位朋友是否有好方法,感谢万分

 

发表于 2006-4-11 18:35:00 | 显示全部楼层
随便改的:
  1. Public Sub tt1()        '以下是变为各种螺丝调用程式
  2. Dim R  As Double
  3. On Error Resume Next
  4. Dim Sr As String
  5. Dim Zm As String
  6. Dim Shuz As Integer
  7. Dim Yj As Double
  8. Sr = InputBox("请输入人要变的东东", "变变", "")
  9. Zm = Left(Sr, 1)
  10. Shuz = Mid(Sr, 2)
  11. Select Case Zm
  12.     Case "m"
  13.     Select Case Shuz
  14.         Case 5
  15.             Yj = 4.3
  16.         Case 6
  17.             Yj = 5.2
  18.         Case 8
  19.             Yj = 6.8
  20.         Case 10
  21.             Yj = 8.6
  22.         Case 12
  23.             Yj = 10.5
  24.         Case 14
  25.             Yj = 12.5
  26.     End Select
  27.      Call Gy1(Shuz, Yj)
  28.     Case "u"  '以下是正面沉头的调用公式
  29.      'Call u(shuz)
  30.     Case Else
  31.     'Call gy(Val(sr))   '这是变为圆的调用程式
  32. End Select
  33. End Sub
  34. Public Sub Gy1(Ls As Integer, Yj As Double)
  35. On Error Resume Next
  36. Dim SSetObj1 As AcadSelectionSet      '以下是画螺丝的共用程式
  37. Dim I1 As Integer
  38. Dim SelObj1 As AcadObject
  39. Dim blockObj As AcadBlock
  40. Dim InsertPoint(0 To 2) As Double
  41. Dim i As Integer
  42. Dim BlockRefObj As AcadBlockReference
  43. Dim Pt1 As Variant
  44. Const PI = 3.141592654
  45.     ThisDrawing.SelectionSets("yuan").Delete
  46.     Err.Clear
  47.     Set SSetObj1 = ThisDrawing.SelectionSets.Add("yuan")
  48.     ThisDrawing.Utility.Prompt "please select object"
  49.     SSetObj1.SelectOnScreen
  50.   
  51.     InsertPoint(0) = InsertPoint(1) = InsertPoint(2) = 0
  52.    
  53.     Set blockObj = ThisDrawing.Blocks("luosi" & Ls)
  54.     If Err Then
  55.         Err.Clear
  56.         Set blockObj = ThisDrawing.Blocks.Add(InsertPoint, "luosi" & Ls)
  57.         blockObj.AddArc InsertPoint, Ls / 2, PI, PI / 2
  58.         blockObj.AddCircle InsertPoint, Yj / 2
  59.     End If
  60.   
  61.     For I1 = 0 To SSetObj1.Count - 1
  62.         Set SelObj1 = SSetObj1.Item(I1)
  63.         If SelObj1.ObjectName = "AcDbCircle" Or SelObj1.ObjectName = "AcDbCrc" Then
  64.             Pt1 = SelObj1.Center
  65.             Set BlockRefObj = ThisDrawing.ModelSpace.InsertBlock(Pt1, "luosi" & Ls, 1#, 1#, 1#, 0)
  66.         End If
  67.        SelObj1.Delete
  68.    
  69.       Next
  70. End Sub
按照你的情形,需要定义几个型号螺丝的图块,所以用无名块也不好,只用一个块也不好。我是按照你需要多少个型号就定义多少个。每个图块只定义一次就够了,下次用的时间由程序检测是否存在该名称的图块就OK。
 楼主| 发表于 2006-4-11 22:41:00 | 显示全部楼层

管理员你好:

你的方法我试过了,不知道你调试的是不是可以,我这边调试的结果还是不尽如意,都是第一次变化的时候可以,而第二次将m8变成m10的结果我们的刚好相反,你的是把东西都删完,而我的是多加了一个m10到图块中,结果都不如意,真闷!!,不过还是相当感谢管理员及任何一个帮助我的朋友,希望管理员或版主还可以继续帮助,谢谢!!

发表于 2006-4-11 22:53:00 | 显示全部楼层

搞不清楚你需要什么样的程序。

我的程序是这样的:
1.出现对话框,用户输入象m8,m10这样的字符。
2.让用户选择图面上的圆。
3.判断图块中是否有指定的图块,如果没有,则建该图块,如果有则跳过。
4.插入指定的图块。

这里,图块有m5,m6,m8,m10,m12,m14等多种,它们之间并不存在任何关系。

我的程序运行并不会因为插入m10时会把原先的m8给删除掉。因为它们之间不存在关系。

可能我还没有理解你需要什么样的程序。

看看我生成的图,有m8,m10和m6三种,其中m8是分两次选择生成的。它们并不相互干涉。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2006-4-11 23:05:00 | 显示全部楼层

管理员你太好了,这么快就回了,在这里我真的很感谢你

不过管理员的想法和我的是不太一样,我的想法是,假如第一次是将选中的圆变为m8,而第二次选择的对象不一定是一个圆,有可能是选我刚变过的m8,而管理员的程式在选择刚变过的m8时就将其删除了,没有将m8变成m10了

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-27 04:35 , Processed in 0.163805 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表