本文整理汇总了C++中GetDesignSettings函数的典型用法代码示例。如果您正苦于以下问题:C++ GetDesignSettings函数的具体用法?C++ GetDesignSettings怎么用?C++ GetDesignSettings使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetDesignSettings函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: GetBoard
void FOOTPRINT_EDIT_FRAME::Edit_Edge_Width( EDGE_MODULE* aEdge )
{
MODULE* module = GetBoard()->m_Modules;
SaveCopyInUndoList( module, UR_CHANGED );
if( aEdge == NULL )
{
for( BOARD_ITEM *item = module->GraphicalItemsList(); item; item = item->Next() )
{
aEdge = dyn_cast<EDGE_MODULE*>( item );
if( aEdge )
aEdge->SetWidth( GetDesignSettings().GetLineThickness( aEdge->GetLayer() ) );
}
}
else
{
aEdge->SetWidth( GetDesignSettings().GetLineThickness( aEdge->GetLayer() ) );
}
OnModify();
module->CalculateBoundingBox();
module->SetLastEditTime();
}
开发者ID:johnbeard,项目名称:kicad,代码行数:25,代码来源:edgemod.cpp
示例2: dlg
MODULE* PCB_BASE_FRAME::Create_1_Module( const wxString& aModuleName )
{
MODULE* module;
wxString moduleName;
wxPoint newpos;
moduleName = aModuleName;
// Ask for the new module reference
if( moduleName.IsEmpty() )
{
wxTextEntryDialog dlg( this, FMT_MOD_REF, FMT_MOD_CREATE, moduleName );
if( dlg.ShowModal() != wxID_OK )
return NULL; //Aborted by user
moduleName = dlg.GetValue();
}
moduleName.Trim( true );
moduleName.Trim( false );
if( moduleName.IsEmpty( ) )
{
DisplayInfoMessage( this, FMT_NO_REF_ABORTED );
return NULL;
}
// Creates the new module and add it to the head of the linked list of modules
module = new MODULE( GetBoard() );
GetBoard()->Add( module );
// Update parameters: position, timestamp ...
newpos = GetScreen()->GetCrossHairPosition();
module->SetPosition( newpos );
module->SetLastEditTime();
// Update its name in lib
module->m_LibRef = moduleName;
// Update reference:
module->m_Reference->m_Text = moduleName;
module->m_Reference->SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Reference->SetSize( GetDesignSettings().m_ModuleTextSize );
// Set the value field to a default value
module->m_Value->m_Text = wxT( "VAL**" );
module->m_Value->SetThickness( GetDesignSettings().m_ModuleTextWidth );
module->m_Value->SetSize( GetDesignSettings().m_ModuleTextSize );
module->SetPosition( wxPoint( 0, 0 ) );
SetMsgPanel( module );
return module;
}
开发者ID:james-sakalaukus,项目名称:kicad,代码行数:55,代码来源:librairi.cpp
示例3: wxSize
wxSize D_PAD::GetSolderPasteMargin() const
{
// The pad inherits the margin only to calculate a default shape,
// therefore only if it is also a copper layer.
// Pads defined only on mask layers (and perhaps on other tech layers) use the shape
// defined by the pad settings only
bool isOnCopperLayer = ( m_layerMask & LSET::AllCuMask() ).any();
if( !isOnCopperLayer )
return wxSize( 0, 0 );
int margin = m_LocalSolderPasteMargin;
double mratio = m_LocalSolderPasteMarginRatio;
MODULE* module = GetParent();
if( module )
{
if( margin == 0 )
margin = module->GetLocalSolderPasteMargin();
auto brd = GetBoard();
if( margin == 0 && brd )
{
margin = brd->GetDesignSettings().m_SolderPasteMargin;
}
if( mratio == 0.0 )
mratio = module->GetLocalSolderPasteMarginRatio();
if( mratio == 0.0 && brd )
{
mratio = brd->GetDesignSettings().m_SolderPasteMarginRatio;
}
}
wxSize pad_margin;
pad_margin.x = margin + KiROUND( m_Size.x * mratio );
pad_margin.y = margin + KiROUND( m_Size.y * mratio );
// ensure mask have a size always >= 0
if( pad_margin.x < -m_Size.x / 2 )
pad_margin.x = -m_Size.x / 2;
if( pad_margin.y < -m_Size.y / 2 )
pad_margin.y = -m_Size.y / 2;
return pad_margin;
}
开发者ID:KiCad,项目名称:kicad-source-mirror,代码行数:50,代码来源:class_pad.cpp
示例4: GetBoard
void ZONE_CONTAINER::TransformSolidAreasShapesToPolygonSet(
SHAPE_POLY_SET& aCornerBuffer, int aError ) const
{
if( GetFilledPolysList().IsEmpty() )
return;
// add filled areas polygons
aCornerBuffer.Append( m_FilledPolysList );
auto board = GetBoard();
int maxError = ARC_HIGH_DEF;
if( board )
maxError = board->GetDesignSettings().m_MaxError;
// add filled areas outlines, which are drawn with thick lines
for( int i = 0; i < m_FilledPolysList.OutlineCount(); i++ )
{
const SHAPE_LINE_CHAIN& path = m_FilledPolysList.COutline( i );
for( int j = 0; j < path.PointCount(); j++ )
{
const VECTOR2I& a = path.CPoint( j );
const VECTOR2I& b = path.CPoint( j + 1 );
TransformRoundedEndsSegmentToPolygon( aCornerBuffer, wxPoint( a.x, a.y ),
wxPoint( b.x, b.y ), maxError, GetMinThickness() );
}
}
}
开发者ID:KiCad,项目名称:kicad-source-mirror,代码行数:29,代码来源:board_items_to_polygon_shape_transform.cpp
示例5: GetDesignSettings
/* Initialize the drawing of a segment of type other than trace.
*/
DRAWSEGMENT* PCB_EDIT_FRAME::Begin_DrawSegment( DRAWSEGMENT* Segment, STROKE_T shape, wxDC* DC )
{
int lineWidth;
DRAWSEGMENT* DrawItem;
lineWidth = GetDesignSettings().GetLineThickness( GetActiveLayer() );
if( Segment == NULL ) // Create new segment.
{
SetCurItem( Segment = new DRAWSEGMENT( GetBoard() ) );
Segment->SetFlags( IS_NEW );
Segment->SetLayer( GetActiveLayer() );
Segment->SetWidth( lineWidth );
Segment->SetShape( shape );
Segment->SetAngle( 900 );
Segment->SetStart( GetCrossHairPosition() );
Segment->SetEnd( GetCrossHairPosition() );
m_canvas->SetMouseCapture( DrawSegment, Abort_EditEdge );
}
else
{
// The ending point coordinate Segment->m_End was updated by the function
// DrawSegment() called on a move mouse event during the segment creation
if( Segment->GetStart() != Segment->GetEnd() )
{
if( Segment->GetShape() == S_SEGMENT )
{
SaveCopyInUndoList( Segment, UR_NEW );
GetBoard()->Add( Segment );
OnModify();
Segment->ClearFlags();
Segment->Draw( m_canvas, DC, GR_OR );
DrawItem = Segment;
SetCurItem( Segment = new DRAWSEGMENT( GetBoard() ) );
Segment->SetFlags( IS_NEW );
Segment->SetLayer( DrawItem->GetLayer() );
Segment->SetWidth( lineWidth );
Segment->SetShape( DrawItem->GetShape() );
Segment->SetType( DrawItem->GetType() );
Segment->SetAngle( DrawItem->GetAngle() );
Segment->SetStart( DrawItem->GetEnd() );
Segment->SetEnd( DrawItem->GetEnd() );
DrawSegment( m_canvas, DC, wxDefaultPosition, false );
}
else
{
End_Edge( Segment, DC );
Segment = NULL;
}
}
}
return Segment;
}
开发者ID:johnbeard,项目名称:kicad,代码行数:61,代码来源:editedge.cpp
示例6: GetDesignSettings
void PCB_EDIT_FRAME::OnUpdateSelectTrackWidth( wxUpdateUIEvent& aEvent )
{
if( aEvent.GetId() == ID_AUX_TOOLBAR_PCB_TRACK_WIDTH )
{
if( m_SelTrackWidthBox->GetSelection() != (int) GetDesignSettings().GetTrackWidthIndex() )
m_SelTrackWidthBox->SetSelection( GetDesignSettings().GetTrackWidthIndex() );
}
else
{
bool check = ( ( ( ID_POPUP_PCB_SELECT_WIDTH1 +
(int) GetDesignSettings().GetTrackWidthIndex() ) == aEvent.GetId() ) &&
!GetDesignSettings().m_UseConnectedTrackWidth &&
!GetDesignSettings().UseCustomTrackViaSize() );
aEvent.Check( check );
}
}
开发者ID:UIKit0,项目名称:kicad-source-mirror,代码行数:17,代码来源:toolbars_update_user_interface.cpp
示例7: D_PAD
/* Add a new pad to aModule.
*/
void PCB_BASE_FRAME::AddPad( MODULE* aModule, bool draw )
{
m_Pcb->m_Status_Pcb = 0;
aModule->SetLastEditTime();
D_PAD* pad = new D_PAD( aModule );
// Add the new pad to end of the module pad list.
aModule->Pads().PushBack( pad );
// Update the pad properties,
// and keep NETINFO_LIST::ORPHANED as net info
// which is the default when nets cannot be handled.
Import_Pad_Settings( pad, false );
pad->SetPosition( GetCrossHairPosition() );
// Set the relative pad position
// ( pad position for module orient, 0, and relative to the module position)
wxPoint pos0 = pad->GetPosition() - aModule->GetPosition();
RotatePoint( &pos0, -aModule->GetOrientation() );
pad->SetPos0( pos0 );
/* NPTH pads take empty pad number (since they can't be connected),
* other pads get incremented from the last one edited */
wxString padName;
if( pad->GetAttribute() != PAD_ATTRIB_HOLE_NOT_PLATED )
{
padName = GetNextPadName( GetDesignSettings()
.m_Pad_Master.GetPadName() );
}
pad->SetPadName( padName );
GetDesignSettings().m_Pad_Master.SetPadName( padName );
aModule->CalculateBoundingBox();
SetMsgPanel( pad );
if( draw )
m_canvas->RefreshDrawingRect( aModule->GetBoundingBox() );
}
开发者ID:khaterahmohammadi,项目名称:kicad-source-mirror,代码行数:45,代码来源:pad_edition_functions.cpp
示例8: GetDesignSettings
void PCB_BASE_FRAME::ResetTextSize( BOARD_ITEM* aItem, wxDC* aDC )
{
wxSize newSize;
int newThickness;
if( aItem->Type() == PCB_TEXT_T )
{
newSize = GetDesignSettings().m_PcbTextSize;
newThickness = GetDesignSettings().m_PcbTextWidth;
TEXTE_PCB* text = static_cast<TEXTE_PCB*>( aItem );
// Exit if there's nothing to do
if( text->GetTextSize() == newSize && text->GetThickness() == newThickness )
return;
SaveCopyInUndoList( text, UR_CHANGED );
text->SetTextSize( newSize );
text->SetThickness( newThickness );
}
else if( aItem->Type() == PCB_MODULE_TEXT_T )
{
newSize = GetDesignSettings().m_ModuleTextSize;
newThickness = GetDesignSettings().m_ModuleTextWidth;
TEXTE_MODULE* text = static_cast<TEXTE_MODULE*>( aItem );
// Exit if there's nothing to do
if( text->GetTextSize() == newSize && text->GetThickness() == newThickness )
return;
SaveCopyInUndoList( text->GetParent(), UR_CHANGED );
text->SetTextSize( newSize );
text->SetThickness( newThickness );
}
else
return;
if( aDC )
m_canvas->Refresh();
OnModify();
}
开发者ID:AlexanderBrevig,项目名称:kicad-source-mirror,代码行数:42,代码来源:edtxtmod.cpp
示例9: GetDesignSettings
bool PCB_EDIT_FRAME::SetCurrentNetClass( const wxString& aNetClassName )
{
bool change = GetDesignSettings().SetCurrentNetClass( aNetClassName );
if( change )
{
ReCreateAuxiliaryToolbar();
}
return change;
}
开发者ID:khaterahmohammadi,项目名称:kicad-source-mirror,代码行数:11,代码来源:pcbframe.cpp
示例10: SetMsgPanel
/*
* Exports the current pad settings to board design settings.
*/
void PCB_BASE_FRAME::Export_Pad_Settings( D_PAD* aPad )
{
if( aPad == NULL )
return;
SetMsgPanel( aPad );
D_PAD& masterPad = GetDesignSettings().m_Pad_Master;
masterPad.ImportSettingsFromMaster( *aPad );
}
开发者ID:johnbeard,项目名称:kicad,代码行数:14,代码来源:pad_edit_functions.cpp
示例11: GetDesignSettings
/* Imports the board design settings to aPad
* - The position, names, and keys are not modifed.
*/
void PCB_BASE_FRAME::Import_Pad_Settings( D_PAD* aPad, bool aDraw )
{
if( aDraw )
{
aPad->SetFlags( DO_NOT_DRAW );
m_canvas->RefreshDrawingRect( aPad->GetBoundingBox() );
aPad->ClearFlags( DO_NOT_DRAW );
}
D_PAD& mp = GetDesignSettings().m_Pad_Master;
aPad->SetShape( mp.GetShape() );
aPad->SetLayerSet( mp.GetLayerSet() );
aPad->SetAttribute( mp.GetAttribute() );
aPad->SetOrientation( mp.GetOrientation() + aPad->GetParent()->GetOrientation() );
aPad->SetSize( mp.GetSize() );
aPad->SetDelta( wxSize( 0, 0 ) );
aPad->SetOffset( mp.GetOffset() );
aPad->SetDrillSize( mp.GetDrillSize() );
aPad->SetDrillShape( mp.GetDrillShape() );
switch( mp.GetShape() )
{
case PAD_TRAPEZOID:
aPad->SetDelta( mp.GetDelta() );
break;
case PAD_CIRCLE:
// ensure size.y == size.x
aPad->SetSize( wxSize( aPad->GetSize().x, aPad->GetSize().x ) );
break;
default:
;
}
switch( mp.GetAttribute() )
{
case PAD_SMD:
case PAD_CONN:
aPad->SetDrillSize( wxSize( 0, 0 ) );
aPad->SetOffset( wxPoint( 0, 0 ) );
break;
default:
;
}
if( aDraw )
m_canvas->RefreshDrawingRect( aPad->GetBoundingBox() );
aPad->GetParent()->SetLastEditTime();
OnModify();
}
开发者ID:Elphel,项目名称:kicad-source-mirror,代码行数:57,代码来源:pad_edition_functions.cpp
示例12: StringFromValue
void FOOTPRINT_EDIT_FRAME::Enter_Edge_Width( EDGE_MODULE* aEdge )
{
wxString buffer;
buffer = StringFromValue( g_UserUnit, GetDesignSettings().m_ModuleSegmentWidth );
wxTextEntryDialog dlg( this, _( "New Width:" ), _( "Edge Width" ), buffer );
if( dlg.ShowModal() != wxID_OK )
return; // canceled by user
buffer = dlg.GetValue( );
GetDesignSettings().m_ModuleSegmentWidth = ValueFromString( g_UserUnit, buffer );
if( aEdge )
{
MODULE* module = GetBoard()->m_Modules;
aEdge->SetWidth( GetDesignSettings().m_ModuleSegmentWidth );
module->CalculateBoundingBox();
OnModify();
}
}
开发者ID:AlexanderBrevig,项目名称:kicad-source-mirror,代码行数:21,代码来源:edgemod.cpp
示例13: GetDesignSettings
void PCB_EDIT_FRAME::updateViaSizeSelectBox()
{
if( m_SelViaSizeBox == NULL )
return;
wxString msg;
m_SelViaSizeBox->Clear();
bool mmFirst = g_UserUnit != INCHES;
for( unsigned ii = 0; ii < GetDesignSettings().m_ViasDimensionsList.size(); ii++ )
{
int diam = GetDesignSettings().m_ViasDimensionsList[ii].m_Diameter;
double valueMils = To_User_Unit( INCHES, diam ) * 1000;
double value_mm = To_User_Unit( MILLIMETRES, diam );
if( mmFirst )
msg.Printf( _( "Via: %.2f mm (%.1f mils)" ),
value_mm, valueMils );
else
msg.Printf( _( "Via: %.1f mils (%.2f mm)" ),
valueMils, value_mm );
int hole = GetDesignSettings().m_ViasDimensionsList[ii].m_Drill;
if( hole )
{
msg << wxT("/ ");
wxString hole_str;
valueMils = To_User_Unit( INCHES, hole ) * 1000;
value_mm = To_User_Unit( MILLIMETRES, hole );
if( mmFirst )
hole_str.Printf( _( "%.2f mm (%.1f mils)" ),
value_mm, valueMils );
else
hole_str.Printf( _( "%.1f mils (%.2f mm)" ),
valueMils, value_mm );
msg += hole_str;
}
// Mark the netclass via size value (the first in list)
if( ii == 0 )
msg << wxT( " *" );
m_SelViaSizeBox->Append( msg );
}
if( GetDesignSettings().GetViaSizeIndex() >= GetDesignSettings().m_ViasDimensionsList.size() )
GetDesignSettings().SetViaSizeIndex( 0 );
m_SelViaSizeBox->SetSelection( GetDesignSettings().GetViaSizeIndex() );
}
开发者ID:reportingsjr,项目名称:kicad-source-mirror,代码行数:55,代码来源:tool_pcb.cpp
示例14: wxConfigLoadSetups
void FOOTPRINT_EDIT_FRAME::LoadSettings( wxConfigBase* aCfg )
{
PCB_BASE_FRAME::LoadSettings( aCfg );
wxConfigLoadSetups( aCfg, GetConfigurationSettings() );
// Ensure some params are valid
BOARD_DESIGN_SETTINGS& settings = GetDesignSettings();
// Usually, graphic items are drawn on F_SilkS or F_Fab layer
// Force these layers if not default
if( ( settings.m_RefDefaultlayer != F_SilkS ) && ( settings.m_RefDefaultlayer != F_Fab ) )
settings.m_RefDefaultlayer = F_SilkS;
if( ( settings.m_ValueDefaultlayer != F_SilkS ) && ( settings.m_ValueDefaultlayer != F_Fab ) )
settings.m_ValueDefaultlayer = F_Fab;
}
开发者ID:flighta-zeng,项目名称:kicad-source-mirror,代码行数:16,代码来源:moduleframe.cpp
示例15: PCB_TARGET
PCB_TARGET* PCB_EDIT_FRAME::CreateTarget( wxDC* DC )
{
PCB_TARGET* target = new PCB_TARGET( GetBoard() );
target->SetFlags( IS_NEW );
GetBoard()->Add( target );
target->SetLayer( Edge_Cuts );
target->SetWidth( GetDesignSettings().m_EdgeSegmentWidth );
target->SetSize( MireDefaultSize );
target->SetPosition( GetCrossHairPosition() );
PlaceTarget( target, DC );
return target;
}
开发者ID:asutp,项目名称:kicad-source-mirror,代码行数:17,代码来源:target_edit.cpp
示例16: GetBoard
bool PCB_EDIT_FRAME::IsMicroViaAcceptable()
{
int copperlayercnt = GetBoard()->GetCopperLayerCount( );
LAYER_ID currLayer = GetActiveLayer();
if( !GetDesignSettings().m_MicroViasAllowed )
return false; // Obvious..
if( copperlayercnt < 4 )
return false; // Only on multilayer boards..
if( ( currLayer == B_Cu )
|| ( currLayer == F_Cu )
|| ( currLayer == copperlayercnt - 2 )
|| ( currLayer == In1_Cu ) )
return true;
return false;
}
开发者ID:khaterahmohammadi,项目名称:kicad-source-mirror,代码行数:19,代码来源:pcbframe.cpp
示例17: GetBoard
bool PCB_EDIT_FRAME::IsMicroViaAcceptable( void )
{
int copperlayercnt = GetBoard()->GetCopperLayerCount( );
LAYER_NUM currLayer = getActiveLayer();
if( !GetDesignSettings().m_MicroViasAllowed )
return false; // Obvious..
if( copperlayercnt < 4 )
return false; // Only on multilayer boards..
if( ( currLayer == LAYER_N_BACK )
|| ( currLayer == LAYER_N_FRONT )
|| ( currLayer == copperlayercnt - 2 )
|| ( currLayer == LAYER_N_2 ) )
return true;
return false;
}
开发者ID:jerkey,项目名称:kicad,代码行数:19,代码来源:pcbframe.cpp
示例18: GetDesignSettings
/*
* Imports the board design settings to aPad
* - The position, names, and keys are not modifed.
* The parameters are expected to be correct (i.e. settings are valid)
*/
void PCB_BASE_FRAME::Import_Pad_Settings( D_PAD* aPad, bool aDraw )
{
if( aDraw )
{
aPad->SetFlags( DO_NOT_DRAW );
m_canvas->RefreshDrawingRect( aPad->GetBoundingBox() );
aPad->ClearFlags( DO_NOT_DRAW );
}
const D_PAD& mp = GetDesignSettings().m_Pad_Master;
aPad->ImportSettingsFromMaster( mp );
if( aDraw )
m_canvas->RefreshDrawingRect( aPad->GetBoundingBox() );
aPad->GetParent()->SetLastEditTime();
OnModify();
}
开发者ID:johnbeard,项目名称:kicad,代码行数:25,代码来源:pad_edit_functions.cpp
示例19: GetBoard
/* Merge all basic shapes, converted to a polygon in one polygon,
* return true if OK, false in there is more than one polygon
* in aMergedPolygon
*/
bool D_PAD::MergePrimitivesAsPolygon( SHAPE_POLY_SET* aMergedPolygon )
{
auto board = GetBoard();
int maxError = ARC_HIGH_DEF;
if( board )
maxError = board->GetDesignSettings().m_MaxError;
// if aMergedPolygon == NULL, use m_customShapeAsPolygon as target
if( !aMergedPolygon )
aMergedPolygon = &m_customShapeAsPolygon;
aMergedPolygon->RemoveAllContours();
// Add the anchor pad shape in aMergedPolygon, others in aux_polyset:
// The anchor pad is always at 0,0
switch( GetAnchorPadShape() )
{
default:
case PAD_SHAPE_CIRCLE:
TransformCircleToPolygon( *aMergedPolygon, wxPoint( 0, 0 ), GetSize().x / 2, maxError );
break;
case PAD_SHAPE_RECT:
{
SHAPE_RECT rect( -GetSize().x / 2, -GetSize().y / 2, GetSize().x, GetSize().y );
aMergedPolygon->AddOutline( rect.Outline() );
break;
}
}
if( !buildCustomPadPolygon( aMergedPolygon, maxError ) )
return false;
m_boundingRadius = -1; // The current bouding radius is no more valid.
return aMergedPolygon->OutlineCount() <= 1;
}
开发者ID:KiCad,项目名称:kicad-source-mirror,代码行数:44,代码来源:pad_custom_shape_functions.cpp
示例20: CreateNewModule
MODULE* PCB_EDIT_FRAME::CreateMuWaveBaseFootprint( const wxString& aValue,
int aTextSize, int aPadCount )
{
MODULE* module = CreateNewModule( aValue );
if( aTextSize > 0 )
{
module->Reference().SetSize( wxSize( aTextSize, aTextSize ) );
module->Reference().SetThickness( aTextSize/5 );
module->Value().SetSize( wxSize( aTextSize, aTextSize ) );
module->Value().SetThickness( aTextSize/5 );
}
// Create 2 pads used in gaps and stubs. The gap is between these 2 pads
// the stub is the pad 2
wxString Line;
int pad_num = 1;
while( aPadCount-- )
{
D_PAD* pad = new D_PAD( module );
module->Pads().PushFront( pad );
int tw = GetDesignSettings().GetCurrentTrackWidth();
pad->SetSize( wxSize( tw, tw ) );
pad->SetPosition( module->GetPosition() );
pad->SetShape( PAD_SHAPE_RECT );
pad->SetAttribute( PAD_ATTRIB_SMD );
pad->SetLayerSet( F_Cu );
Line.Printf( wxT( "%d" ), pad_num );
pad->SetPadName( Line );
pad_num++;
}
return module;
}
开发者ID:JOE-JOE-NGIGI,项目名称:kicad,代码行数:39,代码来源:muonde.cpp
注:本文中的GetDesignSettings函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论