00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef LJUNCTIONCHANNEL_C_DEFINED
00039 #define LJUNCTIONCHANNEL_C_DEFINED
00040
00041 #include "Channels/LJunctionChannel.H"
00042
00043 #include "Channels/ChannelOpts.H"
00044 #include "Channels/JunctionChannel.H"
00045 #include "Channels/OrientationChannel.H"
00046 #include "Component/OptionManager.H"
00047 #include "rutz/trace.h"
00048
00049
00050
00051
00052 LJunctionChannel::LJunctionChannel(OptionManager& mgr,
00053 nub::soft_ref<OrientationChannel> oc)
00054 :
00055 ComplexChannel(mgr, "LJunction", "l-junction", LJUNCTION),
00056 itsNumOrients(&OPT_NumLOrients, this),
00057 itsOriChan(oc)
00058 {
00059 GVX_TRACE(__PRETTY_FUNCTION__);
00060
00061 buildSubChans();
00062 }
00063
00064
00065 LJunctionChannel::~LJunctionChannel()
00066 {
00067 GVX_TRACE(__PRETTY_FUNCTION__);
00068 }
00069
00070
00071 void LJunctionChannel::buildSubChans()
00072 {
00073 GVX_TRACE(__PRETTY_FUNCTION__);
00074
00075 this->removeAllSubChans();
00076
00077 LINFO("Using %d orientations spanning [0..360]deg", itsNumOrients.getVal());
00078 for (uint ori = 0; ori < 8; )
00079 {
00080 switch (ori)
00081 {
00082 case 0:
00083 addSubChan(makeSharedComp
00084 (new JunctionChannel(getManager(), itsOriChan,
00085 visualFeature(),
00086 1,0,1,0,0,0,0,0 )),
00087 "", 1.0, true);
00088 break;
00089 case 1:
00090 addSubChan(makeSharedComp
00091 (new JunctionChannel(getManager(), itsOriChan,
00092 visualFeature(),
00093 0,1,0,1,0,0,0,0 )),
00094 "", 1.0, true);
00095 break;
00096 case 2:
00097 addSubChan(makeSharedComp
00098 (new JunctionChannel(getManager(), itsOriChan,
00099 visualFeature(),
00100 0,0,1,0,1,0,0,0 )),
00101 "", 1.0, true);
00102 break;
00103 case 3:
00104 addSubChan(makeSharedComp
00105 (new JunctionChannel(getManager(), itsOriChan,
00106 visualFeature(),
00107 0,0,0,1,0,1,0,0 )),
00108 "", 1.0, true);
00109 break;
00110 case 4:
00111 addSubChan(makeSharedComp
00112 (new JunctionChannel(getManager(), itsOriChan,
00113 visualFeature(),
00114 0,0,0,0,1,0,1,0 )),
00115 "", 1.0, true);
00116 break;
00117 case 5:
00118 addSubChan(makeSharedComp
00119 (new JunctionChannel(getManager(), itsOriChan,
00120 visualFeature(),
00121 0,0,0,0,0,1,0,1 )),
00122 "", 1.0, true);
00123 break;
00124 case 6:
00125 addSubChan(makeSharedComp
00126 (new JunctionChannel(getManager(), itsOriChan,
00127 visualFeature(),
00128 1,0,0,0,0,0,1,0 )),
00129 "", 1.0, true);
00130 break;
00131 case 7:
00132 addSubChan(makeSharedComp
00133 (new JunctionChannel(getManager(), itsOriChan,
00134 visualFeature(),
00135 0,1,0,0,0,0,0,1 )),
00136 "", 1.0, true);
00137 break;
00138 default:
00139 break;
00140 }
00141 ori += 8 / itsNumOrients.getVal();
00142 }
00143 }
00144
00145
00146 void LJunctionChannel::paramChanged(ModelParamBase* const param,
00147 const bool valueChanged,
00148 ParamClient::ChangeStatus* status)
00149 {
00150 GVX_TRACE(__PRETTY_FUNCTION__);
00151 ComplexChannel::paramChanged(param, valueChanged, status);
00152
00153
00154
00155 if (param == &itsNumOrients &&
00156 numChans() != itsNumOrients.getVal())
00157 buildSubChans();
00158 }
00159
00160
00161 void LJunctionChannel::doInput(const InputFrame& inframe)
00162 {
00163 GVX_TRACE(__PRETTY_FUNCTION__);
00164 for (uint i = 0; i < numChans(); ++i)
00165 {
00166 subChan(i)->input(inframe);
00167 LINFO("LJunction pyramid (%d/%d) ok.", i+1, numChans());
00168 }
00169 }
00170
00171
00172
00173
00174
00175
00176
00177 #endif // LJUNCTIONCHANNEL_C_DEFINED