/* --------------------------------------------------------------------------- * creates a new pin in an element */ PinTypePtr CreateNewPin (ElementTypePtr Element, LocationType X, LocationType Y, BDimension Thickness, BDimension Clearance, BDimension Mask, BDimension DrillingHole, char *Name, char *Number, FlagType Flags) { PinTypePtr pin = GetPinMemory (Element); /* copy values */ pin->X = X; pin->Y = Y; pin->Thickness = Thickness; pin->Clearance = Clearance; pin->Mask = Mask; pin->Name = STRDUP (Name); pin->Number = STRDUP (Number); pin->Flags = Flags; CLEAR_FLAG (WARNFLAG, pin); SET_FLAG (PINFLAG, pin); pin->ID = ID++; pin->Element = Element; /* * If there is no vendor drill map installed, this will simply * return DrillingHole. */ pin->DrillingHole = vendorDrillMap (DrillingHole); /* Unless we should not map drills on this element, map them! */ if (vendorIsElementMappable (Element)) { if (pin->DrillingHole < MIN_PINORVIASIZE) { Message (_ ("Did not map pin #%s (%s) drill hole because %6.2f mil is below the minimum allowed size\n"), UNKNOWN (Number), UNKNOWN (Name), 0.01 * pin->DrillingHole); pin->DrillingHole = DrillingHole; } else if (pin->DrillingHole > MAX_PINORVIASIZE) { Message (_ ("Did not map pin #%s (%s) drill hole because %6.2f mil is above the maximum allowed size\n"), UNKNOWN (Number), UNKNOWN (Name), 0.01 * pin->DrillingHole); pin->DrillingHole = DrillingHole; } else if (!TEST_FLAG (HOLEFLAG, pin) && (pin->DrillingHole > pin->Thickness - MIN_PINORVIACOPPER)) { Message (_ ("Did not map pin #%s (%s) drill hole because %6.2f mil does not leave enough copper\n"), UNKNOWN (Number), UNKNOWN (Name), 0.01 * pin->DrillingHole); pin->DrillingHole = DrillingHole; } } else { pin->DrillingHole = DrillingHole; } if (pin->DrillingHole != DrillingHole) { Message (_ ("Mapped pin drill hole to %.2f mils from %.2f mils per vendor table\n"), 0.01 * pin->DrillingHole, 0.01 * DrillingHole); } return (pin); }
/*! * \brief Creates a new pin in an element. */ PinType * CreateNewPin (ElementType *Element, Coord X, Coord Y, Coord Thickness, Coord Clearance, Coord Mask, Coord DrillingHole, char *Name, char *Number, FlagType Flags) { PinType *pin = GetPinMemory (Element); /* copy values */ pin->X = X; pin->Y = Y; pin->Thickness = Thickness; pin->Clearance = Clearance; pin->Mask = Mask; pin->Name = STRDUP (Name); pin->Number = STRDUP (Number); pin->Flags = Flags; CLEAR_FLAG (WARNFLAG, pin); SET_FLAG (PINFLAG, pin); pin->ID = ID++; pin->Element = Element; /* * If there is no vendor drill map installed, this will simply * return DrillingHole. */ pin->DrillingHole = vendorDrillMap (DrillingHole); /* Unless we should not map drills on this element, map them! */ if (vendorIsElementMappable (Element)) { if (pin->DrillingHole < MIN_PINORVIASIZE) { Message (_("%m+Did not map pin #%s (%s) drill hole because %$mS is below the minimum allowed size\n"), Settings.grid_unit->allow, UNKNOWN (Number), UNKNOWN (Name), pin->DrillingHole); pin->DrillingHole = DrillingHole; } else if (pin->DrillingHole > MAX_PINORVIASIZE) { Message (_("%m+Did not map pin #%s (%s) drill hole because %$mS is above the maximum allowed size\n"), Settings.grid_unit->allow, UNKNOWN (Number), UNKNOWN (Name), pin->DrillingHole); pin->DrillingHole = DrillingHole; } else if (!TEST_FLAG (HOLEFLAG, pin) && (pin->DrillingHole > pin->Thickness - MIN_PINORVIACOPPER)) { Message (_("%m+Did not map pin #%s (%s) drill hole because %$mS does not leave enough copper\n"), Settings.grid_unit->allow, UNKNOWN (Number), UNKNOWN (Name), pin->DrillingHole); pin->DrillingHole = DrillingHole; } } else { pin->DrillingHole = DrillingHole; } if (pin->DrillingHole != DrillingHole) { Message (_("%m+Mapped pin drill hole to %$mS from %$mS per vendor table\n"), Settings.grid_unit->allow, pin->DrillingHole, DrillingHole); } return (pin); }