Fix SWIG wrapper for AddPrimitive

Fixes https://gitlab.com/kicad/code/kicad/-/issues/17676


(cherry picked from commit c1e7668d80)
This commit is contained in:
Jon Evans 2024-04-04 23:09:05 -04:00
parent 941420abed
commit 8b5c292397
1 changed files with 28 additions and 11 deletions

View File

@ -1,4 +1,4 @@
%rename(AddPrimitiveShape) PAD::AddPrimitive;
%include pad_shapes.h
%include pad.h
@ -36,24 +36,41 @@ const int PAD_SHAPE_RECT = (const int)PAD_SHAPE::RECTANGLE;
def GetName(self):
return self.GetNumber()
# AddPrimitive() is the old name for D_PAD::AddPrimitivePoly(),
# PAD::AddPrimitiveSegment(), PAD::AddPrimitiveCircle(),
# PAD::AddPrimitiveArc(), PAD::AddPrimitiveCurve()
# define it for compatibility
# AddPrimitive() used to be multiple functions on the C++ side and this single Python function
# was made to maintain compatibility with an even older version of the PAD class that had a
# single function. Now we're back to a single function, but different, and Python scripts
# have gotten used to this API, so keep compatibility with it
def AddPrimitive(self, *args):
if len(args) == 2:
return self.AddPrimitivePoly(*args, True)
elif len(args) == 3:
if type(args[1] in [wxPoint,wxSize]):
return self.AddPrimitiveSegment(*args)
if type(args[1] in [wxPoint,wxSize,VECTOR2I]):
s = PCB_SHAPE(None, SHAPE_T_SEGMENT)
s.SetStart(args[0])
s.SetEnd(args[1])
s.SetWidth(args[2])
else:
return self.AddPrimitiveCircle(*args)
s = PCB_SHAPE(None, SHAPE_T_CIRCLE)
s.SetCenter(args[0])
s.SetRadius(args[1])
s.SetWidth(args[2])
elif len(args) == 4:
return self.AddPrimitiveArc(*args)
s = PCB_SHAPE(None, SHAPE_T_ARC)
s.SetCenter(args[0])
s.SetStart(args[1])
s.SetArcAngleAndEnd(args[2])
s.SetWidth(args[3])
elif len(args) == 5:
return self.AddPrimitiveCurve(*args)
s = PCB_SHAPE(None, SHAPE_T_BEZIER)
s.SetStart(args[0])
s.SetEnd(args[1])
s.SetBezierC1(args[2])
s.SetBezierC2(args[3])
s.SetWidth(args[4])
else:
raise TypeError("Arguments not recognized.")
raise TypeError(f"Arguments not recognized; expected 2-5 args, got {len(args)}")
self.AddPrimitiveShape(s)
# GetCustomShapeAsPolygon() is the old accessor to get custom shapes
def GetCustomShapeAsPolygon(self, layer=UNDEFINED_LAYER):