Jump to content
Ramesh PK

Drawing cylinders

Recommended Posts

Ramesh PK

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.

Share this post


Link to post
Share on other sites
RICVBA
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

Share this post


Link to post
Share on other sites
Ramesh PK

Thanks for a quick response..!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×