打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
如何在Powepoint里用代码画电流表的表盘
电流表(包括电压表、万用表等等)的表盘很不好画,主要是因为指针是弧形排列而且呈放射状的。很多老师只好从别的地方扫描一张图片,或者徒手画一下。我们现在已经学了编程,当然要用程序来完成这个任务。

一、刻度的绘制

Public Sub DrawClock()
    Dim cx As Single, cy As Single, r As Single
    Dim BeginX As Single, BeginY As Single
    Dim EndX As Single, EndY As Single
    Dim i As Integer, j As Integer
    Dim shpDraw(0 To 30) As String
    Const pi As Single = 3.1415926
    cx = 300: cy = 300: r = 200
    For i = 0 To 30
      j = i - 45
      BeginX = cx + r * Cos(j * pi / 60)
      BeginY = cy + r * Sin(j * pi / 60)
      If i Mod 10 = 0 Then
          EndX = cx + (r + 20) * Cos(j * pi / 60)
          EndY = cy + (r + 20) * Sin(j * pi / 60)
      ElseIf i Mod 5 = 0 Then
          EndX = cx + (r + 10) * Cos(j * pi / 60)
          EndY = cy + (r + 10) * Sin(j * pi / 60)
      Else
          EndX = cx + (r + 5) * Cos(j * pi / 60)
          EndY = cy + (r + 5) * Sin(j * pi / 60)
      End If
      shpDraw(i) = ActiveWindow.View.Slide. _
         Shapes.AddLine(BeginX, BeginY, EndX, EndY).Name
    Next
   ActiveWindow.View.Slide.Shapes.Range(shpDraw).Select
   ActiveWindow.Selection.ShapeRange.Group
End Sub

说说程序中的几个要点:

● Const 关键字表示后面跟着的是常数,也就是在后文不能修改的数,这里用来定义圆周率。不过程序里用的是圆周率的60分之一,把这个值直接定为一个常数更好。

● AddLine 方法的意思是画直线段,后面跟着四个参数,分别是直线起点和终点的坐标。注意这里的刻度线有三种长度。

● 上面程序的最后两句,功能是选中全部画出的直线段(注意这里引用了前面所画直线段的名字,其中括号里的 shpDraw 没有下标),并组成一个组,这样将来移动刻度盘的时候不会发生错乱。

● 有的电流表在 0 刻度线的左侧还有刻度,比如是从-1~+3/-0.2~+0.6(单位是安培)的,需要对上述代码适当改动,比如相邻小刻度之间的夹角是 2.5°,最左侧和最右侧夹角是 100°。

二、其它要素的绘制

前面的程序还有一些不足,比如没有弧线、没有指针、没有表盘边框、没有文字标记,如果要增加这些内容,首先要扩大前面程序中 shpDraw 的下标范围。然后在 For 语句之前或 Next 语句之后,增加相应的绘图程序:

'绘制弧线

shpDraw(31) = ActiveWindow.View.Slide.Shapes. _
    AddShape(msoShapeArc, cx, cy - r, r, r).Name
ActiveWindow.View.Slide. _
    Shapes(shpDraw(31)).Adjustments.Item(1) = -135
ActiveWindow.View.Slide. _
    Shapes(shpDraw(31)).Adjustments.Item(2) = -45

'绘制指针

BeginX = cx + r * Cos(-pi * 0.3) / 2
BeginY = cy + r * Sin(-pi * 0.3) / 2
EndX = cx + (r + 250) * Cos(-pi * 0.3) / 2
EndY = cy + (r + 250) * Sin(-pi * 0.3) / 2
With ActiveWindow.View.Slide.Shapes. _
   AddLine(BeginX, BeginY, EndX, EndY)
   .Line.DashStyle = msoLineSolid '绘制实线
   .Line.ForeColor.RGB = RGB(255, 0, 0)  '
设为红色
   shpDraw(32) = .Name
End With

'绘制表盘边框

With ActiveWindow.View.Slide.Shapes. _
   AddShape(msoShapeRectangle, _
   cx - r - 5, cy - r - 45, 2 * r + 10, r - 35)
   .Fill.Visible = msoFalse
   shpDraw(33) = .Name
End With

'绘制文字标记

For i = 34 To 37
   j = i + 3
   With ActiveWindow.View.Slide.Shapes. _
  AddTextbox(msoTextOrientationHorizontal, _
   cx - r * Cos((j + 0.5) * pi / 6) - j / 2, cy - r * Sin((j + 0.5) * pi / 6), 15, 15)
  .TextFrame.TextRange.Text = j - 37
  .IncrementRotation (j - 37) * 30 - 45
   shpDraw(i) = .Name
   End With
Next

以上就是最后的效果,除了文字标记位置马马虎虎外,其它的还不错。这里因为文字只有一个字符,所以文本框的宽度\高度都比较小,如果文字是两个、三个甚至四个字符(比如 15、0.6、 -0.2),至少宽度要改得大一些。本来其中的文字和表盘边框是可以不用代码画的,直接插入相应的图形就挺好,这里的目的是给大家多演示一下画图的方法。换言之,编程的目的是为了更好实现我们的目的,不要弄成强迫症,什么东西都想用程序来解决。另外前面程序只对指针设置了线型和颜色,可能在不同的电脑上运行时效果不完全一致,比如线条颜色、文字大小这些。

大家可以继续学习 VBA 编程的其它知识,至少可以先试着用代码绘制万用表电阻档。或者大家也可以想想,如果要制作一个窗体,让用户通过窗体来绘制不同风格的表盘,需要怎么设计和编程。

三、进一步要怎么学习

大家在学习中遇到困难的话,一是要善于利用帮助和网络,不过现在网络上的东西,很多你需要的资料永远找不到,都是互相抄;二是可以借助“录制宏”来实现,但是偏偏 PowerPoint 里没有这个功能,大家可以借助 Excel 里的录制宏功能来学习,然后作适当修改。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
C语言项目实战:《黄金矿工》零基础项目!180行源代码示例
网页CAD开发引线标注的代码如何写?
C# 剪裁图片内容区域
Excel:一些方法的理解
Google Earth卫星地图URL的计算方法及代码实例
经典的分形算法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服