Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/changelog.d/1675.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fixing hatched ground plane bug with grpc
76 changes: 76 additions & 0 deletions src/pyedb/grpc/database/primitive/primitive.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.

import math

from ansys.edb.core.database import ProductIdType as GrpcProductIdType
from ansys.edb.core.geometry.point_data import PointData as GrpcPointData
from ansys.edb.core.primitive.circle import Circle as GrpcCircle
Expand Down Expand Up @@ -354,6 +356,80 @@ def longest_arc(self) -> float:
len = i.length
return arc

def rotate(self, angle, center=None) -> bool:
"""Rotate polygon around a center point by an angle.

Parameters
----------
angle : float
Value of the rotation angle in degree.
center : List of float or str [x,y], optional
If None rotation is done from polygon center.

Returns
-------
bool
``True`` when successful, ``False`` when failed.
"""
if angle and hasattr(self, "polygon_data"):
if center is None:
center = self.cast().polygon_data.bounding_circle()[0]
self.cast().polygon_data = self.polygon_data.rotate(angle * math.pi / 180, center)
return True
return False

def move(self, vector) -> bool:
"""Move polygon along a vector.

Parameters
----------
vector : List of float or str [x,y].

Returns
-------
bool
``True`` when successful, ``False`` when failed.

Examples
--------
>>> edbapp = ansys.aedt.core.Edb("myproject.aedb")
>>> top_layer_polygon = [poly for poly in edbapp.modeler.polygons if poly.layer_name == "Top Layer"]
>>> for polygon in top_layer_polygon:
>>> polygon.move(vector=["2mm", "100um"])
"""
if vector and isinstance(vector, list) and len(vector) == 2:
_vector = [Value(pt) for pt in vector]
self.cast().polygon_data = self.polygon_data.move(_vector)
return True
return False

def scale(self, factor, center=None) -> bool:
"""Scales the polygon relative to a center point by a factor.

Parameters
----------
factor : float
Scaling factor.
center : List of float or str [x,y], optional
If None scaling is done from polygon center.

Returns
-------
bool
``True`` when successful, ``False`` when failed.
"""
if not isinstance(factor, str) and hasattr(self, "polygon_data"):
factor = float(factor)
if not center:
center = self.cast().polygon_data.bounding_circle()[0]
elif isinstance(center, list) and len(center) == 2:
center = GrpcPointData([Value(center[0]), Value(center[1])])
else:
self._pedb.logger.error(f"Failed to evaluate center on primitive {self.id}")
self.cast().polygon_data = self.polygon_data.scale(factor, center)
return True
return False

def subtract(self, primitives) -> list[any]:
"""Subtract active primitive with one or more primitives.

Expand Down
10 changes: 6 additions & 4 deletions src/pyedb/libraries/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -358,8 +358,10 @@ class MicroStripTechnologyStackup:
>>> stack.substrate.material.permittivity = 9.8
"""

def __init__(self, pedb):
def __init__(
self, pedb, botton_layer_name="BOT_METAL", substrate_layer_name="Substrate", top_layer_name="TOP_METAL"
):
self._pedb = pedb
self.bottom_metal = MetalLayer(pedb, name="BOT_METAL", thickness=4e-6, material="Gold")
self.substrate = DielectricLayer(pedb, name="Substrate", thickness=100e-6, material="Silicon")
self.top_metal = MetalLayer(pedb, name="TOP_METAL", thickness=4e-6, material="Gold")
self.bottom_metal = MetalLayer(pedb, name=botton_layer_name, thickness=4e-6, material="Gold")
self.substrate = DielectricLayer(pedb, name=substrate_layer_name, thickness=100e-6, material="Silicon")
self.top_metal = MetalLayer(pedb, name=top_layer_name, thickness=4e-6, material="Gold")
Loading