Ejemplo n.º 1
0
void ChangePCBSize( BDimension Width, BDimension Height )
{
  int ebx;
  int esi;
  int edi;
  PCB->MaxWidth = Width;
  PCB->MaxHeight = Height;
  if ( Settings.Mode == 5 )
    SetCrosshairRange( Buffers[ Settings.BufferNumber ].X - Buffers[ Settings.BufferNumber ].BoundingBox.X1, Buffers[ Settings.BufferNumber ].Y - Buffers[ Settings.BufferNumber ].BoundingBox.Y1, (unsigned char)( Width < 0 ) ? Width + ( Buffers[ Settings.BufferNumber ].X - Buffers[ Settings.BufferNumber ].BoundingBox.X2 ) : 0, (unsigned char)( Height < 0 ) ? Height + ( Buffers[ Settings.BufferNumber ].Y - Buffers[ Settings.BufferNumber ].BoundingBox.Y2 ) : 0 );
    Width = "PCBChanged";
  else
Ejemplo n.º 2
0
/* ---------------------------------------------------------------------------
 * sets the crosshair range to the current buffer extents
 */
void
SetCrosshairRangeToBuffer (void) {
    if (Settings.Mode == PASTEBUFFER_MODE) {
        SetBufferBoundingBox (PASTEBUFFER);
        SetCrosshairRange (PASTEBUFFER->X - PASTEBUFFER->BoundingBox.X1,
                           PASTEBUFFER->Y - PASTEBUFFER->BoundingBox.Y1,
                           PCB->MaxWidth -
                           (PASTEBUFFER->BoundingBox.X2 - PASTEBUFFER->X),
                           PCB->MaxHeight -
                           (PASTEBUFFER->BoundingBox.Y2 - PASTEBUFFER->Y));
    }
}
Ejemplo n.º 3
0
Archivo: set.c Proyecto: bert/pcb-rnd
/* ---------------------------------------------------------------------------
 * set a new mode and update X cursor
 */
void
SetMode (int Mode)
{
  static bool recursing = false;
  /* protect the cursor while changing the mode
   * perform some additional stuff depending on the new mode
   * reset 'state' of attached objects
   */
  if (recursing)
    return;
  recursing = true;
  notify_crosshair_change (false);
  addedLines = 0;
  Crosshair.AttachedObject.Type = NO_TYPE;
  Crosshair.AttachedObject.State = STATE_FIRST;
  Crosshair.AttachedPolygon.PointN = 0;
  if (PCB->RatDraw)
    {
      if (Mode == ARC_MODE || Mode == RECTANGLE_MODE ||
	  Mode == VIA_MODE || Mode == POLYGON_MODE ||
	  Mode == POLYGONHOLE_MODE ||
	  Mode == TEXT_MODE || Mode == INSERTPOINT_MODE ||
	  Mode == THERMAL_MODE)
	{
	  Message (_("That mode is NOT allowed when drawing ratlines!\n"));
	  Mode = NO_MODE;
	}
    }
  if (Settings.Mode == LINE_MODE && Mode == ARC_MODE &&
      Crosshair.AttachedLine.State != STATE_FIRST)
    {
      Crosshair.AttachedLine.State = STATE_FIRST;
      Crosshair.AttachedBox.State = STATE_SECOND;
      Crosshair.AttachedBox.Point1.X = Crosshair.AttachedBox.Point2.X =
	Crosshair.AttachedLine.Point1.X;
      Crosshair.AttachedBox.Point1.Y = Crosshair.AttachedBox.Point2.Y =
	Crosshair.AttachedLine.Point1.Y;
      AdjustAttachedObjects ();
    }
  else if (Settings.Mode == ARC_MODE && Mode == LINE_MODE &&
	   Crosshair.AttachedBox.State != STATE_FIRST)
    {
      Crosshair.AttachedBox.State = STATE_FIRST;
      Crosshair.AttachedLine.State = STATE_SECOND;
      Crosshair.AttachedLine.Point1.X = Crosshair.AttachedLine.Point2.X =
	Crosshair.AttachedBox.Point1.X;
      Crosshair.AttachedLine.Point1.Y = Crosshair.AttachedLine.Point2.Y =
	Crosshair.AttachedBox.Point1.Y;
      Settings.Mode = Mode;
      AdjustAttachedObjects ();
    }
  else
    {
      if (Settings.Mode == ARC_MODE || Settings.Mode == LINE_MODE)
	SetLocalRef (0, 0, false);
      Crosshair.AttachedBox.State = STATE_FIRST;
      Crosshair.AttachedLine.State = STATE_FIRST;
      if (Mode == LINE_MODE && TEST_FLAG (AUTODRCFLAG, PCB))
	{
	  if (ResetConnections (true))
	    {
	      IncrementUndoSerialNumber ();
	      Draw ();
	    }
	}
    }

  Settings.Mode = Mode;

  if (Mode == PASTEBUFFER_MODE)
    /* do an update on the crosshair range */
    SetCrosshairRangeToBuffer ();
  else
    SetCrosshairRange (0, 0, PCB->MaxWidth, PCB->MaxHeight);

  recursing = false;

  /* force a crosshair grid update because the valid range
   * may have changed
   */
  MoveCrosshairRelative (0, 0);
  notify_crosshair_change (true);
}