Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations TugboatEng 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
Joined
Apr 13, 2003
Messages
19
Location
CN
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.
 
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

Back
Top