加载中…
个人资料
GIS广益
GIS广益
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,963
  • 关注人气:230
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

明经CAD_VBA论坛整理(2)

(2010-04-15 12:29:50)
标签:

杂谈

分类: 开发
7. 如何调用vba命令对多义线进行fit(拟合)处理
直接用SendCommand方法,调用命令进行编辑
8. 块属性值编辑
Public Sub GetAttribute()
    '
本段代码从选中的图块中获取属性值,并对其修改
    Dim entObj As AcadEntity
    Dim pickPnt As Variant
    Dim blkRefObj As AcadBlockReference
    '
选择图元
    ThisDrawing.Utility.GetEntity entObj, pickPnt  
    '
判断是否为块引用
    If StrComp(entObj.ObjectName, "AcDbBlockReference", 1) <> Then
        MsgBox "
你选择的不是一个图块,程序将退出!"
        '
如果选择的不是一个块引用则程序退出运行
        Exit Sub
    End If
    '
如果选择的是块引用,将其赋给块引用对象
    Set blkRefObj entObj
    '
判断该块引用是否含有属性值
    If Not blkRefObj.HasAttributes Then
        MsgBox "
你选择的图块没有块属性,程序将退出!"
        '
如果不含由属性值退出
        Exit Sub
    End If
    Dim attVars As Variant
    Dim As Integer
    '
获取块引用中的块属性对象
    attVars blkRefObj.GetAttributes
    '
对块属性对象进行遍历
    For To UBound(attVars)
        MsgBox "
"属性对象的属性值分别如下:Chr(13) Chr(13) _
               "
属性标签为:attVars(I).TagString Chr(13) _
               "
属性值为  attVars(I).TextString
    Next
    '
将块属性的标签和值进行修改
    attVars(0).TagString "New Tag"
    attVars(0).TextString "New Value"
    ThisDrawing.Regen True
End Sub

9.如何用程序控制对象捕捉
通过设置系统变量“osmode”来控制
10. 如何从VBA到VB?
VB里,首先要获得Application对象,再获取Document对象,把VBA中的ThisDrawing对象设置成该Document对象即可,这样,你开发出来的程序就可以融入VB的强大功能了。
11.IntersectWith 方法
获取图中一个对象与另一对象的交点
语法
RetVal object.IntersectWith(IntersectObject, ExtendOption)
参数
Object 
该方法适用于所有图形对象 (除了PviewportPolygonMesh)
IntersectObject 
对象,为输入项该对象可以是所有图形对象中的任一个。
ExtendOption AcExtendOption 
枚举数为输入项
该选项指定两个对象是否通过延伸一个或两个或没有延伸来取得相交点。
acExtendNone 
均无延伸。
acExtendThisEntity 
延伸源对象。
acExtendOtherEntity 
延伸作为参数传递的对象。
acExtendBoth 
两个对象均延伸。
RetVal(
返回值变体或双精度数组,返回图形中一个对象和另一对象相交的点的数组。
490
12.绘制多边形并显示多边形顶点坐标
Sub polygon()
'
以下语句绘制正多边形
    Dim num As Integer
    Dim pnt As Variant
    Dim lpnt As Variant
    num ThisDrawing.Utility.GetInteger("
请选择正多边形的边数:")
    Dim fpnt As Variant
    fpnt ThisDrawing.Utility.GetPoint(, "
请选择正多边形的起点:")
    Dim leng As Double
    leng ThisDrawing.Utility.GetDistance(fpnt, "
请选择正多边形的边长:")
    ReDim lpnt(0 To num 1) As Double
    pnt fpnt
    lpnt(0) pnt(0)
    lpnt(1) pnt(1)
    Dim st As Integer
    For st To num 1
        pnt ThisDrawing.Utility.PolarPoint(pnt, (3.14159265 num) (st 1), leng)
        lpnt(st 2) pnt(0)
        lpnt(st 1) pnt(1)
    Next st
    Dim pgon As AcadLWPolyline
    Set pgon ThisDrawing.ModelSpace.AddLightWeightPolyline(lpnt)
    pgon.Closed True
    ThisDrawing.Regen (True)
'
以下语句获取多边形的顶点
    Dim gpnt As Variant
    gpnt pgon.Coordinates
    Dim pntcnt As Integer
    pntcnt UBound(gpnt)
    Dim disptxt As String
    disptxt "
多边形共有(pntcnt 1) "个顶点vbCrLf
    Dim As Integer
    For To pntcnt Step 2
        disptxt disptxt "
"个顶点的坐标为:" _
                gpnt(i) "," gpnt(i 1) vbCrLf
    Next i
    disptxt disptxt "
明经通道VBA示例 http://www.mjtd.com"
    MsgBox disptxt, "
多边形的坐标显示"
End Sub

13.Private Sub AcadDocument_BeginDoubleClick(ByVal pPoint As Variant) 
MsgBox "图上双击坐标位置" vbCrLf pPoint(0) vbCrLf 
   pPoint(1) vbCrLf pPoint(2) 
Open "MyTest.txt" For Output Access Write As #1 
Print #1, Format(pPoint(0), "0.000"), Format(pPoint(1), "0.000"),_ 
   Format(pPoint(2), "0.000") 
Close #1 
End Sub 
上面的程序只能实现将坐标输出一次,而第二次双击时,会将第一次的坐标值覆盖,有什么办法可以实现连续点选输出而不覆盖吗??????
Open 语句的Output改为Append即可
14. 现有Handpoint acadApp.ActiveDocument.Utility.GetPoint(, "请输入套料的插入点")
希望用户在捕捉点或输入点坐标动作时,如何避免用户因其他操作如缩放、PAN引起的系统报错
可以加一段以下语句:
on error goto errHandle
Handpoint acadApp.ActiveDocument.Utility.GetPoint(, "
请输入套料的插入点:") 
errhandle:
if Err.Number=-2147352567 then
Err.Clear
resume
end if

15.在VBA中如何传送一个参数给Vlisp?
如:在VBA中A "123" 要把VBA中A的值赋给Vlisp中的B。
sendcommand可以做到
:
Sub valuetolisp()
    Dim As Integer
    123
    ThisDrawing.SendCommand "(setq ") "
End Sub
如果不想命令行回显,则可以用VLAX控制。
16.请问在VBA中如何修改属性块中属性的textstring的对齐方式,谢了。
Text一样,属性块也有HorizontalAlignment属性
P487
17.我想知道vb中的那个函数或者对象的方法可以代替在cad中按esc键取消命令
谢谢
SendCommand("")SendCommand(Chr(27))

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有