明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4200|回复: 3

[VBA]Spline To Polyline 函数

[复制链接]
发表于 2005-11-24 10:57:00 | 显示全部楼层 |阅读模式
看了论坛里关于spline线转换为pline线方法的讨论,感觉都不尽人意就自己写了一个。自我感觉还可以特与大家分享:
  1. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  2. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  3. ''                                                         ''
  4. ''       Spline To Polyline 函数      ver 1.2              ''
  5. ''                                                         ''
  6. ''         调用函数:spl2pl()                              ''
  7. ''                                                         ''
  8. ''         作者:Macula       2005-11-23                   ''
  9. ''                                                         ''
  10. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  11. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  12. Sub Spl2pl()
  13.   Dim sss As AcadSpline
  14.   Dim o As AcadObject
  15.   Dim ov As Variant
  16.   ThisDrawing.SetVariable "REGENMODE", 1
  17.   On Error Resume Next
  18.   
  19.   ThisDrawing.Utility.GetEntity o, ov, vbCrLf & "选择要转换的SPLINE:"
  20.   
  21.   If Err.Number <> 0 Then
  22.     ThisDrawing.Utility.Prompt "没有选择任何对象,退出!" & vbCrLf
  23.     Err.Clear
  24.     Exit Sub
  25.   End If
  26.   
  27.   If o.ObjectName <> "AcDbSpline" Then
  28.     ThisDrawing.Utility.Prompt "选择对象不是SPLINE,退出!" & vbCrLf
  29.     Exit Sub
  30.   Else
  31.     Set sss = o
  32.     Set o = Nothing
  33.   End If
  34.   
  35.   Dim i As Long, j As Long
  36.   Dim ns() As Double, n As Long
  37.   Dim t As Variant
  38.   
  39.   '''''''''''''''''''''''''''''''''''''''''''''
  40.   '          得到SPLINE拟点
  41.   '''''''''''''''''''''''''''''''''''''''''''''
  42.   n = sss.NumberOfFitPoints
  43.   ReDim Preserve ns(n * 3 - 1)
  44.   j = 0
  45.   For i = 0 To n - 1
  46.     t = sss.GetFitPoint(i)
  47.     j = j + 1
  48.     ns(j * 3 - 3) = t(0)
  49.     ns(j * 3 - 2) = t(1)
  50.     ns(j * 3 - 1) = t(2)
  51.   Next
  52.   Dim doc1 As AcadDocument, doc2 As AcadDocument
  53.   Set doc1 = ThisDrawing.Application.ActiveDocument
  54.   
  55.   
  56.   ''''''''''''''''''''''''''''''''''''''''''''''
  57.   '        生成dxf文件
  58.   ''''''''''''''''''''''''''''''''''''''''''''''
  59.   Set doc2 = ThisDrawing.Application.Documents.Add("abc.dwg")
  60.   doc2.ModelSpace.AddSpline ns, sss.StartTangent, sss.EndTangent
  61.   doc2.SaveAs "tmp.dxf", acR12_dxf
  62.   
  63.   Dim tmpFileName As String
  64.   
  65.   tmpFileName = doc2.FullName
  66.   doc2.Close
  67.   Set doc2 = ThisDrawing.Application.Documents.Open(tmpFileName)
  68.   
  69.   Dim pl As Acad3DPolyline
  70.   
  71.   
  72.   '''''''''''''''''''''''''''''''''''''''''''''
  73.   '    由DXF文件生成PL线
  74.   '''''''''''''''''''''''''''''''''''''''''''''
  75.   Set pl = doc2.ModelSpace.Item(0)
  76.   Err.Clear
  77.   Dim od As Variant, nns() As Double
  78.   j = -1
  79.   Do While Err.Number = 0
  80.     j = j + 1
  81.     od = pl.Coordinate(j)
  82.   Loop
  83.   Err.Clear
  84.   ReDim Preserve nns(j * 3 - 1)
  85.   
  86.   For i = 0 To j - 1
  87.     od = pl.Coordinate(i)
  88.     nns((i + 1) * 3 - 3) = od(0)
  89.     nns((i + 1) * 3 - 2) = od(1)
  90.     nns((i + 1) * 3 - 1) = od(2)
  91.   Next
  92.   doc1.Activate
  93.   
  94.   Dim pll As AcadPolyline
  95.   Set pll = doc1.ModelSpace.AddPolyline(nns)
  96.   pll.Layer = sss.Layer
  97.   pll.Color = sss.Color
  98.   sss.Delete
  99.   Set sss = Nothing
  100.   
  101.   doc2.Close
  102.   Set doc2 = Nothing
  103.   Set doc1 = Nothing
  104.   
  105.   '''''''''''''''''''''''''''''''''''''''''''
  106.   '      删除临时dxf文件
  107.   '''''''''''''''''''''''''''''''''''''''''''
  108.   tmpFileName = Replace(tmpFileName, "", "\")
  109.   DelFile (tmpFileName)
  110. End Sub
  111. ''''''''''''''''''''''''''''''''''''''''''''''
  112. '
  113. '使用Script Fso对象模型删除文件
  114. '
  115. ''''''''''''''''''''''''''''''''''''''''''''''
  116. Sub DelFile(ByVal fileName As String)
  117.     Dim fso As New Scripting.FileSystemObject
  118.     On Error Resume Next
  119.     fso.DeleteFile fileName
  120.     Set fso = Nothing
  121. End Sub

本帖子中包含更多资源

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

x
发表于 2005-11-24 11:45:00 | 显示全部楼层
可以提点个人的意见吗? 我刚试了你的程序, 可以用vb写还行啦, 如果改进点就很好了, 因为转出来我觉的太密了,  呵呵.
发表于 2005-11-24 12:36:00 | 显示全部楼层

来用看看吧

谢谢提供

 楼主| 发表于 2005-11-24 14:27:00 | 显示全部楼层
谢谢斑竹的支持,关于点太密的问题我自己也在想解决的办法呢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 00:52 , Processed in 0.177326 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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