/* --------------------------------------------------------------------------- * creates a new via */ PinTypePtr CreateNewVia (DataTypePtr Data, LocationType X, LocationType Y, BDimension Thickness, BDimension Clearance, BDimension Mask, BDimension DrillingHole, char *Name, FlagType Flags) { PinTypePtr Via; if (!be_lenient) { VIA_LOOP (Data); { if (SQUARE (via->X - X) + SQUARE (via->Y - Y) <= SQUARE (via->DrillingHole / 2 + DrillingHole / 2)) { Message (_("Dropping via at (%d, %d) because it's hole would overlap with the via " "at (%d, %d)\n"), X/100, Y/100, via->X/100, via->Y/100); return (NULL); /* don't allow via stacking */ } } END_LOOP; } Via = GetViaMemory (Data); if (!Via) return (Via); /* copy values */ Via->X = X; Via->Y = Y; Via->Thickness = Thickness; Via->Clearance = Clearance; Via->Mask = Mask; Via->DrillingHole = vendorDrillMap (DrillingHole); if (Via->DrillingHole != DrillingHole) { Message (_ ("Mapped via drill hole to %.2f mils from %.2f mils per vendor table\n"), 0.01 * Via->DrillingHole, 0.01 * DrillingHole); } Via->Name = STRDUP (Name); Via->Flags = Flags; CLEAR_FLAG (WARNFLAG, Via); SET_FLAG (VIAFLAG, Via); Via->ID = ID++; /* * don't complain about MIN_PINORVIACOPPER on a mounting hole (pure * hole) */ if (!TEST_FLAG (HOLEFLAG, Via) && (Via->Thickness < Via->DrillingHole + MIN_PINORVIACOPPER)) { Via->Thickness = Via->DrillingHole + MIN_PINORVIACOPPER; Message (_("Increased via thickness to %.2f mils to allow enough copper" " at (%.2f,%.2f).\n"), 0.01 * Via->Thickness, 0.01 * Via->X, 0.01 * Via->Y); } SetPinBoundingBox (Via); if (!Data->via_tree) Data->via_tree = r_create_tree (NULL, 0, 0); r_insert_entry (Data->via_tree, (BoxTypePtr) Via, 0); return (Via); }
/*! * \brief Creates a new via. */ PinType * CreateNewVia (DataType *Data, Coord X, Coord Y, Coord Thickness, Coord Clearance, Coord Mask, Coord DrillingHole, char *Name, FlagType Flags) { PinType *Via; if (!be_lenient) { VIA_LOOP (Data); { if (Distance (X, Y, via->X, via->Y) <= via->DrillingHole / 2 + DrillingHole / 2) { Message (_("%m+Dropping via at %$mD because it's hole would overlap with the via " "at %$mD\n"), Settings.grid_unit->allow, X, Y, via->X, via->Y); return (NULL); /* don't allow via stacking */ } } END_LOOP; } Via = GetViaMemory (Data); if (!Via) return (Via); /* copy values */ Via->X = X; Via->Y = Y; Via->Thickness = Thickness; Via->Clearance = Clearance; Via->Mask = Mask; Via->DrillingHole = vendorDrillMap (DrillingHole); if (Via->DrillingHole != DrillingHole) { Message (_("%m+Mapped via drill hole to %$mS from %$mS per vendor table\n"), Settings.grid_unit->allow, Via->DrillingHole, DrillingHole); } Via->Name = STRDUP (Name); Via->Flags = Flags; CLEAR_FLAG (WARNFLAG, Via); SET_FLAG (VIAFLAG, Via); Via->ID = ID++; /* * don't complain about MIN_PINORVIACOPPER on a mounting hole (pure * hole) */ if (!TEST_FLAG (HOLEFLAG, Via) && (Via->Thickness < Via->DrillingHole + MIN_PINORVIACOPPER)) { Via->Thickness = Via->DrillingHole + MIN_PINORVIACOPPER; Message (_("%m+Increased via thickness to %$mS to allow enough copper" " at %$mD.\n"), Settings.grid_unit->allow, Via->Thickness, Via->X, Via->Y); } SetPinBoundingBox (Via); if (!Data->via_tree) Data->via_tree = r_create_tree (NULL, 0, 0); r_insert_entry (Data->via_tree, (BoxType *) Via, 0); return (Via); }