明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: fan_zh

[提问] 根据excel表格数据绘制图形

[复制链接]
发表于 2015-1-25 15:05 | 显示全部楼层
这个有些行业非常实用!
发表于 2015-1-25 18:53 | 显示全部楼层
, 我就看看不说话
发表于 2015-1-27 19:10 | 显示全部楼层
本帖最后由 zjsru_18_505 于 2015-1-27 19:13 编辑

看图中数据,图形是平行四边形。
试试这个,打开后,运行里面的宏。

http://bbs.mjtd.com/forum.php?mod=attachment&aid=ODY4NDR8NGNiYTFiMzUxNjQ5NDYxOWQ3YjE3ODY3OTM4NDIwYzd8MTcxNDExNjgxNg%3D%3D&request=yes&_f=.rar

本帖子中包含更多资源

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

x
发表于 2015-1-27 19:58 | 显示全部楼层
zjsru_18_505 发表于 2015-1-27 19:10
看图中数据,图形是平行四边形。
试试这个,打开后,运行里面的宏。

怎么画出来的图是竖向排列,并且没有标注啊?
发表于 2015-1-28 12:23 | 显示全部楼层
  1. Dim AutoCADObj As Object
  2. Dim ActivedocumentObj As Object
  3. Dim ModelspaceObj As Object
  4. Dim LineObj As Object
  5. Dim TextStyle As Object, TextString As Object
  6. Dim LayerObj As Object
  7. Dim start As Variant              '曲线起始点
  8. Dim P0 As Variant
  9. Dim StartPoint(0 To 2) As Double  '直线的起点
  10. Dim EndPoint(0 To 2) As Double    '直线的终点
  11. Dim POINT As Integer
  12. Dim i As Integer
  13. Dim DimObj As Object




  14. Private Sub UserForm_Initialize()

  15. On Error GoTo errtext

  16. With Worksheets(1)

  17. i = 1
  18. Do While Trim(.Cells(i, 1)) <> ""
  19. i = i + 1
  20. Loop

  21. POINT = i - 1                     '总的点数




  22. End With
  23. Exit Sub

  24. errtext:
  25. TextBox1.Text = "error"
  26. End Sub



  27. Private Sub CommandButton1_Click()


  28. On Error GoTo obj

  29. Set AutoCADObj = CreateObject("AutoCAD.Application")    '创建CAD对象
  30. Set ActivedocumentObj = AutoCADObj.ActiveDocument         '创建绘图对象
  31. Set ModelspaceObj = ActivedocumentObj.ModelSpace          '创建绘图空间对象

  32. ''''''''''''''添加图层''''''''''''''''''''''''''''''''''''
  33. Set LayerObj = ActivedocumentObj.Layers.Add("temp")
  34.     'LayerObj.Color = 2
  35.    
  36. ''''''''''''''''添加文字样式''''''''''''''''''''''''''''''''''''''''
  37. Set TextStyle = ActivedocumentObj.TextStyles.Add("st")    '添加新的文件样式st
  38. TextStyle.SetFont "宋体", False, False, 1, 1           '指定样式st的字体为宋体
  39. ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''


  40. AutoCADObj.Application.Visible = True                     '使AutoCAD窗口显示

  41. Dim A As Single
  42. Dim B As Single
  43. Dim C As Single
  44. Dim D As Single
  45. Dim ACR As Single

  46. With Worksheets(1)


  47. start = ActivedocumentObj.Utility.GetPoint(, "指定左下角:")


  48. For i = 2 To POINT


  49.     A = .Cells(i, 7)
  50.     B = .Cells(i, 5)
  51.     C = .Cells(i, 2)



  52.     EndPoint(0) = start(0)
  53.     EndPoint(1) = start(1)
  54.     EndPoint(2) = start(2)
  55.     StartPoint(0) = start(0) + C
  56.     StartPoint(1) = start(1)
  57.     StartPoint(2) = start(2)
  58.     Call Line
  59.    
  60.     ACR = Application.WorksheetFunction.Acos((B * B + C * C - A * A) / (2 * A * B))
  61.     P0 = ActivedocumentObj.Utility.PolarPoint(start, ACR, B)
  62.     StartPoint(0) = EndPoint(0)
  63.     StartPoint(1) = EndPoint(1)
  64.     StartPoint(2) = EndPoint(2)
  65.     EndPoint(0) = P0(0)
  66.     EndPoint(1) = P0(1)
  67.     EndPoint(2) = P0(2)
  68.     Call Line
  69.    
  70.     P0 = ActivedocumentObj.Utility.PolarPoint(P0, 0, C)
  71.     StartPoint(0) = EndPoint(0)
  72.     StartPoint(1) = EndPoint(1)
  73.     StartPoint(2) = EndPoint(2)
  74.     EndPoint(0) = P0(0)
  75.     EndPoint(1) = P0(1)
  76.     EndPoint(2) = P0(2)
  77.     Call Line
  78.             
  79.     StartPoint(0) = EndPoint(0)
  80.     StartPoint(1) = EndPoint(1)
  81.     StartPoint(2) = EndPoint(2)
  82.     EndPoint(0) = start(0) + C
  83.     EndPoint(1) = start(1)
  84.     EndPoint(2) = start(2)
  85.     Call Line
  86.    
  87.     StartPoint(0) = start(0) + C / 2
  88.     StartPoint(1) = start(1)
  89.     StartPoint(2) = start(2)
  90.    
  91.     start(0) = start(0) + C + B
  92.     start(1) = start(1)
  93.     start(2) = start(2)

  94.    
  95.    
  96.     Set TextString = ModelspaceObj.AddText(.Cells(i, 1), StartPoint, CSng(TextBox1.Text) + 7.6)
  97.     TextString.styleName = "st"                    '指定样式名
  98.     TextString.layer = "temp"
  99.     TextString.Alignment = 9                         '左中对齐
  100.     TextString.Rotation = 3.14 / 2                   '旋转角度90度
  101.     TextString.Textalignmentpoint = StartPoint        '重定义对齐点
  102.     'TextString.Update                                '更新显示

  103. Next

  104. AutoCADObj.zoomall

  105. End With

  106. 'obj.Update                                          '刷新对象,使其更新
  107. 'CADo.Quit                                           '退出对象
  108. Set AutoCADObj = Nothing
  109. Set ActivedocumentObj = Nothing
  110. Set ModelspaceObj = Nothing
  111. Set LineObj = Nothing
  112. Set LayerObj = Nothing
  113. Set TextString = Nothing
  114. Set DimObj = Nothing
  115. End
  116. Exit Sub
  117. 'Set obj = Nothing
  118. obj:
  119. MsgBox "对象已被清除或数据格式不对!", , "错误"

  120. End Sub



  121. Sub Line()
  122. Dim x As Single, y As Single, DI As Single
  123. Dim P1 As Variant

  124. x = StartPoint(0) - EndPoint(0)
  125. y = StartPoint(1) - EndPoint(1)
  126. DI = Sqr(x * x + y * y) / 2

  127. Set LineObj = ModelspaceObj.AddLine(StartPoint, EndPoint)
  128. LineObj.layer = "temp"
  129. 'LineObj.Update

  130. P1 = ActivedocumentObj.Utility.PolarPoint(StartPoint, ActivedocumentObj.Utility.AngleFromXAxis(StartPoint, EndPoint), DI)
  131. P1 = ActivedocumentObj.Utility.PolarPoint(P1, ActivedocumentObj.Utility.AngleFromXAxis _
  132.      (StartPoint, EndPoint) + WorksheetFunction.Pi / 2, CSng(TextBox1.Text))
  133. A = ActivedocumentObj.Utility.AngleFromXAxis(StartPoint, EndPoint)

  134. Set DimObj = ModelspaceObj.AddDimAligned(StartPoint, EndPoint, P1)
  135. DimObj.TextHeight = CSng(TextBox1.Text) / 2
  136. DimObj.SuppressTrailingZeros = False
  137.       
  138. End Sub


发表于 2015-1-29 19:56 | 显示全部楼层
zjsru_18_505 发表于 2015-1-28 12:23

这次基本可以了,就是编号是竖向的,简单修改了下,可以了,学习了!!
发表于 2015-1-30 08:44 | 显示全部楼层
zjsru_18_505 发表于 2015-1-28 12:23

再请教下,图绘制出来后,对角线误差很大,是怎么回事?
发表于 2015-1-30 14:01 | 显示全部楼层
平凡的夏夜清风 发表于 2015-1-30 08:44
再请教下,图绘制出来后,对角线误差很大,是怎么回事?

有一句写错了。

    ACR = Application.WorksheetFunction.Acos((B * B + C * C - A * A) / (2 * A * B))

改为

    ACR = Application.WorksheetFunction.Acos((B * B + C * C - A * A) / (2 * C * B))
发表于 2021-6-22 20:44 | 显示全部楼层
可以添加个联系方式吗:我QQ:1079118454,需要找你定制插件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-26 15:33 , Processed in 1.024941 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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