D i v i n g i n t o t h e s o u r c e c o d e - - PowerPoint PPT Presentation

d i v i n g i n t o t h e
SMART_READER_LITE
LIVE PREVIEW

D i v i n g i n t o t h e s o u r c e c o d e - - PowerPoint PPT Presentation

D i v i n g i n t o t h e s o u r c e c o d e c r e a t i n g n e w t o o l s i n K i C a d M a c i e j S u m i s k i F O S D E M @ B r u s s e l s t h 5 F e b


slide-1
SLIDE 1

D i v i n g i n t

  • t

h e

  • s
  • u

r c e c

  • d

e

M a c i e j S u m i ń s k i F O S D E M @ B r u s s e l s 5

t h

F e b r u a r y 2 1 7

c r e a t i n g n e w t

  • l

s i n K i C a d

slide-2
SLIDE 2

A g e n d a

  • B

u i l d i n g K i C a d

  • T
  • l

F r a m e w

  • r

k

  • U

s e f u l c l a s s e s

  • E

x a m p l e

  • S

u b m i t t i n g p a t c h e s

  • D
  • c

u m e n t a t i

  • n

& s u p p

  • r

t

slide-3
SLIDE 3

B u i l d i n g K i C a d

L i n u x

[ i n s t a l l d e p e n d e n c i e s ] git clone https://git.launchpad.net/kicad mkdir kicad/build cd kicad/build cmake .. make

slide-4
SLIDE 4

B u i l d i n g K i C a d

W i n d

  • w

s

[ i n s t a l l M S Y S 2 & d e p e n d e n c i e s ] git clone https://github.com/Alexpux/MINGW-packages cd MinGW-packages/mingw-w64-kicad-git makepkg-mingw -is

slide-5
SLIDE 5

T

  • l

F r a m e w

  • r

k

V i e w ( G A L , V I E W , P A I N T E R ) V i e w ( G A L , V I E W , P A I N T E R ) T

  • l

F r a m e w

  • r

k ( T O O L , T O O L _ M A N A G E R ) T

  • l

F r a m e w

  • r

k ( T O O L , T O O L _ M A N A G E R ) M

  • d

e l ( B O A R D , B O A R D _ I T E M ) M

  • d

e l ( B O A R D , B O A R D _ I T E M )

m

  • d

i fj e s d r a w s

