明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3964|回复: 8

CAD用vba来输出图形数据

[复制链接]
发表于 2014-4-3 13:17:30 | 显示全部楼层 |阅读模式
各位大侠:新人目前遇到个困难。想在cad加载宏,运行后把图形的直线和圆弧等图形数据通过txt文本文件输出来保存。
Sub a()
Dim OBJ As AcadEntity   '定义对象入口变量
Dim i As Integer   '定义对象绘制顺序变量
i = 0              '初始化对象顺序变量
For Each OBJ In ThisDrawing.ModelSpace  '遍历每个AutoCAD模型
If OBJ.ObjectName = "AcDbLine" Then    '判断AutoCAD对象是不是直线
startp = OBJ.StartPoint   '获取直线起点坐标
endp = OBJ.EndPoint        '获取直线端点坐标
Print #1, "(" + CStr(i) + "," + CStr(startp(0)) + "," + CStr(startp(1)) + "," + CStr(endp(0)) + "," + CStr(endp(1)) + ");"
'输出直线端点坐标和该对象的绘制顺序
End If
If OBJ.ObjectName = "AcDbArc" Then   '判断AutoCAD对象是不是圆弧

StartAngle = OBJ.StartAngle   '获取圆弧起始角度
EndAngle = OBJ.EndAngle      '获取圆弧终止角度
Radius = OBJ.Radius            '获取圆弧半径
startp = OBJ.StartPoint      '获取圆弧起点坐标
endp = OBJ.EndPoint          '获取圆弧终点坐标
CenterPoint = OBJ.Center    '获取圆弧中心坐标
Print #2, "(" + CStr(i) + "," + CStr(CenterPoint(0)) + "," + CStr(CenterPoint(1)) + "," + CStr(Radius) + "," + CStr(startp(0)) + "," + CStr(startp(1)) + "," + CStr(endp(0)) + "," + CStr(endp(1)) + "," + CStr(StartAngle) + "," + CStr(EndAngle - StartAngle) + ");"
'组合数据,输出圆弧的关键点数据
End If
i = i + 1   '对象绘制顺序序号加1

  Dim a As String
  a = "End If"   '这里应该是输出上面要找到的数据,但我不知道怎么搞了
  
  Open "d:\1.txt" For Append As #1
  Print #1, a
  Close #1
  Next
End Sub
目前运行这个宏工程,能在d盘生成个1.txt的文件,但写入的是a = "End If" 里的End If字母,我想请大家给看看怎么修改后可以正常把我需要输出内容输出来。



该贴已经同步到 昊爹正传的微博
 楼主| 发表于 2014-4-3 16:39:30 | 显示全部楼层
看来高手们也不愿意免费指导了,现在看只能出学费了,我只要这个功能:打开cad加载vba程序,把图中图形的直线或者圆弧或者多段线的数据输出保存为txt文本文件。我出200RMB.15979663114QQ759947720在线等
发表于 2014-5-11 17:09:09 | 显示全部楼层
改成这样的:

Sub a()
    Dim OBJ As AcadEntity   '定义对象入口变量
    Dim i As Integer   '定义对象绘制顺序变量
    i = 0              '初始化对象顺序变量
    Open "d:\1.txt" For Append As #1
    For Each OBJ In ThisDrawing.ModelSpace  '遍历每个AutoCAD模型
        If OBJ.ObjectName = "AcDbLine" Then    '判断AutoCAD对象是不是直线
            startp = OBJ.StartPoint   '获取直线起点坐标
            endp = OBJ.EndPoint        '获取直线端点坐标
            Print #1, "(" + CStr(i) + "," + CStr(startp(0)) + "," + CStr(startp(1)) + "," + CStr(endp(0)) + "," + CStr(endp(1)) + ");"
            '输出直线端点坐标和该对象的绘制顺序
        End If
        
        If OBJ.ObjectName = "AcDbArc" Then   '判断AutoCAD对象是不是圆弧
            StartAngle = OBJ.StartAngle   '获取圆弧起始角度
            EndAngle = OBJ.EndAngle      '获取圆弧终止角度
            Radius = OBJ.Radius            '获取圆弧半径
            startp = OBJ.StartPoint      '获取圆弧起点坐标
            endp = OBJ.EndPoint          '获取圆弧终点坐标
            CenterPoint = OBJ.Center    '获取圆弧中心坐标
            Print #1, "(" + CStr(i) + "," + CStr(CenterPoint(0)) + "," + CStr(CenterPoint(1)) + "," + CStr(Radius) + "," + CStr(startp(0)) + "," + CStr(startp(1)) + "," + CStr(endp(0)) + "," + CStr(endp(1)) + "," + CStr(StartAngle) + "," + CStr(EndAngle - StartAngle) + ");"
            '组合数据,输出圆弧的关键点数据
        End If
        i = i + 1   '对象绘制顺序序号加1
        
        'Dim a As String
        'a = "End If"   '这里应该是输出上面要找到的数据,但我不知道怎么搞了
        
        'Print #1, a
    Next
    Close #1
End Sub
发表于 2014-5-11 17:14:24 | 显示全部楼层
小问题, 不用纠结了,For free
发表于 2014-8-19 11:18:19 | 显示全部楼层
好东西!非常感谢分享
发表于 2014-9-9 18:21:42 | 显示全部楼层
感谢“slyd “!热心助人是美德!
发表于 2015-6-25 14:59:31 | 显示全部楼层
这个输出直线数据的代码,可不可以多输出一个角度啊,求指教
AcDbLine这个是什么意思,直线不是AcadLine吗
发表于 2016-7-29 18:09:19 | 显示全部楼层
slyd 发表于 2014-5-11 17:09
改成这样的:

Sub a()

您好,假设对象是文字,要把文字输出到#1里面应该怎么写呢?谢谢~初学者学习~~
发表于 2016-8-2 12:44:41 | 显示全部楼层
只列出了print输出的屏显的格式(好像书上说这个命令也能输出到文件,没具体研究过;一般输出到文本应该用write比较多吧),为什么不用write命令把赋了值的参数加表头一起格式化输出到文本文件呢?

没试过,凭自觉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:58 , Processed in 0.251296 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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