Change the columns as the diameter increases.

Options
Takahiro Yamaguchi
Takahiro Yamaguchi Member, Employee Posts: 12
Name Dropper First Comment
edited March 28 in 3D Design

I'm researching an approach with script in SpaceClaim to work parametrically change columns from 3-5-7 to become columns 4-6-8 or 5-7-9 etc as the diameter increases. Does anyone have similar solution with script?

Tagged:

Comments

  • Pernelle Marone-Hitz
    Pernelle Marone-Hitz Member, Moderator, Employee Posts: 831
    First Comment First Anniversary Ansys Employee Solution Developer Community of Practice Member
    Options

    @Gabriel Messager might have an idea ?

  • Gabriel Messager
    Gabriel Messager Member, Employee Posts: 54
    5 Likes Name Dropper First Anniversary Ansys Employee
    Options

    @Takahiro Yamaguchi
    Here is an example:

    import math
    
    ClearAll()
    
    def create_cylinder(startPoint, endPoint, radius):
    
        direction = (endPoint - startPoint).Direction.ArbitraryPerpendicular
        pt1 = startPoint
        pt2 = endPoint
        pt3 = endPoint + (direction.UnitVector * radius)
        result = CylinderBody.Create(pt1, pt2, pt3)
    
    radius_large_cylinder = MM(60)
    radius_small_cylinder = MM(5)
    distance_axis = MM(15)
    
    nb_small_cylinders = 2*int((radius_large_cylinder-radius_small_cylinder*1.1)/distance_axis)+1
    
    for i in range(nb_small_cylinders):
        startPoint = Point.Create(math.copysign(distance_axis*int(i/2+ i%2), i%2-0.5), 0, 0)
        endPoint = Point.Create(startPoint.X, startPoint.Y, MM(5))
        create_cylinder(startPoint, endPoint, radius_small_cylinder)
    
    for i in range(nb_small_cylinders-2):
        startPoint = Point.Create(math.copysign(distance_axis*int(i/2+ i%2), i%2-0.5), distance_axis, 0)
        endPoint = Point.Create(startPoint.X, startPoint.Y, MM(5))
        create_cylinder(startPoint, endPoint, radius_small_cylinder)
        startPoint = Point.Create(math.copysign(distance_axis*int(i/2+ i%2), i%2-0.5), -distance_axis, 0)
        endPoint = Point.Create(startPoint.X, startPoint.Y, MM(5))
        create_cylinder(startPoint, endPoint, radius_small_cylinder)
    
    for i in range(nb_small_cylinders-4):
        startPoint = Point.Create(math.copysign(distance_axis*int(i/2+ i%2), i%2-0.5), distance_axis*2, 0)
        endPoint = Point.Create(startPoint.X, startPoint.Y, MM(5))
        create_cylinder(startPoint, endPoint, radius_small_cylinder)
        startPoint = Point.Create(math.copysign(distance_axis*int(i/2+ i%2), i%2-0.5), -distance_axis*2, 0)
        endPoint = Point.Create(startPoint.X, startPoint.Y, MM(5))
        create_cylinder(startPoint, endPoint, radius_small_cylinder)
    
    create_cylinder(Point.Origin, Point.Create(0, 0, -MM(30)), radius_large_cylinder)