yuangw1234 发表于 2006-4-20 20:50:00

为什么用offset 方法得到的物体不可以編輯

本人今天做了一个程序,用了offset方法,基本思路就是我选择一个物体,然后将其复制到其它几个图层,然后有三个图层需要用offest方法将复制过来的东西偏大,实际操作中我发现它不一定偏大,当然也有大的时候,因为我知道是形状的原因,于是我做了一个这样一个处理 :假如偏出来的东西面积比以前小,我就将其删除,再重新offset( -a ), 想法是好,可是遇到这样一个问题,就是用offset方法偏过后的东西跟本不存在Area 这个属性,都不可以用Delete方法(令我甚是失望),我才知道原来offset过的东西不可以编辑了(也不可以explode),请管理员或大师指点怎么可以得到偏过后东西的面积并删除它,总之可以有编辑的方法,多谢各位!
发现下面红色程式处有问题Public Sub chongcai()
On Error Resume Next
Dim ssetobj As AcadSelectionSet
Dim Ftype(1) As Integer
Dim Fdata(1) As Variant
ThisDrawing.SelectionSets("chongcaiss").Delete
If Err Then
Err.Clear
End If
Ftype(0) = 0
Fdata(0) = "*"
Ftype(1) = 8
Fdata(1) = "SIDE"
Set ssetobj = ThisDrawing.SelectionSets.Add("chongcaiss")
ssetobj.SelectOnScreen Ftype, Fdata
Dim selobj As AcadObject
Dim I As Integer
For I = 0 To ssetobj.Count - 1
    Set selobj = ssetobj.Item(I)
    Dim cpPH As AcadObject, cpPPS As AcadObject, cpPS As AcadObject, cpDIE As AcadObject, cpLB As AcadObject, cpLP As AcadObject
    Set cpPH = selobj.Copy: Set cpPPS = selobj.Copy: Set cpPS = selobj.Copy: Set cpDIE = selobj.Copy: Set cpLB = selobj.Copy: Set cpLP = selobj.Copy
    cpPH.Layer = "PH": cpPPS.Layer = "PPS": cpPS.Layer = "PS": cpDIE.Layer = "DIE": cpLB.Layer = "LB": cpLP.Layer = "LP"
    Dim ccpps As AcadObject, cclb As AcadObject, cclp As AcadObject
    Set ccpps = cpPPS.Offset(0.5): Set cclb = cpLB.Offset(0.5): Set cclp = cpLP.Offset(1)
    If ccpps.Area < selobj.Area Then
    ccpps.Delete: cclb.Delete: cclp.Delete
    cpPPS.Offset (-0.5): cpLB.Offset (-0.5): cpLP.Offset (-1)
    End If
    cpPPS.Delete: cpLB.Delete: cpLP.Delete
Next
End Sub

mccad 发表于 2006-4-21 07:03:00

你要注意偏移后所返回的数据格式。因为偏移有可能会返回超过1个对象,所以这里使用的是对象数组,而不是你程序中反映的只是一个对象。

yuangw1234 发表于 2006-4-21 11:03:00

<P>管理员,我现在偏的是聚合线,就象长方形之类的,当然几边形是不定的,你能不能提供一种方法得到偏出后图形的面积,并把偏出来的多边形删除(因为偏出来的不理想)</P>

68651521 发表于 2006-4-21 15:39:00

<P>&nbsp;</P>
<P><FONT color=#f73809>&nbsp;&nbsp;&nbsp;&nbsp;</FONT><FONT color=#f73809>If ccpps.Area &lt; selobj.Area Then<BR>&nbsp;&nbsp;&nbsp; ccpps.Delete......</FONT></P>
<P><FONT color=#f73809>改成</FONT></P>
<P><FONT color=#f73809><FONT color=#f73809><FONT color=#000000>&nbsp;&nbsp;&nbsp; </FONT><FONT color=#f73809>If ccpps(0).Area &lt; selobj.Area Then<BR>&nbsp;&nbsp;&nbsp; ccpps(0).Delete......</FONT></FONT></FONT></P>
<P><FONT color=#f73809></FONT>&nbsp;</P>

yuangw1234 发表于 2006-4-22 11:58:00

4楼的兄弟的方法我试过了,没有用的,生成了两个,幵始生成的还是不能编辑(删除不掉),管理员能不能提供一种方法

yuangw1234 发表于 2006-4-22 13:39:00

<P>管理员,这个问题仍然没有人可以回答,你可以帮我想想办法吗</P>

mccad 发表于 2006-4-22 18:03:00

<P>你要理解对象数组的概念。对象偏移后,不管是生成了一个对象或一个以上的对象,都是以对象数组的方式返回的。<BR>假设返回的对象数组为:<BR>RetVal<BR>可以通过Ubound(RetVal)函数来读取返回对象的数量。<BR>通过RetVal(0)来取得第一个返回的对象。通过它就可以对该对象进行一系列的操作了。</P>
<P>另外,你的程序中不要一开始就来个On Error Resume Next<BR>这样不利于你对程序的调试。什么错误都忽略过去了,你自己还不知道哪里出错。</P>

yuangw1234 发表于 2006-4-23 16:22:00

<P>管理员多谢指教,我搞定了,不过我有点不理解你讲的对象数组,它和一般数组有什么区别,模型空间点中一个点的数组能不能称对象数组?麻烦管理员能浪费几分钟时间给我解释,如果有大师能指点,那希望大师也可以指点一二,谢谢</P>

mccad 发表于 2006-4-23 16:48:00

对象数组本身就是数组,只不过这样的数组是用来存放对象这样的数组的。

yuangw1234 发表于 2006-4-24 11:07:00

<P>管理员,顺便请教你一下关於数组定义的问题,为什么有些数组必须定义成 variant</P>
<P>而有些数组必须定义成double或其它类</P>
<P>如取得一个圆的圆心,这时这个点必须是variant</P>
<P>dim&nbsp; pt as variant</P>
<P>pt=selobj.center</P>
<P>而画一个圆时,这是定义它必须是double</P>
<P>dim pta(0 to 2) as double</P>
<P>dim circ as acadcircle</P>
<P>set circ=thisdrawing.modelspace.addcircle(pta,0.5)</P>
<P>都是一个三维数组,为什么要定义的不一样,能不能帮我解释一下&nbsp;,谢谢!</P>
页: [1] 2
查看完整版本: 为什么用offset 方法得到的物体不可以編輯