bool SCH_FIELD::HitTest( const wxPoint& aPosition, int aAccuracy ) const { // Do not hit test hidden or empty fields. if( !IsVisible() || IsVoid() ) return false; EDA_RECT rect = GetBoundingBox(); rect.Inflate( aAccuracy ); return rect.Contains( aPosition ); }
void SCH_FIELD::Plot( PLOTTER* aPlotter ) { SCH_COMPONENT* parent = ( SCH_COMPONENT* ) GetParent(); wxCHECK_RET( parent != NULL && parent->Type() == SCH_COMPONENT_T, wxT( "Cannot plot field with invalid parent." ) ); COLOR4D color = GetLayerColor( GetLayer() ); if( !IsVisible() ) return; if( IsVoid() ) return; /* Calculate the text orientation, according to the component * orientation/mirror */ int orient = GetTextAngle(); if( parent->GetTransform().y1 ) // Rotate component 90 deg. { if( orient == TEXT_ANGLE_HORIZ ) orient = TEXT_ANGLE_VERT; else orient = TEXT_ANGLE_HORIZ; } /* Calculate the text justification, according to the component * orientation/mirror * this is a bit complicated due to cumulative calculations: * - numerous cases (mirrored or not, rotation) * - the DrawGraphicText function recalculate also H and H justifications * according to the text orientation. * - When a component is mirrored, the text is not mirrored and * justifications are complicated to calculate * so the more easily way is to use no justifications ( Centered text ) * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_RECT BoundaryBox = GetBoundingBox(); EDA_TEXT_HJUSTIFY_T hjustify = GR_TEXT_HJUSTIFY_CENTER; EDA_TEXT_VJUSTIFY_T vjustify = GR_TEXT_VJUSTIFY_CENTER; wxPoint textpos = BoundaryBox.Centre(); int thickness = GetPenSize(); aPlotter->Text( textpos, color, GetFullyQualifiedText(), orient, GetTextSize(), hjustify, vjustify, thickness, IsItalic(), IsBold() ); }
bool SCH_FIELD::HitTest( const EDA_RECT& aRect, bool aContained, int aAccuracy ) const { // Do not hit test hidden fields. if( !IsVisible() || IsVoid() ) return false; EDA_RECT rect = aRect; rect.Inflate( aAccuracy ); if( aContained ) return rect.Contains( GetBoundingBox() ); return rect.Intersects( GetBoundingBox() ); }
Value Convert::Format(const Value& q) const { if(IsVoid(q) || q.IsNull()) return String(); switch(q.GetType()) { case INT64_V: return IntStr64((int64)q); case INT_V: case BOOL_V: return IntStr((int)q); case DOUBLE_V: return DblStr((double)q); case DATE_V: return UPP::Format(Date(q)); case TIME_V: return UPP::Format(Time(q)); case STRING_V: case WSTRING_V: return q; } return q.ToString(); }
void EscValue::MapSet(EscValue key, EscValue value) { LTIMING("MapSet"); if(IsVoid()) SetEmptyMap(); VectorMap<EscValue, EscValue>& m = CloneMap(); int q = m.Find(key); if(q >= 0) { if(value.IsVoid()) { m.Unlink(q); map->count--; } else m[q] = value; } else if(!value.IsVoid()) { map->count++; m.Add(key, value); } }
void SCH_FIELD::Draw( EDA_DRAW_PANEL* panel, wxDC* DC, const wxPoint& offset, GR_DRAWMODE DrawMode, EDA_COLOR_T Color ) { int orient; EDA_COLOR_T color; wxPoint textpos; SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; int LineWidth = m_Thickness; if( LineWidth == 0 ) // Use default values for pen size { if( m_Bold ) LineWidth = GetPenSizeForBold( m_Size.x ); else LineWidth = GetDefaultLineThickness(); } // Clip pen size for small texts: LineWidth = Clamp_Text_PenSize( LineWidth, m_Size, m_Bold ); if( ((m_Attributs & TEXT_NO_VISIBLE) && !m_forceVisible) || IsVoid() ) return; GRSetDrawMode( DC, DrawMode ); // Calculate the text orientation according to the component orientation. orient = m_Orient; if( parentComponent->GetTransform().y1 ) // Rotate component 90 degrees. { if( orient == TEXT_ORIENT_HORIZ ) orient = TEXT_ORIENT_VERT; else orient = TEXT_ORIENT_HORIZ; } /* Calculate the text justification, according to the component * orientation/mirror this is a bit complicated due to cumulative * calculations: * - numerous cases (mirrored or not, rotation) * - the DrawGraphicText function recalculate also H and H justifications * according to the text orientation. * - When a component is mirrored, the text is not mirrored and * justifications are complicated to calculate * so the more easily way is to use no justifications ( Centered text ) * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_RECT boundaryBox = GetBoundingBox(); textpos = boundaryBox.Centre(); if( m_forceVisible ) { color = DARKGRAY; } else { if( m_id == REFERENCE ) color = ReturnLayerColor( LAYER_REFERENCEPART ); else if( m_id == VALUE ) color = ReturnLayerColor( LAYER_VALUEPART ); else color = ReturnLayerColor( LAYER_FIELDS ); } DrawGraphicText( panel, DC, textpos, color, GetText(), orient, m_Size, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, LineWidth, m_Italic, m_Bold ); /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 // Draw boundary box: GRRect( panel->GetClipBox(), DC, boundaryBox, 0, BROWN ); // Draw the text anchor point /* Calculate the text position, according to the component * orientation/mirror */ textpos = m_Pos - parentComponent->GetPosition(); textpos = parentComponent->GetScreenCoord( textpos ); textpos += parentComponent->GetPosition(); const int len = 10; GRLine( panel->GetClipBox(), DC, textpos.x - len, textpos.y, textpos.x + len, textpos.y, 0, BLUE ); GRLine( panel->GetClipBox(), DC, textpos.x, textpos.y - len, textpos.x, textpos.y + len, 0, BLUE ); #endif }
void SCH_FIELD::Draw( EDA_DRAW_PANEL* aPanel, wxDC* aDC, const wxPoint& aOffset, GR_DRAWMODE aDrawMode, COLOR4D aColor ) { int orient; COLOR4D color; wxPoint textpos; SCH_COMPONENT* parentComponent = (SCH_COMPONENT*) m_Parent; int lineWidth = GetThickness(); if( lineWidth == 0 ) // Use default values for pen size { if( IsBold() ) lineWidth = GetPenSizeForBold( GetTextWidth() ); else lineWidth = GetDefaultLineThickness(); } // Clip pen size for small texts: lineWidth = Clamp_Text_PenSize( lineWidth, GetTextSize(), IsBold() ); if( ( !IsVisible() && !m_forceVisible) || IsVoid() ) return; GRSetDrawMode( aDC, aDrawMode ); // Calculate the text orientation according to the component orientation. orient = GetTextAngle(); if( parentComponent->GetTransform().y1 ) // Rotate component 90 degrees. { if( orient == TEXT_ANGLE_HORIZ ) orient = TEXT_ANGLE_VERT; else orient = TEXT_ANGLE_HORIZ; } /* Calculate the text justification, according to the component * orientation/mirror this is a bit complicated due to cumulative * calculations: * - numerous cases (mirrored or not, rotation) * - the DrawGraphicText function recalculate also H and H justifications * according to the text orientation. * - When a component is mirrored, the text is not mirrored and * justifications are complicated to calculate * so the more easily way is to use no justifications ( Centered text ) * and use GetBoundaryBox to know the text coordinate considered as centered */ EDA_RECT boundaryBox = GetBoundingBox(); textpos = boundaryBox.Centre() + aOffset; if( m_forceVisible ) { color = COLOR4D( DARKGRAY ); } else { if( m_id == REFERENCE ) color = GetLayerColor( LAYER_REFERENCEPART ); else if( m_id == VALUE ) color = GetLayerColor( LAYER_VALUEPART ); else color = GetLayerColor( LAYER_FIELDS ); } EDA_RECT* clipbox = aPanel ? aPanel->GetClipBox() : NULL; DrawGraphicText( clipbox, aDC, textpos, color, GetFullyQualifiedText(), orient, GetTextSize(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, lineWidth, IsItalic(), IsBold() ); // While moving: don't loose visual contact to which component this label belongs. if ( IsWireImage() ) { const wxPoint origin = parentComponent->GetPosition(); textpos = GetTextPos() - origin; textpos = parentComponent->GetScreenCoord( textpos ); textpos += parentComponent->GetPosition(); GRLine( clipbox, aDC, origin, textpos, 2, DARKGRAY ); } /* Enable this to draw the bounding box around the text field to validate * the bounding box calculations. */ #if 0 // Draw boundary box: GRRect( aPanel->GetClipBox(), aDC, boundaryBox, 0, BROWN ); // Draw the text anchor point /* Calculate the text position, according to the component * orientation/mirror */ textpos = m_Pos - parentComponent->GetPosition(); textpos = parentComponent->GetScreenCoord( textpos ); textpos += parentComponent->GetPosition(); const int len = 10; GRLine( clipbox, aDC, textpos.x - len, textpos.y, textpos.x + len, textpos.y, 0, BLUE ); GRLine( clipbox, aDC, textpos.x, textpos.y - len, textpos.x, textpos.y + len, 0, BLUE ); #endif }