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

明经CAD_VBA论坛整理(5)

(2010-05-22 10:06:02)
标签:

明经cad

论坛

vba

vb

开发

it

分类: 开发

1.  怎么查找某一个group是否存在?-

检查图形中是否含有指定名称的组合的函数
Function GetGroup(GName As String) As Boolean
    Dim objGroup As AcadGroup
    On Error Resume Next
    Set objGroup = ThisDrawing.Groups(GName)
    If Err Then
        GetGroup = False
    Else
        GetGroup = True
    End If
End Function
'GetGroup函数使用示例
Sub GGroup()
    Dim GName As String
    GName = "liec"
    Dim GroupTip As String
    If GetGroup(GName) Then
        GroupTip = "有"
    Else
        GroupTip = "无"
    End If
    MsgBox "图形中" & GroupTip & "名称为" & GName & "的组合存在", , "明经通道示例"
End Sub

2.在AutoCAD中,如果你的模板没有经过修改的话,则写入中文时会显示“???”这样的文字,这时,你必须手动修改文字样式,增加中文字体的支持,如使用大字体或使用TTF中文字体。
以下程序你可以保存为DVB文件,然后加入到启动组中,这样当你在写文字时系统会自动设置好中文字体,免去手动设置的麻烦。

Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
    If (CommandName = "TEXT" Or CommandName = "MTEXT") And _
    ThisDrawing.ActiveTextStyle.BigFontFile = "" And _
    LCase(Right(ThisDrawing.ActiveTextStyle.fontFile, 4)) <> ".ttf" Then
        ThisDrawing.ActiveTextStyle.BigFontFile = "gbcbig.shx"
    End If
End Sub

3. 在编程中,我遇到以下问题:
  
我用DATAGRIDADODC控键建立起与外部数据库的连接,但是不知道如何提取其中的单个数据,在VB中就不存在这问题,VB中的其他控键可以绑定ADODC控键,而VBA的控键就不行,我该怎么办呢

看看数据库的操作

用数据集Recordset的移动操作,等价于DataGrid中定位到某一行。可以有MoveFirst、MovePrevious、MoveNext、MoveLast等操作,也可以有AddNew、Delete等

4. 当我使用VBAGetPoint方法,点击锁点工具列抓点(如:nea point,endpoint….),在Command里居然出现了 *Cancel* 而无法抓点,不知有哪位前辈知道如何解决呢

解决方法如下:
Sub Test()
    On Error GoTo ErrTrap
    Pt = acadDoc.Utility.GetPoint(Point, Prompt)
    Exit Sub
    
ErrTrap:
    If Err.Number = -2147352567 Then '运行命令,如透明命令等。
        Err.Clear
        Resume
    ElseIf Err.Number = -2147467259 Then '右键单击结束,关于按ESC键结束命令可以参考其它有关资料。
    End If
    On Error GoTo 0
End Sub

5. Sheets("检测报告").Select
With ActiveSheet.PageSetup
       .PrintTitleRows = False
       .PrintTitleColumns = False
End With
在有的机器上可以通过,有的就不可以,请问和环境有关吗????能帮帮我吗?
我的原理:定植模班,生成工作表,(通过复制),然后向其中填充数据,最后打印
现在我想实现工作表的打印设置同我的模班打印设置相同,不知道你有好的方法吗??
正确的使用方法如下:
        .PrintTitleRows = "$1:$2"
        .PrintTitleColumns = "$A:$B"
如果不打印标题行及列,可以置为空白,如
       .PrintTitleRows = ""
       .PrintTitleColumns = ""

6. 请问如何让form.hideform.show时能保持form先前移动后的位置?

form.startposition=0 ‘(手动)

