yoin

Stijn123

Hallo iedereen,
Zou er mij iemand kunnen uitleggen of de code geven hoe ik een block of wblock kan invoegen in mijn modelspace vanuit het programmeren in VBA.

Ik werk met een userform die een paar berekeningen maakt (dit werkt al) ik moet een message box krijgen met de uitkomsten (doet ie ook al) en nu moet ik (als je op de "OK" knop klikt) een block of wblock automatich kunnen laten invoegen...

Help mij aub!

Mvg, Stijn

Joop

In de help file van vlisp en daarvan de ActiveX and VBA Reference onder methods vind je de gegevens.
Onder andere moet je ongeveer 6 variabelen meegeven als je InsertBlock gebruikt.
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

HofCAD

#2
Citaat van: Stijn123 op do 02 04 2009, 09:30:32
Hallo iedereen,
Zou er mij iemand kunnen uitleggen of de code geven hoe ik een block of wblock kan invoegen in mijn modelspace vanuit het programmeren in VBA.

Ik werk met een userform die een paar berekeningen maakt (dit werkt al) ik moet een message box krijgen met de uitkomsten (doet ie ook al) en nu moet ik (als je op de "OK" knop klikt) een block of wblock automatich kunnen laten invoegen...

Help mij aub!

Mvg, Stijn

Beste Stijn,

Vanuit de AutoCAD Help:
Sub Ch10_InsertingABlock()
    ' Define the block
    Dim blockObj As AcadBlock
    Dim insertionPnt(0 To 2) As Double
    insertionPnt(0) = 0
    insertionPnt(1) = 0
    insertionPnt(2) = 0
    Set blockObj = ThisDrawing.Blocks.Add _
                     (insertionPnt, "CircleBlock")

    ' Add a circle to the block
    Dim circleObj As AcadCircle
    Dim center(0 To 2) As Double
    Dim radius As Double
    center(0) = 0
    center(1) = 0
    center(2) = 0
    radius = 1
    Set circleObj = blockObj.AddCircle(center, radius)

    ' Insert the block
    Dim blockRefObj As AcadBlockReference
    insertionPnt(0) = 2
    insertionPnt(1) = 2
    insertionPnt(2) = 0
    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
               (insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
    ZoomAll
    MsgBox "The circle belongs to " & blockRefObj.ObjectName
End Sub


Als je een block "MIJNBLOCK" en een coördinatensysteem met de naam "MIJNUCS"
hebt, dan heb je misschien hier iets aan:
Sub Insert1()
    Dim XYZ(0 To 2) As Double
    Dim TestBlock As AcadBlockReference
    Dim ucsObj As AcadUCS
    Dim TransMatrix As Variant
    Set ucsObj = ThisDrawing.UserCoordinateSystems.Item("MIJNUCS")
    XYZ(0) = 0
    XYZ(1) = 0
    XYZ(2) = 0
    Set TestBlock = ThisDrawing.ModelSpace.InsertBlock(XYZ, "MIJNBLOCK", 1, 1, 1, 0)
    TransMatrix = ucsObj.GetUCSMatrix()
    TestBlock.TransformBy (TransMatrix)
    TestBlock.Update
End Sub


Met vriendelijke groet, HofCAD CSI.
ACADcadabra

sschevers

Stijn,

ipv ThisDrawing.ModelSpace.InsertBlock kun je ook de volgende constructie toepassen

Dim space As AcadBlock
Dim newSymb As AcadBlockReference

'bepalen welke space actief is
   If ThisDrawing.ActiveSpace = acModelSpace Then
      Set space = ThisDrawing.ModelSpace
   Else
      If ThisDrawing.MSpace Then
         Set space = ThisDrawing.ModelSpace
      Else
        Set space = ThisDrawing.PaperSpace
      End If
   End If

Set newSymb = space.InsertBlock

Dan wordt je block in de active space geplaatst.

groeten

stephan

FastFiber