明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1645|回复: 8

[求助]关于vba图层和剪断的求助

[复制链接]
发表于 2003-10-21 08:23:00 | 显示全部楼层 |阅读模式
前面的帖子我看了大部分,但是,有些地方我还是不太明白,而且我也没有相关的中文参考资料作为参考 :(  请斑竹们帮帮忙,告诉我最简短的代码示例或者告诉我从那里获得相关的帮助——我上次就是得到 mccad 的指引,得到了"IntersectWith 方法"的帮助文件……
      问题一:如何进行层复制,即,将某一层或几层复制到另外一个打开的文件中。看前面的帖子,可以利用过滤机制,可我不太明白,请指点一二。
      问题二:如何复制某一区域内的所有实体,比如一个四方的区域中的所有pline。前面的帖子提到,创建一个选择集,然后判断是否在里面,如果是 pline 是否可以判断起终点,如果是插入的块是否判断插入点(或者是中心)
      问题三:如何剪断。看到了很多关于类似 trim 功能的方法,能不能告诉我一些关于此类开发的参考资料,或者各位大虾拿出来共享的例子?
      谢谢,斑竹对兄弟的照顾。
发表于 2003-10-21 11:35:00 | 显示全部楼层
问题一:建议搞成块后插入到另一个文件中。
问题二:构建矩形使用两个对角点,比如要选择区域内的直线,对角点也就是直线的两端点。
Sub xuanze()
    Dim SSetObj As AcadSelectionSet
    On Error Resume Next
    Set SSetObj = ThisDrawing.SelectionSets("Test") '创建选择集
    If Err Then

        Err.Clear
        Set SSetObj = ThisDrawing.SelectionSets.Add("Test")
    End If
    SSetObj.Clear
   
    Dim Pt1 As Variant
    Dim Pt2 As Variant
    'Pt1 = ThisDrawing.ModelSpace(0).StartPoint '赋值,使用已知的两个点
    'Pt2 = ThisDrawing.ModelSpace(0).EndPoint

    Dim groupCode(0) As Integer
    Dim dataCode(0) As Variant
    groupCode(0) = 0 '创建只选择直线的过滤机制,组码为0,值为"Line"
    dataCode(0) = "Line"


    SSetObj.Select acSelectionSetWindow, Pt1, Pt2, groupCode, dataCode '使用窗选
    Dim EntObj As AcadEntity
    For Each EntObj In SSetObj
        '循环选择集,根据两点判断是否是需要的直线,是则删除,考虑到精度,可能还要加上误差判断。
        If EntObj.StartPoint(0) = Pt1(0) And EntObj.StartPoint(1) = Pt1(1) _
                And EntObj.EndPoint(0) = Pt2(0) And EntObj.EndPoint(1) = Pt2(1) Then
            EntObj.Delete
            Exit For
        End If
    Next
End Sub
问题三:http://www.mjtd.com/a2/list.asp?id=30
 楼主| 发表于 2003-10-21 14:45:00 | 显示全部楼层
谢谢!Thankx......
前面提到过 CopyObjects 方法,能不能给点提示?
发表于 2003-10-21 18:40:00 | 显示全部楼层
CopyObjects方法论坛中有两个程序涉及到,你搜索一下,应该可以明白
 楼主| 发表于 2003-10-22 08:53:00 | 显示全部楼层
mccad 我搜过了,代码一样(非常类似)
我使用的是vba编程,只是在

Set ss = CreateSelectionSet
ss.SelectOnScreen
ThisDrawing.CopyObjects ssArray(ss), doc.ModelSpace

句时,老是出错……
      CreateSelectionSet 是在什么情况下才能用?为什么老是提示错误,是否应该有一个自定义的方法或函数?
      thisdrawing.copyobjects ssarray(ss),doc.modelspace 一句也出错。在同一幅图形内可以复制,代码调试已经通过了,但是,如果两幅打开的图形之间复制就不行了……cad 帮助文件也只给出了类似代码。
      ss.selectonscreen 8,"LayerName" 一句也无法调试通过……
我好郁闷啊
发表于 2003-10-22 12:31:00 | 显示全部楼层
由于论坛提问偶尔有重复性,所以有相似甚至相同是很正常的。
  你的第一个问题,应该是那个选择集已经存在,所以提示出错,你可以参考上面的代码,那个有排错的功能,你也可以程序后面加上:ss.delete直接删除选择集以免再次运行出错。
 楼主| 发表于 2003-10-22 14:29:00 | 显示全部楼层
不是原有记录集已存在的问题,我已经处理了这个例外,可是……

我在试试吧,不行的话,只好另寻它路了  :(
发表于 2003-10-22 19:34:00 | 显示全部楼层
CreateSelectionSet和ssArray都是自定义函数,你可以在实用函数集中找到。
CreateSelectionSet是创建一个空白选择集的函数
ssArray是将选择集对象放到一个数组中
 楼主| 发表于 2003-10-24 14:33:00 | 显示全部楼层
谢谢 mccad    :)
    感觉应该是有这么一个自定义的函数的,只是没想到竟然真的是。我会从实用函数集中找一下的……
    再次感谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-28 12:49 , Processed in 0.204272 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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