7. 我想在对文件处理前做一个备份,代码如下(vb)
Dim docsObj As AcadDocuments
Dim docTemp As AcadDocument
Dim docObj As AcadDocument
Dim spaceObj As AcadBlock
Dim returnObj As Acad3DSolid
Dim temp3Dsolid As Acad3DSolid
''''''''''''''''''''''''''
'docObj
是当前文档对象,returnObjdocObj中的一个3D对象
'set spaceObj = docObj
'
对象的赋值对没问题,只是下面的代码不能得到我想要的结果
''''''''''''''''''''''''''
Set docTemp = docsObj.Add
Set temp3Dsolid = spaceObj.CopyObjects(returnObj, docTemp.ModelSpace)
'
我想应该在新建的文档里有returnObj对象,可结果什么也没有
'
各位高手给我看看,先谢谢了!!!

问题在这一句:Set temp3Dsolid = spaceObj.CopyObjects(returnObj, docTemp.ModelSpace)。
首先CopyObjects应该是文档对象的方法,spaceObj应是AcadDocument对象,然后看看它的传递参数,第一个参数Objects应该是对象的数组,应而returnObj应该声明为Dim returnObj(0) As Acad3DSolid,然后对其赋值。最后,看看返回值RetVal,它也是对象的数组,故应声明为Dim temp3Dsolid As Variant。

8. 我需要在vb程序中实现选择内部点对某一个封闭区域进行填充,好像没有生成封闭区域的函数,如果使用sendcommand调用cad的填充命令,基本上可以实现,但是当封闭区域没有完全显示在视口内时,就会出错。大家有好的方法吗?

Hatch.AppendOuterLoop '外部区域
Hatch.AppendInnerLoop '内部区域
方法不行吗?
如果选择点的话,要把选择到的点生成 Polyline 当内部区域即可!

9怎样计算一个多边形的中心点?

如果你想知道的仅仅是正多边形的中心点位置,这很容易,若边数是奇数,中心点是这样两条线的交点:它们是多边形顶点到相对边垂线。若边数是偶数,两对相对顶点连线的交点就是中心点。
对于一般的多边形,中心点的计算方法有几种,但都比较麻烦。下面介绍的两个算法实际上都可以应用于任何2D图形的中心点计算。
算法1。该算法基于这样两个数学定理:
1、在任意指定的一个方向上,有且仅有一条直线将指定的闭合区域分成两个面积相等的部分。可用极限理论中的“夹逼定理”。具体证明略。
2、在两个不同方向上得到的上述两条直线的交点就是闭合区域的重心位置。要严格证明它,我同样也未找初等方法,要用到比较复杂的微积分知识。不过可以从重心的物理意义出发理解它。
算法1也就是通过尝试找到这样两条直线(或近似值)。这个方法对于不太熟悉微积分的朋友相对容易理解,但实际编程时要多次计算和比较区域的面积,并且在得到将区域分成面积相等的两块的直线过程中,大概要通过递归的方法逐步逼近正确值,运行效率很低。
算法2直接利用数学中重心坐标计算公式,利用微积分方法计算。
中心点X坐标为:xdxdy在区域上的二重积分/区域面积。
Y坐标为:ydxdy在区域上的二重积分/区域面积。
积分的计算就用矩形逼近求和的方法,或辛普森方法(如果你对精度要求很高的话)。
当然,针对具体的问题可能(应该几乎可以肯定)有更高效的算法。那么就需要你对具体问题准确描述。

10如何返回在命令行中输入的字符,是指在没有按下回车和空格下
GetInput如何确定返回的是空字串还是按下了Esc,
我已先指定了一个KeyWord ,当有输入我指定的KeyWord,再按下Esc,返回的还是那个KeyWord,怎么办?

如果出错号为:-2147467259
则指的是输入了字符或回车或空格
如果出错号为:-2147352567
则指的是按了取消键

11当我插入块时,鼠标的click_point为两个图块的公共插入点,即同时插入两个块
但我的问题是,如何在插入时将此两块合成一个块?

图块合并可以用CopyObjects方法,但是合并后的图块最好重新起个名字,否则原来的已经插入的图块将会被覆盖更新。

 

0

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

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

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

新浪公司 版权所有