找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 534|回复: 2

[VBA函数]:闲来无事,作了一个图纸的编号程序。

[复制链接]
发表于 2004-5-12 12:46:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
受efan2000的指点,特将代码贴出,以表感谢!呵呵!
  望各位提点意见!

  1. 'by gzy
  2. 'gzy@mjtd.com
  3. 'scuta**可供个人使用,但不得转载
  4. Dim Nums As Integer
  5. Sub Numbers()
  6. Nums = 1
  7. Dim keyWord As String
  8.     ThisDrawing.Utility.InitializeUserInput 0, "y n"
  9.     keyWord = ThisDrawing.Utility.GetKeyword(vbCrLf & "编号是否带圈[否(N)/是(Y)][N]: ")
  10.    
  11.     If keyWord = "" Then
  12.       keyWord = "N"
  13.       Call Ncircle
  14.     Else
  15.       Call Cir
  16.     End If
  17.    
  18.     If keyWord = "N" Then Call Ncircle
  19. End Sub

  20. Sub Ncircle()
  21. RETRY:
  22.     Dim PPck1 As Variant, PPck2 As Variant
  23.     Dim textobject(0) As AcadObject: Dim line1 As AcadLine: Dim line2 As AcadLine
  24.     Dim ppt(0 To 2) As Double:  Dim Numbers1 As String: Dim Inserpt(0 To 2) As Double
  25.    
  26.      On Error Resume Next
  27.     '  ThisDrawing.GetVariable ("osnap")
  28.      PPck1 = ThisDrawing.Utility.GetPoint(, "请指定零件:")
  29.          If Err <> 0 Then
  30.                 Err.Clear
  31.                 ThisDrawing.Utility.Prompt " 没有指定零件,退出"
  32.                 Exit Sub
  33.           End If
  34.      PPck2 = ThisDrawing.Utility.GetPoint(, "请指定编号位置:")
  35.         If Err <> 0 Then
  36.                 Err.Clear
  37.                 ThisDrawing.Utility.Prompt " 没有指定编号位置,退出"
  38.                 Exit Sub
  39.           End If
  40.   Set line1 = ThisDrawing.ModelSpace.AddLine(PPck1, PPck2)
  41.   TextHeight = ThisDrawing.GetVariable("dimtxt") '沿用系统文字高度
  42.   
  43.   If pd(PPck1, PPck2) = True Then
  44.        ppt(0) = PPck2(0) - 2 * TextHeight:   ppt(1) = PPck2(1):    ppt(2) = PPck2(2)
  45.   Else
  46.        ppt(0) = PPck2(0) + 2 * TextHeight:   ppt(1) = PPck2(1):    ppt(2) = PPck2(2)
  47.   End If
  48.   
  49.   Set line2 = ThisDrawing.ModelSpace.AddLine(PPck2, ppt)
  50.   line2.Lineweight = acLnWt030
  51.   ThisDrawing.SendCommand "_LWDISPLAY" & vbCr & "on" & vbCr   '显示线宽
  52.       
  53.   Numbers1 = ThisDrawing.Utility.GetString(0, vbCrLf & "请输入编号数字(上一编号为" & Nums - 1 & ")" & "[" & Nums & "]:")
  54.   If Numbers1 = "" Then Numbers1 = Nums
  55.   If pd(PPck1, PPck2) = True Then
  56.     If Len(Numbers1) = 1 Then
  57.       Inserpt(0) = ppt(0) + 0.6 * TextHeight: Inserpt(1) = ppt(1) + 0.2 * TextHeight: Inserpt(2) = ppt(2)
  58.     Else
  59.       Inserpt(0) = ppt(0) + 0.1 * TextHeight: Inserpt(1) = ppt(1) + 0.2 * TextHeight: Inserpt(2) = ppt(2)
  60.     End If
  61.   Else
  62.      If Len(Numbers1) = 1 Then
  63.       Inserpt(0) = ppt(0) - 1.2 * TextHeight: Inserpt(1) = ppt(1) + 0.2 * TextHeight: Inserpt(2) = ppt(2)
  64.      Else
  65.        Inserpt(0) = ppt(0) - 1.8 * TextHeight: Inserpt(1) = ppt(1) + 0.2 * TextHeight: Inserpt(2) = ppt(2)
  66.      End If
  67.   End If
  68.      Set textobject(0) = ThisDrawing.ModelSpace.AddText(Numbers1, Inserpt, TextHeight)
  69.     Nums = Numbers1 '使提示与上一编号关联
  70.     Nums = Nums + 1
  71. Dim Group1 As AcadGroup
  72. Dim objgroup(0 To 2) As AcadEntity
  73. Set objgroup(0) = line1
  74. Set objgroup(1) = line2
  75. Set objgroup(2) = textobject(0)
  76. Set Group1 = ThisDrawing.Groups.Add("*")
  77. Group1.AppendItems objgroup

  78. GoTo RETRY
  79. End Sub

  80. Sub Cir()
  81. RETRY:
  82.     Dim PPck1 As Variant, PPck2 As Variant
  83.     Dim textobject(0) As AcadObject: Dim line1 As AcadLine: Dim Cirobj As AcadCircle
  84.     Dim ppt(0 To 2) As Double:  Dim Numbers1 As String: Dim Inserpt(0 To 2) As Double
  85.    
  86.      On Error Resume Next
  87.      PPck1 = ThisDrawing.Utility.GetPoint(, "请指定零件:")
  88.          If Err <> 0 Then
  89.                 Err.Clear
  90.                 ThisDrawing.Utility.Prompt " 没有指定零件,退出"
  91.                 Exit Sub
  92.           End If
  93.      PPck2 = ThisDrawing.Utility.GetPoint(, "请指定编号位置:")
  94.         If Err <> 0 Then
  95.                 Err.Clear
  96.                 ThisDrawing.Utility.Prompt " 没有指定编号位置,退出"
  97.                 Exit Sub
  98.           End If
  99.   Set line1 = ThisDrawing.ModelSpace.AddLine(PPck1, PPck2)
  100.   TextHeight = ThisDrawing.GetVariable("dimtxt") '沿用系统文字高度
  101.   ppt(0) = PPck2(0) + 0.7 * TextHeight: ppt(1) = PPck2(1) - 0.5 * TextHeight: ppt(2) = PPck2(2)
  102.   Set Cirobj = ThisDrawing.ModelSpace.AddCircle(PPck2, 1.2 * TextHeight)
  103.     PPck2 = Cirobj.IntersectWith(line1, acExtendNone) '求交点
  104.     line1.EndPoint = PPck2   '剪切引线
  105.       
  106.     Numbers1 = ThisDrawing.Utility.GetString(0, vbCrLf & "限于输入二位数字" & vbCrLf & "请输入编号数字(上一编号为" & Nums - 1 & ")" & "[" & Nums & "]:")
  107.     If Numbers1 = "" Then Numbers1 = Nums
  108.     If Len(Numbers1) = 2 Then
  109.       Inserpt(0) = ppt(0) - 1.5 * TextHeight: Inserpt(1) = ppt(1) + 0.01 * TextHeight: Inserpt(2) = ppt(2)
  110.     End If
  111.     If Len(Numbers1) = 1 Then
  112.      Inserpt(0) = ppt(0) - TextHeight: Inserpt(1) = ppt(1) + 0.01 * TextHeight: Inserpt(2) = ppt(2)
  113.     End If
  114.    
  115.     Set textobject(0) = ThisDrawing.ModelSpace.AddText(Numbers1, Inserpt, TextHeight)
  116.    
  117.     Nums = Numbers1 '使提示与上一编号关联
  118.     Nums = Nums + 1
  119. Dim Group2 As AcadGroup
  120. Dim objgroup(0 To 2) As AcadEntity
  121. Set objgroup(0) = line1
  122. Set objgroup(1) = Cirobj
  123. Set objgroup(2) = textobject(0)
  124. Set Group1 = ThisDrawing.Groups.Add("*")
  125. Group1.AppendItems objgroup

  126. GoTo RETRY
  127. End Sub
  128. Function pd(p1 As Variant, p2 As Variant) As Boolean '判断斜率,以便确定文字位置
  129.     If p1(0) > p2(0) Then
  130.       pd = True
  131.     Else
  132.       pd = False
  133.     End If
  134. End Function
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3532个

财富等级: 富可敌国

发表于 2004-5-13 10:02:08 | 显示全部楼层
不错!
还实用!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-19 09:55:10 | 显示全部楼层

这位大哥可以帮帮我吗?

这位大哥,小弟我遇到了一些难题,这关系到小弟的学业。
问题是这样的:我要编一个绘制液压原理图的程序,是二维的,我的任务要求是实现原理图中各个液压阀件的自动连线。关键问题是连线时所要连的线要自动绕开阀件(插入的块)要求用VBA编,希望大哥能帮小弟解决这个难题,能给小弟一个自动连线并绕开障碍区(阀件)的源程序,小弟将不胜感激!!!!!!小弟在此先谢谢大哥了!!!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-23 23:11 , Processed in 0.400850 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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