Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations GregLocock on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

How to use customized toolbar item for a block insertion? 1

Status
Not open for further replies.

raby

Computer
Apr 13, 2003
19
Hi,friends,

I'm using AutoCAD VBA to develop a module for drawing hydraulic circuit, and plan to make the block for every standard parts, such as pumps, valve. But now I get trouble on how to use the customized toolbar item to command the insertion of corresponding block? Thanks.
 
Replies continue below

Recommended for you

here's my secret insert routine...enjoy

Public Function InsertBlkRef(ByVal sBlkName As String, _
Optional ByVal bExplode As Boolean = True, _
Optional ByVal iSpace As Integer = 0, _
Optional ByVal dScale As Double = 1#, _
Optional ByVal vInsPt As Variant, _
Optional ByVal dRot As Double = 0#, _
Optional ByVal bLastObj As Boolean = False) As AcadBlockReference
'------------------------------------------------------------------------------
'InsertBlkRef: Defaults are:
' EXPLODED
' MODELSPACE
' 1:1 SCALE
' 0,0 INSERT POINT
' 0 ROTATION
' True RETURN LAST EXPLODED ITEM (use after explode of block
' which reveals another block)
'Arguments: sBlkName = path and/or filename (i.e. "someblock.dwg")
' bExplode = insert exploded TRUE or not explode FALSE
' iSpace(OPT) = 0 for paperspace and 1 (default) is modelspace
' dScale(OPT) = scale, the same for X and Y
' vInsPt(OPT) = insertion point, zero-zero if none given
' dRot(OPT) = rotation in degrees (converted to radians
' within function), defaults to zero if not given
'Returns: Block reference (if it is the only item in the block)
'------------------------------------------------------------------------------
Dim acBlkRef As AcadBlockReference
Dim dInsPt(0 To 2) As Double
Dim acBlkEnts
'''''''''''''''''''''''''''''''''''''''
On Error GoTo ErrHandler

'--------------------------------------------------------------------------
'Set insertion point. Set to 0,0 if none given
'--------------------------------------------------------------------------
If IsMissing(vInsPt) Then
dInsPt(0) = 0#: dInsPt(1) = 0#: dInsPt(2) = 0#
Else
dInsPt(0) = vInsPt(0)
dInsPt(1) = vInsPt(1)
dInsPt(2) = vInsPt(2)
End If

dRot = DegreesToRadians(dRot)
'--------------------------------------------------------------------------
'Check if need to add .dwg for pathed files
'--------------------------------------------------------------------------
If InStr(sBlkName, "\") And Not LCase(Right$(sBlkName, 4)) = ".dwg" Then
sBlkName = sBlkName & ".dwg"
End If
'--------------------------------------------------------------------------
'Set space to insert into. Then insert drawing
'--------------------------------------------------------------------------
If iSpace = 1 Then
Set acBlkRef = ThisDrawing.PaperSpace.InsertBlock(dInsPt, _
sBlkName, dScale, dScale, dScale, dRot)
Else
Set acBlkRef = ThisDrawing.ModelSpace.InsertBlock(dInsPt, _
sBlkName, dScale, dScale, dScale, dRot)
End If

'--------------------------------------------------------------------------
'Make sure block is inserted and explode if required
'--------------------------------------------------------------------------
If Not acBlkRef Is Nothing Then
If bExplode Then
acBlkEnts = acBlkRef.Explode
acBlkRef.Delete 'Gets rid of original copy, leaves exploded one
If bLastObj Then
Set InsertBlkRef = EntLast 'last modelspace entity
End If
Set acBlkRef = Nothing
Else
Set InsertBlkRef = acBlkRef
End If
End If

ExitHere:
Exit Function
ErrHandler:
Debug.Print vbObjectError + 514, "PP_ACAD Error", _
"Function 'InsertBlkRef' Failed"
Err.Clear
End Function

"Everybody is ignorant, only on different subjects." — Will Rogers
 
thanks borgunit, I'm trying!
 
Is there a way to insert a single specified block from with in a drawing containing multiple blocks? (other then the design center!)?
 
Just insert and specify the block name. AutoCAD works with names.

"Everybody is ignorant, only on different subjects." — Will Rogers
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor