Jeff_M 发表于 2007-1-5 11:16:15

从分解的块中挤出区域

好的,我正在拔头发,我正在尝试从一个区域创建一个挤出的实体,这是一个分解块。(我的想法是绘制该区域,并将其作为块插入,然后爆炸块,留下我可以挤压的区域。)我应该尝试这个,还是使用折线代替?我想我可以根据单个选择点的坐标绘制折线,但这似乎工作量太大了。或者我可以将我的块从一个区域更改为折线,并挤压它吗?无论如何,当我试图捕获爆炸块时,我崩溃了。有办法做到这一点吗?
**** Hidden Message *****

Jeff_M 发表于 2007-1-5 11:22:33

我从其他一些代码开始,因此所有注释行
Public Sub DrawWideFlangeSteel()
      Dim oCyl As Acad3DSolid, oCircle As AcadCircle, oLine As AcadLine, oLayer As AcadLayer
      Dim oBeam As Acad3DSolid, oReg As AcadRegion, oBlock As AcadBlockReference, oObject As AcadObject
      Dim varpick As Variant
      Dim Ent As AcadEntity
      Dim Inspt As Variant
      Dim RegEnt(0) As AcadEntity
      Dim V(2) As Double, Unit As Double, Vn(2) As Double, dblBusDia As Double
      Dim P1, P2
      Dim newPT1 As Variant
      Dim newPT2 As Variant
      Set oLayer = ThisDrawing.Layers.Add("3D-BUSS-STEEL")
      oLayer.color = 235
      
      Inspt = ThisDrawing.Utility.GetPoint(, "Pick Insertion Point: ")
      If ThisDrawing.ActiveSpace = acModelSpace Then
      Set oBlock = ThisDrawing.ModelSpace.InsertBlock(Inspt, "M:\MODEL-COMPONENTS\w8x24.dwg", 1#, 1#, 1#, 0)
      Else
      Set oBlock = ThisDrawing.PaperSpace.InsertBlock(Inspt, "M:\MODEL-COMPONENTS\w8x24.dwg", 1#, 1#, 1#, 0)
      End If
      ThisDrawing.Regen acActiveViewport
Set oObject = oBlock.Explode
'      ThisDrawing.Utility.GetEntity Ent, varpick
'      If Not TypeOf Ent Is AcadLine Then
'            MsgBox "That was not a Layout Line"
'            Exit Sub
'      End If
'      Set oLine = Ent
'      newPT1 = oLine.StartPoint
'      newPT2 = oLine.EndPoint
'      newPT1(2) = ConvertFeet(frmInsPart.cboBusHeight.Value)
'      newPT2(2) = ConvertFeet(frmInsPart.cboBusHeight.Value)
'      Set oLine = ThisDrawing.ModelSpace.AddLine(newPT1, newPT2)
'      oLine.Layer = "3D-BUSS-CALC"
'      P1 = oLine.StartPoint: P2 = oLine.EndPoint
'      V(0) = P2(0) - P1(0): V(1) = P2(1) - P1(1): V(2) = P2(2) - P1(2)
      'Normalise the vector(It's length=1)
'      Unit = Sqr(V(0) * V(0) + V(1) * V(1) + V(2) * V(2))
'      Vn(0) = V(0) / Unit: Vn(1) = V(1) / Unit: Vn(2) = V(2) / Unit
'      dblBusDia = CDbl(frmInsPart.cboBusSize.Value + 0.5) / 2
'      Set oCircle = ThisDrawing.ModelSpace.AddCircle(oLine.StartPoint, dblBusDia)
      ThisDrawing.Regen acActiveViewport
'      oCircle.Normal = Vn    ' Vn or V both work here.
'      ThisDrawing.Regen acActiveViewport
'      Set RegEnt(0) = oCircle
'      oReg = ThisDrawing.ModelSpace.AddRegion(RegEnt)
'      Set oCyl = ThisDrawing.ModelSpace.AddExtrudedSolid(oReg(0), oLine.Length, 0)
'      oCircle.Delete
'      oReg(0).Delete
End Sub

Fatty 发表于 2007-1-5 11:30:11

这是我出错的地方吗?我需要一个变体来捕获爆炸的东西?我尝试了
Dim o某物作为AcadObject
o某物=block.explode
但没有工作

CADaver 发表于 2007-1-5 11:59:52

对,就是这样。它将是块中对象的数组。

Jeff_M 发表于 2007-1-5 12:46:18

侧边轨道...
1.)您可以挤出封闭的折线,不需要区域。
2.)如果您已经有一个块,只需更改X或Z比例。
伪代码。
从文件
中收集配置文件数据绘制样条配置文件
挤出配置文件一个单元(X代表横梁或Z代表科勒。)
添加智能(属性,xdata等)
Makeblock
插入块,将X或Z修改为所需的长度并旋转。
使用EATTEXT可以提取X或Z值以及块名称、位置、层等。

CADaver 发表于 2007-1-5 13:14:22

尸体,你如何挤出一个封闭的折线?从帮助文件中,它说只有区域

CADaver 发表于 2007-1-5 13:58:39

这是一种方法,Duh。
然后在调用Sub中:
这将为您提供3个固体到联盟

Jeff_M 发表于 2007-1-5 14:01:40

我将不得不试一试。谢谢杰夫
页: [1]
查看完整版本: 从分解的块中挤出区域