建筑新时代论坛's Archiver

【热门搜索】建材Autocad膜结构钢结构加固招聘工程机械测绘建筑材料工程造价建筑施工图

jamesjuguangze 发表于 2007-12-23 22:11

请教高手,急啊

Public Sub HandleAndHAndleToObject()
   Dim entHandle As String
   Dim entHandlekk As String
   Dim entry As AcadEntity
   Dim entrykk As AcadEntity
   Dim tempobj As AcadObject
   Dim tempobjkk As AcadObject
   Dim det1 As String
   Dim det2 As String
   Dim Pnt1 As Variant
   Dim Pnt2 As Variant
   Dim a(0 To 2) As Double
   Dim b(0 To 2) As Double
   Dim c(0 To 2) As Double
   Dim d(0 To 2) As Double
   Dim e(0 To 2) As Double
   Dim f(0 To 2) As Double
   Dim av As Variant
   Dim ai As Variant
   Dim oldname As String
   Dim newname As String
   Dim Arcstartpoint As Variant
   Dim Arcendpoint As Variant
   Dim Circlecenter As Variant
   Dim OkLine As AcadLine

   For Each entry In ThisDrawing.ModelSpace
      entHandle = entry.handle
      Set tempobj = ThisDrawing.HandleToObject(entHandle)
      If tempobj.ObjectName = "AcDbPolyline" Then '************多段线***********
         tempobj.color = acGreen
         av = tempobj.Coordinates
         a(0) = av(0)
         a(1) = av(1)
         a(2) = av(2)
         Pnt1 = a
         det1 = axEnt2lspEnt(tempobj)
         For Each entrykk In ThisDrawing.ModelSpace
             entHandlekk = entrykk.handle
             Set tempobjkk = ThisDrawing.HandleToObject(entHandlekk)
             If tempobjkk.ObjectName = "AcDbCircle" Then '************被切圆***********
                tempobjkk.color = acRed
                oldname = tempobjkk.ObjectName
                ai = tempobjkk.Center
                b(0) = ai(0) + tempobjkk.Radius
                b(1) = ai(1)
                b(2) = ai(2)
                Pnt2 = b
                det2 = GetDoubleEntTable(tempobjkk, Pnt2)
                ThisDrawing.SendCommand "_trim" & vbCr & det1 & vbCr & vbCr & det2 & vbCr & vbCr
                ThisDrawing.Regen ture
                newname = tempobjkk.ObjectName
                If oldname <> newname Then
                   MsgBox "被切圆的名称已经发生变化,由" & oldname & "变成" & newname _
                          + vbCrLf & "但有些属性还不能用啊,如startpoint和endpoint" _
                          + vbCrLf & "help help help help help help help help help help help help"
                   'Arcstartpoint = tempobjkk.StartPoint
                   'Arcendpoint = tempobjkk.EndPoint
                   'c(0) = Arcstartpoint(0)
                   'c(1) = Arcstartpoint(1)
                   'c(2) = Arcstartpoint(2)
                   'd(0) = Arcendpoint(0)
                   'd(1) = Arcendpoint(1)
                   'd(2) = Arcendpoint(2)
                  
                   'Circlecenter = tempobjkk.Center
                   'e(0) = Circlecenter(0)
                   'e(1) = Circlecenter(1)
                   'e(2) = Circlecenter(2)
                   'f(0) = (c(0) + d(0)) / 2
                   'f(1) = (c(1) + d(1)) / 2
                   'f(2) = (c(2) + d(2)) / 2
                   'Set OkLine = ThisDrawing.ModelSpace.AddLine(e, f)
                End If
             End If
         Next
      End If
   Next
ThisDrawing.Regen ture
End Sub
'转换双元表的函数
Public Function GetDoubleEntTable(entObj As AcadEntity, Pnt As Variant) As String
    Dim entHandle As String
    entHandle = entObj.handle
    GetDoubleEntTable = "(list(handent " & Chr(34) & entHandle & Chr(34) & _
                     ")(list " & Str(Pnt(0)) & Str(Pnt(1)) & Str(Pnt(2)) & "))"
End Function
'转换点的函数
Public Function axPoint2lspPoint(Pnt As Variant) As String
    axPoint2lspPoint = Pnt(0) & "," & Pnt(1) & "," & Pnt(2)
End Function
'转换图元函数
Public Function axEnt2lspEnt(entObj As AcadEntity) As String
    Dim entHandle As String
    entHandle = entObj.handle
    axEnt2lspEnt = "(handent " & Chr(34) & entHandle & Chr(34) & ")"
End Function

cq_qg 发表于 2007-12-24 12:07

怎么什么都不说,描述一下问题。

没有人 发表于 2007-12-24 12:25

这哪是请教?简直就是考我们来了!:lol

jamesjuguangze 发表于 2007-12-24 19:15

回复 3楼 的帖子

sorry,描述不清,是这样的,多段线是样板的外形,小圆是开口点,我想在开口点处向多段线外形上画一条小垂线标注开口,多段线和小圆是相交的,我想返回上述图元交点的坐标,两交点的中点和圆心画一直线即为所求垂线,但经过剪切后小圆已经变成了圆弧,却返不回这圆弧的两端点,而小圆实际上已经变成了圆弧(objectname属性已发生变化),搞不懂怎么回事.求救

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.