Specify layout names for block insertion?

Specify layout names for block insertion?

Anonymous
Not applicable
1,505 Views
2 Replies
Message 1 of 3

Specify layout names for block insertion?

Anonymous
Not applicable

How would I specify the Layout names here?

 

Public Sub InsertBlocks()
    Dim blockObj1 As AcadBlockReference
    Dim blockObj2 As AcadBlockReference
    Dim blockObj3 As AcadBlockReference
        
    Dim InsPoint(0 To 2) As Double
    InsPoint(0) = 0#: InsPoint(1) = 0#: InsPoint(2) = 0#
    
    File1 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet1.dwg"
    File2 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet2.dwg"
    File3 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet3.dwg"
    
    Set blockObj1 = ThisDrawing.PaperSpace.InsertBlock(InsPoint, File1, 1#, 1#, 1#, 0) 'Layout1
    Set blockObj2 = ThisDrawing.PaperSpace.InsertBlock(InsPoint, File2, 1#, 1#, 1#, 0) 'Layout2
    Set blockObj3 = ThisDrawing.PaperSpace.InsertBlock(InsPoint, File3, 1#, 1#, 1#, 0) 'Layout3
End Sub

 

The concept: When a number (1,2,3,etc) is selected from a drop-down list

"1" is selected, "blockObj1" is inserted to Layout1

"2" is selected, "blockObj1" & "blockObj2" are inserted to Layout1 & 2 respectively

"3" is selected, "blockObj1" & "blockObj2" & "blockObj3" are inserted to Layout1, 2, & 3  respectively

...etc...

0 Likes
Accepted solutions (1)
1,506 Views
2 Replies
Replies (2)
Message 2 of 3

norman.yuan
Mentor
Mentor
Accepted solution

ThisDrawing.PaperSpace refers to the block of CURRENT layout. To adding entity (in your case, it is inserting block reference) to a layout (layout block, actually), you can

 

either:

 

set the target layout as active layout, and then call ThisDrawing.PaperSpace.Add/Insert(...)

 

such as:

 

ThisDrawing.ActiveSpace=acPaperSpace

 

 

Set ThisDrawing.ActiveLayout=ThisDrawing.Layouts("Layout1")

ThisDrawing.PaperSpace.Insert ....

 

Set ThisDrawing.ActiveLayout=ThisDrawing.Layouts("Layout2")

ThisDrawing.PaperSpace.Insert ....

 

Or:

 

call AcadLayout.Block.Add/Insert(...)

 

such as:

 

Dim lay as AcadLayout

Set lay=ThisDrawing.Layouts("Layout1")

lay.Block.Insert ....

 

Set lay=ThisDrawing.Layouts("Layout2")

lay.Block.Insert ....

Norman Yuan

Drive CAD With Code

EESignature

Message 3 of 3

Anonymous
Not applicable

Using the "call" method worked perfectly.  Thank you!  Here is what the code looks like now.

 

Public Sub InsertBlocks()
    Dim InsPoint(0 To 2) As Double
        Dim lay1 As AcadLayout
        Dim lay2 As AcadLayout
        Dim lay3 As AcadLayout
            Dim blockObj1 As AcadObject
            Dim blockObj2 As AcadObject
            Dim blockObj3 As AcadObject
    
    InsPoint(0) = 0#: InsPoint(1) = 0#: InsPoint(2) = 0#
        File1 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet1.dwg"
        File2 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet2.dwg"
        File3 = "C:\Program Files\Autodesk\AutoCAD 2015\Support\Sheet3.dwg"
            Set lay1 = ThisDrawing.Layouts("Layout1")
            Set lay2 = ThisDrawing.Layouts("Layout2")
            Set lay3 = ThisDrawing.Layouts("Layout3")
    Set blockObj1 = lay1.Block.InsertBlock(InsPoint, File1, 1#, 1#, 1#, 0)
    Set blockObj2 = lay2.Block.InsertBlock(InsPoint, File2, 1#, 1#, 1#, 0)
    Set blockObj3 = lay3.Block.InsertBlock(InsPoint, File3, 1#, 1#, 1#, 0)
End Sub
0 Likes