本文整理汇总了C++中r_delete_entry函数的典型用法代码示例。如果您正苦于以下问题:C++ r_delete_entry函数的具体用法?C++ r_delete_entry怎么用?C++ r_delete_entry使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了r_delete_entry函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: MoveElementName
/* ----------------------------------------------------------------------
* moves all names of an element to a new position
*/
static void *
MoveElementName (ElementTypePtr Element)
{
if (PCB->ElementOn && (FRONT (Element) || PCB->InvisibleObjectsOn))
{
EraseElementName (Element);
ELEMENTTEXT_LOOP (Element);
{
if (PCB->Data->name_tree[n])
r_delete_entry (PCB->Data->name_tree[n], (BoxType *)text);
MOVE_TEXT_LOWLEVEL (text, DeltaX, DeltaY);
if (PCB->Data->name_tree[n])
r_insert_entry (PCB->Data->name_tree[n], (BoxType *)text, 0);
}
END_LOOP;
DrawElementName (Element);
Draw ();
}
else
{
ELEMENTTEXT_LOOP (Element);
{
if (PCB->Data->name_tree[n])
r_delete_entry (PCB->Data->name_tree[n], (BoxType *)text);
MOVE_TEXT_LOWLEVEL (text, DeltaX, DeltaY);
if (PCB->Data->name_tree[n])
r_insert_entry (PCB->Data->name_tree[n], (BoxType *)text, 0);
}
END_LOOP;
}
return (Element);
}
示例2: FreeRotateElementLowLevel
void
FreeRotateElementLowLevel (DataType *Data, ElementType *Element,
Coord X, Coord Y,
double cosa, double sina, Angle angle)
{
/* solder side objects need a different orientation */
/* the text subroutine decides by itself if the direction
* is to be corrected
*/
#if 0
ELEMENTTEXT_LOOP (Element);
{
if (Data && Data->name_tree[n])
r_delete_entry (Data->name_tree[n], (BoxType *)text);
RotateTextLowLevel (text, X, Y, Number);
}
END_LOOP;
#endif
ELEMENTLINE_LOOP (Element);
{
free_rotate (&line->Point1.X, &line->Point1.Y, X, Y, cosa, sina);
free_rotate (&line->Point2.X, &line->Point2.Y, X, Y, cosa, sina);
SetLineBoundingBox (line);
}
END_LOOP;
PIN_LOOP (Element);
{
/* pre-delete the pins from the pin-tree before their coordinates change */
if (Data)
r_delete_entry (Data->pin_tree, (BoxType *)pin);
RestoreToPolygon (Data, PIN_TYPE, Element, pin);
free_rotate (&pin->X, &pin->Y, X, Y, cosa, sina);
SetPinBoundingBox (pin);
}
END_LOOP;
PAD_LOOP (Element);
{
/* pre-delete the pads before their coordinates change */
if (Data)
r_delete_entry (Data->pad_tree, (BoxType *)pad);
RestoreToPolygon (Data, PAD_TYPE, Element, pad);
free_rotate (&pad->Point1.X, &pad->Point1.Y, X, Y, cosa, sina);
free_rotate (&pad->Point2.X, &pad->Point2.Y, X, Y, cosa, sina);
SetLineBoundingBox ((LineType *) pad);
}
END_LOOP;
ARC_LOOP (Element);
{
free_rotate (&arc->X, &arc->Y, X, Y, cosa, sina);
arc->StartAngle = NormalizeAngle (arc->StartAngle + angle);
}
END_LOOP;
free_rotate (&Element->MarkX, &Element->MarkY, X, Y, cosa, sina);
SetElementBoundingBox (Data, Element, &PCB->Font);
ClearFromPolygon (Data, ELEMENT_TYPE, Element, Element);
}
示例3: RotateBuffer
/* ---------------------------------------------------------------------------
* rotates the contents of the pastebuffer
*/
void
RotateBuffer (BufferType *Buffer, BYTE Number)
{
/* rotate vias */
VIA_LOOP (Buffer->Data);
{
r_delete_entry (Buffer->Data->via_tree, (BoxType *)via);
ROTATE_VIA_LOWLEVEL (via, Buffer->X, Buffer->Y, Number);
SetPinBoundingBox (via);
r_insert_entry (Buffer->Data->via_tree, (BoxType *)via, 0);
}
END_LOOP;
/* elements */
ELEMENT_LOOP (Buffer->Data);
{
RotateElementLowLevel (Buffer->Data, element, Buffer->X, Buffer->Y,
Number);
}
END_LOOP;
/* all layer related objects */
ALLLINE_LOOP (Buffer->Data);
{
r_delete_entry (layer->line_tree, (BoxType *)line);
RotateLineLowLevel (line, Buffer->X, Buffer->Y, Number);
r_insert_entry (layer->line_tree, (BoxType *)line, 0);
}
ENDALL_LOOP;
ALLARC_LOOP (Buffer->Data);
{
r_delete_entry (layer->arc_tree, (BoxType *)arc);
RotateArcLowLevel (arc, Buffer->X, Buffer->Y, Number);
r_insert_entry (layer->arc_tree, (BoxType *)arc, 0);
}
ENDALL_LOOP;
ALLTEXT_LOOP (Buffer->Data);
{
r_delete_entry (layer->text_tree, (BoxType *)text);
RotateTextLowLevel (text, Buffer->X, Buffer->Y, Number);
r_insert_entry (layer->text_tree, (BoxType *)text, 0);
}
ENDALL_LOOP;
ALLPOLYGON_LOOP (Buffer->Data);
{
r_delete_entry (layer->polygon_tree, (BoxType *)polygon);
RotatePolygonLowLevel (polygon, Buffer->X, Buffer->Y, Number);
r_insert_entry (layer->polygon_tree, (BoxType *)polygon, 0);
}
ENDALL_LOOP;
/* finally the origin and the bounding box */
ROTATE (Buffer->X, Buffer->Y, Buffer->X, Buffer->Y, Number);
RotateBoxLowLevel (&Buffer->BoundingBox, Buffer->X, Buffer->Y, Number);
SetCrosshairRangeToBuffer ();
}
示例4: GetPadMemory
/* ---------------------------------------------------------------------------
* get next slot for a pad, allocates memory if necessary
*/
PadTypePtr
GetPadMemory (ElementTypePtr Element)
{
PadTypePtr pad = Element->Pad;
bool onBoard = false;
/* realloc new memory if necessary and clear it */
if (Element->PadN >= Element->PadMax)
{
if (PCB->Data->pad_tree)
{
PAD_LOOP (Element);
{
if (r_delete_entry (PCB->Data->pad_tree, (BoxType *) pad))
onBoard = true;
}
END_LOOP;
}
Element->PadMax += STEP_PAD;
pad = MyRealloc (pad, Element->PadMax * sizeof (PadType),
"GetPadMemory()");
Element->Pad = pad;
memset (pad + Element->PadN, 0, STEP_PAD * sizeof (PadType));
if (onBoard)
{
PAD_LOOP (Element);
{
r_insert_entry (PCB->Data->pad_tree, (BoxType *) pad, 0);
}
END_LOOP;
}
}
return (pad + Element->PadN++);
}
示例5: GetPinMemory
/* ---------------------------------------------------------------------------
* get next slot for a pin, allocates memory if necessary
*/
PinTypePtr
GetPinMemory (ElementTypePtr Element)
{
PinTypePtr pin = Element->Pin;
bool onBoard = false;
/* realloc new memory if necessary and clear it */
if (Element->PinN >= Element->PinMax)
{
if (PCB->Data->pin_tree)
{
PIN_LOOP (Element);
{
if (r_delete_entry (PCB->Data->pin_tree, (BoxType *) pin))
onBoard = true;
}
END_LOOP;
}
Element->PinMax += STEP_PIN;
pin = MyRealloc (pin, Element->PinMax * sizeof (PinType),
"GetPinMemory()");
Element->Pin = pin;
memset (pin + Element->PinN, 0, STEP_PIN * sizeof (PinType));
if (onBoard)
{
PIN_LOOP (Element);
{
r_insert_entry (PCB->Data->pin_tree, (BoxType *) pin, 0);
}
END_LOOP;
}
}
return (pin + Element->PinN++);
}
示例6: InsertPointIntoLine
/* ---------------------------------------------------------------------------
* inserts a point into a line
*/
static void *
InsertPointIntoLine (LayerTypePtr Layer, LineTypePtr Line)
{
LineTypePtr line;
LocationType X, Y;
if (((Line->Point1.X == InsertX) && (Line->Point1.Y == InsertY)) ||
((Line->Point2.X == InsertX) && (Line->Point2.Y == InsertY)))
return (NULL);
X = Line->Point2.X;
Y = Line->Point2.Y;
AddObjectToMoveUndoList (LINEPOINT_TYPE, Layer, Line, &Line->Point2,
InsertX - X, InsertY - Y);
EraseLine (Line);
r_delete_entry (Layer->line_tree, (BoxTypePtr) Line);
Line->Point2.X = InsertX;
Line->Point2.Y = InsertY;
SetLineBoundingBox (Line);
r_insert_entry (Layer->line_tree, (BoxTypePtr) Line, 0);
DrawLine (Layer, Line, 0);
/* we must create after playing with Line since creation may
* invalidate the line pointer
*/
if ((line = CreateDrawnLineOnLayer (Layer, InsertX, InsertY,
X, Y,
Line->Thickness, Line->Clearance,
Line->Flags)))
{
AddObjectToCreateUndoList (LINE_TYPE, Layer, line, line);
DrawLine (Layer, line, 0);
/* creation call adds it to the rtree */
}
Draw ();
return (line);
}
示例7: MoveTextToLayerLowLevel
/* ---------------------------------------------------------------------------
* moves a text object between layers; lowlevel routines
*/
static void *
MoveTextToLayerLowLevel (LayerType *Source, TextType *text,
LayerType *Destination)
{
RestoreToPolygon (PCB->Data, TEXT_TYPE, Source, text);
r_delete_entry (Source->text_tree, (BoxType *)text);
Source->Text = g_list_remove (Source->Text, text);
Source->TextN --;
Destination->Text = g_list_append (Destination->Text, text);
Destination->TextN ++;
if (GetLayerGroupNumberByNumber (solder_silk_layer) ==
GetLayerGroupNumberByPointer (Destination))
SET_FLAG (ONSOLDERFLAG, text);
else
CLEAR_FLAG (ONSOLDERFLAG, text);
/* re-calculate the bounding box (it could be mirrored now) */
SetTextBoundingBox (&PCB->Font, text);
if (!Destination->text_tree)
Destination->text_tree = r_create_tree (NULL, 0, 0);
r_insert_entry (Destination->text_tree, (BoxType *)text, 0);
ClearFromPolygon (PCB->Data, TEXT_TYPE, Destination, text);
return text;
}
示例8: MyMoveTextLowLevel
static void *
MyMoveTextLowLevel (LayerType *Layer, TextType *Text, Coord dx, Coord dy)
{
if (Layer)
r_delete_entry (Layer->text_tree, (BoxType *) Text);
MOVE_TEXT_LOWLEVEL (Text, dx, dy);
if (Layer)
r_insert_entry (Layer->text_tree, (BoxType *) Text, 0);
return Text;
}
示例9: DestroyArc
/* ---------------------------------------------------------------------------
* destroys an arc from a layer
*/
static void *
DestroyArc (LayerTypePtr Layer, ArcTypePtr Arc)
{
r_delete_entry (Layer->arc_tree, (BoxTypePtr) Arc);
Layer->Arc = g_list_remove (Layer->Arc, Arc);
Layer->ArcN --;
g_slice_free (ArcType, Arc);
return NULL;
}
示例10: DestroyVia
/* ---------------------------------------------------------------------------
* destroys a via
*/
static void *
DestroyVia (PinTypePtr Via)
{
r_delete_entry (DestroyTarget->via_tree, (BoxTypePtr) Via);
free (Via->Name);
DestroyTarget->Via = g_list_remove (DestroyTarget->Via, Via);
DestroyTarget->ViaN --;
g_slice_free (PinType, Via);
return NULL;
}
示例11: DestroyLine
/* ---------------------------------------------------------------------------
* destroys a line from a layer
*/
static void *
DestroyLine (LayerTypePtr Layer, LineTypePtr Line)
{
r_delete_entry (Layer->line_tree, (BoxTypePtr) Line);
free (Line->Number);
Layer->Line = g_list_remove (Layer->Line, Line);
Layer->LineN --;
g_slice_free (LineType, Line);
return NULL;
}
示例12: DestroyRat
/* ---------------------------------------------------------------------------
* destroys a rat
*/
static void *
DestroyRat (RatTypePtr Rat)
{
if (DestroyTarget->rat_tree)
r_delete_entry (DestroyTarget->rat_tree, &Rat->BoundingBox);
DestroyTarget->Rat = g_list_remove (DestroyTarget->Rat, Rat);
DestroyTarget->RatN --;
g_slice_free (RatType, Rat);
return NULL;
}
示例13: DestroyText
/* ---------------------------------------------------------------------------
* destroys a text from a layer
*/
static void *
DestroyText (LayerTypePtr Layer, TextTypePtr Text)
{
free (Text->TextString);
r_delete_entry (Layer->text_tree, (BoxTypePtr) Text);
Layer->Text = g_list_remove (Layer->Text, Text);
Layer->TextN --;
g_slice_free (TextType, Text);
return NULL;
}
示例14: DestroyPolygon
/* ---------------------------------------------------------------------------
* destroys a polygon from a layer
*/
static void *
DestroyPolygon (LayerTypePtr Layer, PolygonTypePtr Polygon)
{
r_delete_entry (Layer->polygon_tree, (BoxTypePtr) Polygon);
FreePolygonMemory (Polygon);
Layer->Polygon = g_list_remove (Layer->Polygon, Polygon);
Layer->PolygonN --;
g_slice_free (PolygonType, Polygon);
return NULL;
}
示例15: RemovePolygonPoint
/* ---------------------------------------------------------------------------
* removes a polygon-point from a polygon
*/
static void *
RemovePolygonPoint (LayerTypePtr Layer,
PolygonTypePtr Polygon, PointTypePtr Point)
{
Cardinal point_idx;
Cardinal i;
Cardinal contour;
Cardinal contour_start, contour_end, contour_points;
point_idx = polygon_point_idx (Polygon, Point);
contour = polygon_point_contour (Polygon, point_idx);
contour_start = (contour == 0) ? 0 : Polygon->HoleIndex[contour - 1];
contour_end = (contour == Polygon->HoleIndexN) ? Polygon->PointN :
Polygon->HoleIndex[contour];
contour_points = contour_end - contour_start;
if (contour_points <= 3)
return RemovePolygonContour (Layer, Polygon, contour);
if (Layer->On)
ErasePolygon (Polygon);
/* insert the polygon-point into the undo list */
AddObjectToRemovePointUndoList (POLYGONPOINT_TYPE, Layer, Polygon, point_idx);
r_delete_entry (Layer->polygon_tree, (BoxType *) Polygon);
/* remove point from list, keep point order */
for (i = point_idx; i < Polygon->PointN - 1; i++)
Polygon->Points[i] = Polygon->Points[i + 1];
Polygon->PointN--;
/* Shift down indices of any holes */
for (i = 0; i < Polygon->HoleIndexN; i++)
if (Polygon->HoleIndex[i] > point_idx)
Polygon->HoleIndex[i]--;
SetPolygonBoundingBox (Polygon);
r_insert_entry (Layer->polygon_tree, (BoxType *) Polygon, 0);
RemoveExcessPolygonPoints (Layer, Polygon);
InitClip (PCB->Data, Layer, Polygon);
/* redraw polygon if necessary */
if (Layer->On)
{
DrawPolygon (Layer, Polygon);
if (!Bulk)
Draw ();
}
return NULL;
}