slide-6
SLIDE 6

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::NEW_TOOL() : PCB_TOOL( “pcbnew.ToolName” ) { // initialize variables } NEW_TOOL::~NEW_TOOL() { // deinitialize variables }

slide-7
SLIDE 7

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::Reset( ... ) { switch( aReason ) { case RUN: ... case MODEL_RELOAD: ... case GAL_SWITCH: ... } }

slide-8
SLIDE 8

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::Init() { // one-time initialization // when other tools are also // initialized, e.g. adding menus }

slide-9
SLIDE 9

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::SetTransitions() { // set event handlers Go( &NEW_TOOL::eventHandler, eventA ); }

slide-10
SLIDE 10

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::eventHandler( ... ) { // single action handler // execute an action and finish selectedItem->SetPosition( wxPoint( 0, 0 ) ); }

slide-11
SLIDE 11

T

  • l

F r a m e w

  • r

k

class NEW_TOOL : public PCB_TOOL { public: NEW_TOOL(); ~NEW_TOOL(); void Reset( RESET_REASON aReason ); bool Init(); void SetTransitions(); private: int eventHandler( const TOOL_EVENT& aEvent ); };

NEW_TOOL::eventHandler( ... ) { // single action handler // execute an action and finish selectedItem->SetPosition( wxPoint( 0, 0 ) ); } NEW_TOOL::eventHandler( ... ) { // interactive tool while( OPT_TOOL_EVENT evt = Wait() ) { if( evt->IsClick( BUT_LEFT ) ... else if( evt->IsDrag( BUT_LEFT ) ... } }

slide-12
SLIDE 12

T

  • l

F r a m e w

  • r

k

  • A

d d t h e n e w fj l e t

  • p

c b n e w / C M a k e L i s t s . t x t

  • A

d d t

  • p

c b n e w / t

  • l

s / t

  • l

s _ c

  • m

m

  • n

. c p p :

#include <tools/new_tool.h> void registerAllTools( TOOL_MANAGER* aToolManager ) { … aToolManager->RegisterTool( new NEW_TOOL ); … }

slide-13
SLIDE 13

U s e f u l c l a s s e s : m

  • d

e l

E D A _ I T E M

B O A R D _ I T E M

  • B

O A R D _ C O N N E C T E D _ I T E M

– D

_ P A D

– T

R A C K

– V

I A

– Z

O N E _ C O N T A I N E R

  • B

O A R D _ I T E M _ C O N T A I N E R

– B

O A R D

– M

O D U L E

  • D

R A W S E G M E N T

  • N

E T I N F O _ I T E M

  • T

E X T E _ M O D U L E

  • T

E X T E _ P C B

slide-14
SLIDE 14

U s e f u l c l a s s e s : w i n d

  • w

s

slide-15
SLIDE 15

U s e f u l c l a s s e s : i n t r

  • d

u c i n g c h a n g e s

BOARD_COMMIT commit( frame ); commit.Add( new TRACK( … ) ) commit.Modify( module ); // saves the state // perform module modifications commit.Remove( drawing ); commit.Push( “Updated board” );

c r e a t e u n d

  • e

n t r y u p d a t e m

  • d

e l , v i e w , r a t s n e s t

slide-16
SLIDE 16

U s e f u l c l a s s e s : a c t i

  • n

s

TOOL_ACTION flip( "pcbnew.InteractiveEdit.flip", AS_GLOBAL, ‘F’, _( "Flip" ), _( "Flips selected item(s)" ), swap_layer_xpm );

slide-17
SLIDE 17

U s e f u l c l a s s e s : m a n a g i n g t

  • l

s

TOOL_MANAGER

  • InvokeTool()
  • GetTool()
  • RunAction()
  • GetView()
  • GetModel()
  • GetEditFrame()

i n t e r a c t w i t h

  • t

h e r t

  • l

s a c c e s s e s s e n t i a l

  • b

j e c t s

slide-18
SLIDE 18

E x a m p l e : f a n

  • u

t t

  • l
slide-19
SLIDE 19

E x a m p l e : f a n

  • u

t t

  • l
slide-20
SLIDE 20

E x a m p l e : f a n

  • u

t t

  • l
slide-21
SLIDE 21

/ * c

  • d

e & s h

  • r

t d e m

  • *

/ g i t c l

  • n

e

  • b

f a n

  • u

t \ h t t p s : / / g i t . l a u n c h p a d . n e t / ~

  • r

s

  • n

m m z / k i c a d

slide-22
SLIDE 22

M

  • r

e e x a m p l e s . . .

k i c a d

  • s

r c / p c b n e w / t

  • l

s :

  • P

L A C E M E N T _ T O O L

  • Z

O O M _ T O O L

  • P

C B _ E D I T O R _ C O N T R O L

slide-23
SLIDE 23

S u b m i t t i n g p a t c h e s

  • C
  • d

e f

  • r

m a t t i n g

  • S

i n g l e p a t c h e s : e

  • m

a i l

  • n

d e v e l

  • p

e r ’ s m a i l i n g l i s t

  • L

a r g e b a t c h : m e r g e r e q u e s t

  • n

L a u n c h p a d

slide-24
SLIDE 24

D

  • c

u m e n t a t i

  • n

& s u p p

  • r

t

  • O

ffj c i a l K i C a d w e b p a g e

h t t p : / / k i c a d

  • p

c b .

  • r

g / c

  • n

t r i b u t e / d e v e l

  • p

e r s /

  • T
  • l

F r a m e w

  • r

k t u t

  • r

i a l

h t t p : / / k i c a d . r e a d t h e d

  • c

s . i

  • /

e n / l a t e s t / D

  • c

u m e n t a t i

  • n

/ d e v e l

  • p

m e n t / t

  • l
  • f

r a m e w

  • r

k

  • K

i C a d d e v e l

  • p

e r m a i l i n g l i s t

h t t p s : / / l a u n c h p a d . n e t / ~ k i c a d

  • d

e v e l

  • p

e r s

  • #

k i c a d @ f r e e n

  • d

e . n e t

slide-25
SLIDE 25

Q u e s t i

  • n

s

?