Product Documentation
Virtuoso Studio Design Environment SKILL Reference
Product Version IC23.1, November 2023

dbCreateCurvedPolygon

dbCreateCurvedPolygon(
d_CellViewId 
txl_layerPurpose 
l_curvedPoints
)
=> d_curvedPolygonId

Description

(Virtuoso MultiTech Framework) Creates a curved polygon.

Arguments

d_cellViewId

Database ID of a cellview.

txl_layerPurpose

Name, number, or a list of layers or layer-purpose pairs.

l_curvedPoints

list(boundary [l_holes])

List of one boundary and zero or more holes forming a complex closed curve. Each boundary or hole is represented by a dbClosedCurve, which is a list of vertexes. In a vertex, pairs of adjacent vertexes represent edges, which can be straight or circular:

  • A straight edge is indicated by two end points without an arc qualifier on the beginning edge.
  • A circular edge may be indicated by explicitly specifying the center or implicitly specifying the center. The explicit specification requires the center to be on the DBU grid. The implicit specification does not require the center to be on the DBU grid.
The points list can be a mix of explicit center-based or implicit angle-based specifications. Each element in the list describes a vertex on the curved shape.

L_curvedPoints := (elem)*

elem := {<x:float> <y:float> ([("arc" | "arcByCenter") ("cw" | "ccw")] | ["arcByAngle" <angle:float>])}

Here, keywords for explicit specification are "arc" and "arcByCenter" followed by "cw"(clockwise), or "ccw" (counter clockwise), to specify the direction. Keywords for implicit specification, where you do not define the center explicitly, are "arcCentralAngle" and "arcByAngle". In implicit specification, to specify a clockwise arc, specify a negative value for the angle specification.

Value Returned

d_curvedPolygonId

Database ID of the curved polygon that is created.

Example

cp1 = list(list(0 0) list(200 0) list(200 100 "arc" "ccw") list(200 200) list(0 200))
dbCreateCurvedPolygon(cv list("DIE_PAD" "drawing") cp1)

A curved polygon is created based on the specified list of points and layer-purpose as "DIE_PAD" "drawing".

Additional Information

Creating Arcs

Consider a curved polygon with three straight edges and one circular edge:

There are three ways for creating this polygon:

let( (cv cp0 cp1a cp1b cp2a cp2b cp3 polygon)
   cv = geGetEditCellView() 
   mapcar('dbDeleteObject cv~>shapes)
   cp0 = '(
           (200 200)              ;A
           (0 200)                ;B
           (0 0)                  ;C
           (200 0)                ;D
           (200 100 "arc" "ccw")  ;R
          )
   cp1a = '(
            (0 0)                  ;C
            (200 0)                ;D
            (200 100 "arc" "ccw")  ;R 
            (200 200)              ;A 
            (0 200)                ;B
          )
   cp1b = '(
            (0 0)                          ;C
            (200 0)                        ;D
            (200 100 "arcByCenter" "ccw")  ;R 
            (200 200)                      ;A 
            (0 200)                        ;B
          )
   cp2a = '(
            (0 0)                          ;C
            (200 0 "arcCentralAngle" 180)  ;D   
            (200 200)                      ;A
            (0 200)                        ;B
          )
   cp2b = '(
            (0 0)                          ;C
            (200 0 "arcByAngle" 180)       ;D 
            (200 200)                      ;A
            (0 200)                        ;B
          )
    cp3 = '(
            (0 0)                          ;C
            (200 0)                        ;D
            ("arcCentralAngle" 180)  
            (200 200)                      ;A
            (0 200)                        ;B
          )
   foreach(points list(cp0 cp1a cp1b cp2a cp2b cp3)
      polygon = dbCreateCurvedPolygon(cv '("BD4" "drawing") points)
      assert(dbGetCurvedPolygonPoints(polygon) == cp0)  
   )
  )

Explicit arcs:

Implicit arcs:

Regardless of how the curved polygon is created, dbGetCurvedPolygonPoints always returns the edges in cp0.

Creating a circle

To create a circle:

     dbCreateCurvedPolygon cvId list("SURFACE" "drawing") 
      '( 
        (0   100) 
        (100 100 "arc" "ccw") 
        (200 100)
        (100 100 "arc" "ccw")
       )

Creating a beak

To create a beak:

 dbCreateCurvedPolygon cv '("BD4" "drawing") 
   '( 
      (0   100) 
      (100 50 "arc" "ccw") 
      (200 100)
      (300 150) 
      (50  100 "arc" "ccw")
    )

Creating a tombstone with eyes

To create a tombstone with eyes, you need to create the following:

  1. Create a solid boundary.
a. Create a straight edge from (0 0) to (200 0).
b. Create a straight edge from (200 0) to (200 200).
c. Create a counter clockwise circular arc from (200 200) to (0 200) using (100 200) as the arc center.
d. Create a straight edge (0 200) to (0 0).
solid = '(
              (0   0) 
              (200 0) 
              (200 200) 
              (100 200 "arc" "ccw") 
              (0   200)
            )
  1. Create the first hole (hole1).
a. Create a counter clockwise circular arc from (50 50) to (75 75). The center is computed to create a subtended angle of 180 degree.
b. Create a counter clockwise circular arc from (75 75) to (50 50). The center is computed to create a subtended angle of 180 degree.
hole1 = '(
              (50 50 "arcCentralAngle" 180) 
              (75 75 "arcCentralAngle" 180)
)
  1. Create the second hole (hole2)
a. Create a counter clockwise circular arc from (150 150) to (175 175). The center is computed to create a subtended angle of 180 degrees.
b. Create a counter clockwise circular arc from (175 175) to (150 150). The center is computed to create a subtended angle of 180 degrees.
 hole2 = '(
              (150 150 "arcCentralAngle" 180) 
              (175 175 "arcCentralAngle" 180)
             )
  1. Create the polygon itself using all the three curves.
    dbCreateCurvedPolygon(cv '("BD4" "drawing") list(solid list(hole1 hole2)))

Related Topics

License Requirements of Virtuoso RF Solution

dbCreateCurvedPolygon

Database Access Function Argument Types


Return to top
 ⠀
X