実際、これは非常に単純な質問のはずですが、私はチャコと特性の非常に急な学習曲線を経験しています...
現在、チャコと特性を使用して医療画像をプロットするアプリケーションを作成しています。画像からピクセル位置を選択し、このピクセル位置を使用して画像スタックで評価を行いたいだけです。そこで、画像プロットでのマウス クリックに反応する独自の Chaco ツールを書き始めました。これはこれまでのところうまくいきます。imageplot をクリックすると、ツール (カスタムメイドの PixelPickerTool) 内のマウス座標が表示されます。ただし、ツールの外部でこの座標値を使用したいので、次の質問があります。イベントが発生したときに、ツールの外部にある別のオブジェクトまたは変数に座標を渡すにはどうすればよいですか。
私がやりたいことを説明するために、私が書いている2つのクラスの主な構造を添付しました:
class PixelPickerTool(BaseTool):
'''Pick a Pixel coordinate from an image'''
ImageCoordinates = [0,0]
def normal_left_down(self, event):
print "Mouse:", event.x, event.y,
click_x, click_y = self.component.map_data((event.x, event.y))
img_x = int(click_x)
img_y = int(click_y)
coord = [img_x, img_y]
if ( (img_x > self.ImageSizeX) or (img_x < 0) ):
coord = [0,0]
if ( (img_y > self.ImageSizeY) or (img_y < 0) ):
coord = [0,0]
print coord
# this print gives out the coordinates of the pixel that was clicked - this works fine...
# so inside the picker too I can get the coordinates
# but how can I use the coordinates outside this tool ?
class ImagePlot(HasTraits):
# create simple chaco plot of 2D numpy image array, with a simple interactor (PixelPickerTool)
plot = Instance(Plot)
string = String("hallo")
picker = Instance(PixelPickerTool)
traits_view = View(
Item('plot', editor=ComponentEditor(), show_label=False,width=500, height=500, resizable=False),
Item('string', show_label=False, springy=True, width=300, height=20, resizable=False),
title="")
def __init__(self, numpyImage):
super(ImagePlot, self).__init__()
npImage = np.flipud(np.transpose(numpyImage))
plotdata = ArrayPlotData(imagedata = npImage)
plot = Plot(plotdata)
plot.img_plot("imagedata", colormap=gray)
self.plot = plot
# Bild Nullpunkt ist oben links!
self.plot.default_origin = 'top left'
pixelPicker = PixelPickerTool(plot)
self.picker = pixelPicker
plot.tools.append(pixelPicker)
この ImagePlot クラスのどこかで、PixelPickerTool によって測定された座標を使用したいと考えています。たとえば、それらを MyImageSeries.setCoordinate(xy_coordinateFromPickerTool) のような別のオブジェクトに渡すことによって、イベントが発生したときに PickerTool からこのクラスのメンバー変数にピクセル座標を渡すにはどうすればよいですか? おそらく次のようなものです: self.PixelCoordinates = picker.getPixelCoordinates() は機能しますか? しかし、ピッカーで on_normal_left_down 関数が実行されたとき、どうすればわかりますか?
最後に、画像を処理し、ImagePlot で決定されたピクセル位置に適合させるために、より多くの画像を保持する別のクラスに座標を渡したいと思います。imagePlot クラスで "_picker_changed" のようなものを使用して、PickerTool でイベントが発生したかどうかを検出しようとしましたが、これはイベントの発生を検出しませんでした。だから多分私は何か間違ったことをしている...
このピッカー ツールからイベントと関連する変数を取得する方法を誰か教えてもらえますか?
乾杯、
アンドレ