Jump to content

Recommended Posts

Posted

I use AutoCAD 2007 and program in VBA. Could you help with drawing cylinders in VBA. The "AddCylinder" draws only in WCS meaning I get cylinders in only one direction. I need cylinders to the UCS I set using the VBA program.

Posted
I use AutoCAD 2007 and program in VBA. Could you help with drawing cylinders in VBA. The "AddCylinder" draws only in WCS meaning I get cylinders in only one direction. I need cylinders to the UCS I set using the VBA program.

 

you can rotate the cylinder after creating it

 

here's a quick and dirty code combinating two AutoCAD Active X and VBA reference examples

Option Explicit
Sub AddAndRotateCylinder()
   ' This example creates a cylinder in model space.

   Dim cylinderObj As Acad3DSolid
   Dim radius As Double
   Dim center(0 To 2) As Double
   Dim height As Double

   ' Define the cylinder
   center(0) = 0#: center(1) = 0#: center(2) = 0#
   radius = 5#
   height = 20#

   ' Create the Cylinder (3DSolid) object in model space
   Set cylinderObj = ThisDrawing.ModelSpace.AddCylinder(center, radius, height)
   ZoomAll
   MsgBox "Cylinder created"


   ' Change the viewing direction of the viewport
   Dim NewDirection(0 To 2) As Double
   NewDirection(0) = -1: NewDirection(1) = -1: NewDirection(2) = 1
   ThisDrawing.ActiveViewport.Direction = NewDirection
   ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
   ThisDrawing.Regen True

   ' Define the rotation axis with two points
   Dim rotatePt1(0 To 2) As Double
   Dim rotatePt2(0 To 2) As Double
   Dim rotateAngle As Double

   rotatePt1(0) = -3: rotatePt1(1) = 4: rotatePt1(2) = 0
   rotatePt2(0) = -3: rotatePt2(1) = -4: rotatePt2(2) = 0
   rotateAngle = 30
   rotateAngle = rotateAngle * 3.141592 / 180#

   ' Draw a line between the two axis points so that it is visible.
   ' This is optional. It is not required for the rotation.
   Dim axisLine As AcadLine
   Set axisLine = ThisDrawing.ModelSpace.AddLine(rotatePt1, rotatePt2)
   axisLine.Update
   MsgBox "Rotate the box 30 degrees about the axis shown.", , "Rotate3D Example"
   ' Rotate the box
   cylinderObj.Rotate3D rotatePt1, rotatePt2, rotateAngle
   ThisDrawing.Regen True
   MsgBox "The cylinder is rotated 30 degrees.", , "Rotate3D Example"
End Sub

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...