乐筑天下

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

使用python操作autocad2007

[复制链接]

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-18 14:16:00 | 显示全部楼层 |阅读模式
复制代码
回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-19 14:08:00 | 显示全部楼层
与上一个帖子同样的功能,用VBA实现
  1. Sub deleteTextAndDimension()
  2.    
  3.     Dim oSS As Object
  4.     On Error Resume Next
  5.     If Not IsNull(ThisDrawing.SelectionSets.Item("Wolf")) Then
  6.         Set oSS = ThisDrawing.SelectionSets.Item("wolf")
  7.         oSS.Delete
  8.     End If
  9.     Set oSS = ThisDrawing.SelectionSets.Add("wolf")
  10.     On Error GoTo catchError
  11.     Dim fType() As Integer
  12.     Dim fData As Variant
  13.       strFilterType = "-4,0,0,-4"
  14.     strFilterData = ""
  15.     Call createFilter(fType, fData, strFilterType, strFilterData)
  16.     oSS.SelectOnScreen fType, fData
  17.     oSS.Highlight ture
  18.     oSS.Erase
  19.     oSS.Delete
  20. exitSub:
  21.     Exit Sub
  22. catchError:
  23.     ' add error handling
  24.     If Err Then
  25.         Err.Clear
  26.         MsgBox Err.Description
  27.     End If
  28.    
  29. End Sub
  30. Sub createFilter(fType, fData, strFilterType, strFilterData)
  31.     '// add declarations
  32.     On Error GoTo catchError
  33.     arrFilterType = Split(strFilterType, ",")
  34.     arrFilterData = Split(strFilterData, ",")
  35.     If UBound(arrFilterType) = UBound(arrFilterData) Then
  36.         intFilterCount = UBound(arrFilterType)
  37.         ReDim fType(intFilterCount)
  38.         ReDim fData(intFilterCount)
  39.         For i = 0 To UBound(arrFilterType)
  40.             fType(i) = arrFilterType(i)
  41.             fData(i) = arrFilterData(i)
  42.         Next i
  43.     Else
  44.         GoTo exitFunction
  45.     End If
  46. exitFunction:
  47.     Exit Sub
  48. catchError:
  49.     '// add error handling
  50.     GoTo exitFunction
  51. End Sub
回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-18 14:18:00 | 显示全部楼层

以下是VBA代码,实现相同的功能,都在autocad2007里面测试完成,本来是想用vba,但是滚轮插件实现不了,老是有问题,刚好看到有Pyautocad,就试了下,效果还不错,可以对比下
  1. Sub Example_AddLine()
  2.     ' 该示例在模型空间中添加直线。
  3.     Dim oline As AcadLine
  4.     Dim startPoint(0 To 2) As Double
  5.     Dim endPoint(0 To 2) As Double
  6.     Dim dblSpan As Double
  7.     Dim intBeamsCount As Integer
  8.     Dim intElesCount As Integer
  9.        Dim dblBeamDist As Double
  10.     Dim dblSideDist As Double
  11.    
  12.      intElesCount = 20
  13.     dblSideDist = 300
  14.     dblBeamDist = 1000
  15.     intBeamsCount = 12
  16.     dblSpan = 16000
  17.     '定义直线的起点和终点
  18.     startPoint(0) = 0#: startPoint(1) = 0#: startPoint(2) = 0#
  19.     endPoint(0) = dblSpan: endPoint(1) = 0#: endPoint(2) = 0#
  20.     For i = 1 To intBeamsCount
  21.         ' 在模型空间中创建直线
  22.         Set oline = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
  23.         startPoint(0) = startPoint(0): startPoint(1) = startPoint(1) + dblBeamDist: startPoint(2) = 0#
  24.         endPoint(0) = dblSpan: endPoint(1) = startPoint(1): endPoint(2) = 0#
  25.     Next i
  26.    
  27.     startPoint(0) = dblSpan / intElesCount / 2: startPoint(1) = -dblSideDist: startPoint(2) = 0#
  28.     endPoint(0) = dblSpan / intElesCount / 2: endPoint(1) = (intBeamsCount - 1) * dblBeamDist + dblSideDist: endPoint(2) = 0#
  29.     For i = 1 To intElesCount
  30.          Set oline = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)
  31.          startPoint(0) = startPoint(0) + dblSpan / intElesCount: startPoint(1) = startPoint(1): startPoint(2) = 0#
  32.          endPoint(0) = startPoint(0): endPoint(1) = endPoint(1): endPoint(2) = 0#
  33.     Next i
  34.    
  35.     ZoomAll
  36. End Sub

回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-19 14:08:00 | 显示全部楼层
这段代码用于在屏幕上选中的对象删除其中的文字和标注
复制代码
回复

使用道具 举报

36

主题

367

帖子

21

银币

中流砥柱

Rank: 25

铜币
507
发表于 2020-6-19 09:35:00 | 显示全部楼层
在AUTOCAD2007下运行了一下VBA,画出一系列1000x800的网格,是这样的吗。
回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-19 10:51:00 | 显示全部楼层

是的,你可以调整参数,改一下代码,做类似的事情
回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-19 14:30:00 | 显示全部楼层
几个参考文档


回复

使用道具 举报

2

主题

8

帖子

1

银币

初来乍到

Rank: 1

铜币
16
发表于 2020-6-20 11:31:00 | 显示全部楼层
贴一个VB
  1. Sub sortPlineByX(arr)
  2. Dim i&, j&, vSwap, min&
  3. For i = LBound(arr, 1) To UBound(arr, 1)
  4.     min = i
  5.     For j = i + 1 To UBound(arr, 1)
  6.         If arr(min, 0) > arr(j, 0) Then min = j
  7.     Next
  8.     If min  i Then
  9.         For k = 0 To 4
  10.             vSwap = arr(min, k): arr(min, k) = arr(i, k): arr(i, k) = vSwap
  11.         Next k
  12.     End If
  13. Next i
  14. End Sub
A的排序算法
回复

使用道具 举报

16

主题

48

帖子

42

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2020-6-24 10:03:00 | 显示全部楼层
python的话,直接用非狐的pycad不是更好?不过pycad是用来替换.net的
回复

使用道具 举报

16

主题

48

帖子

42

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
112
发表于 2020-6-24 10:04:00 | 显示全部楼层

这些文件,一般在完整版的acad的help目录(如\AutoCAD 2008\Help)下都有。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 01:35 , Processed in 0.155435 second(s), 72 queries .

© 2020-2024 乐筑天下

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