図の複数のボックスを移動しますか? -- matlab フィールド と drag-and-drop フィールド と figure フィールド 関連 問題

Moving multiple boxes in figure?












1
vote

問題

日本語

MATLABの図の単一ボックスをドラッグアンドドロップするために必要な機能をすでに持っています。私が書いたコードは数字をいくつかのボックスでいっぱいにします。別のループを使用すると、数字を超えるボックス(文字列形式で異なる情報を保持します)を入力します。

これら2つのボックスは、私がそれらのUSERDATA(対応する数)に配置された数字によって関連しています(各ボックスの場合は、同じUSERDATAコンテンツで別のものがあります)。同じUSERDATAを含むボックス(したがってそれらを関連付ける)を見つけることによって、第1のセットのボックスのメンバを第2のボックスの対応するメンバーと比較して同じ位置に移動させることができる。私がドラッグしたボックス(UIContextMenu)。

<事前> <コード> function recallfcn(hObject,eventdata) for ydx=1:2 diag_detail=get(gco,'UserData'); % This line should be in the drag fcn diag_pos=get(gco,'Position'); % So should this one (for current objects) xvar=diag_pos(1,1); yvar=diag_pos(1,2); detail=[diag_detail ydx]; set(findobj('UserData',detail),'Position',[xvar+(ydx-1.5) yvar+0.5 0.8 0.8]); end end % ydx is only there to add another level of detail as I'm actually looking to move % two boxes of the 'first kind', each of which have 2 numbers in user data, the first % number being the same, and the second number distinguishing the first box from the % second. The premise is the same.
英語

I already have the functions required to drag and drop a single box in a figure in MATLAB. The code I wrote fills the figure with several boxes. With another loop I filled the figure with more boxes (which hold different information in string form).

These two sets of boxes are related by the numbers I placed in their UserData (corresponding numbers; for each box, there's another with the same UserData content). By finding boxes containing the same UserData (and thus relating them) I want to be able to relocate a member of the first set of boxes to the same position relative to the corresponding member of the second set of boxes, by means of right clicking on the box I just dragged (uicontextmenu).

function recallfcn(hObject,eventdata) for ydx=1:2     diag_detail=get(gco,'UserData');   % This line should be in the drag fcn     diag_pos=get(gco,'Position');      % So should this one (for current objects)     xvar=diag_pos(1,1);     yvar=diag_pos(1,2);     detail=[diag_detail ydx];      set(findobj('UserData',detail),'Position',[xvar+(ydx-1.5) yvar+0.5 0.8 0.8]); end end  % ydx is only there to add another level of detail as I'm actually looking to move      % two boxes of the 'first kind', each of which have 2 numbers in user data, the first   % number being the same, and the second number distinguishing the first box from the  % second. The premise is the same. 
</div
        
   
   

回答リスト

3
 
vote
vote
ベストアンサー
 

通常、 doctrine_migrations: migrations_paths: 'DoctrineMigrations': 'src/MigrationsTenant' connection: tenant 0 の代わりに doctrine_migrations: migrations_paths: 'DoctrineMigrations': 'src/MigrationsTenant' connection: tenant 0 を使用して、オブジェクトのハンドルが外部から表示されない場合に備えています。それ以外は、あなたのコードがうまくいかないのかわかりません。

これは例です:

<事前> <コード> doctrine_migrations: migrations_paths: 'DoctrineMigrations': 'src/MigrationsTenant' connection: tenant 2
 

I usually use findall instead of findobj, in case the handles of the objects are not visible from the outside. Other than that I don't see why your code wouldn't work.

Here's an example:

%# make a figure with two buttons, same userData fh=figure, uicontrol('userdata',[2 3],'parent',fh) uicontrol('userData',[2 3],'units','normalized','position',[0.5 0.5,0.1 0.1],'parent',fh)  %# change color to red set(findall(fh,'userData',[2 3]),'backgroundcolor','r')  %# move to the same position set(findall(fh,'userData',[2 3]),'position',[0.3,0.3,0.1,0.1]) 
</div
 
 
3
 
vote

、 <コード> 'HandleVisibility' プロパティオブジェクトのオブジェクトが決定されますその親の子リストに表示されるので、 findobj 。標準の修正は、関​​数 findall を使用することです。しかし、 <コード> 'HandleVisibility' プロパティ< / a>もオブジェクトが現在のものであるかどうかを判断する際にはプレイが登場しますObject (すなわち、関数GCOによって返される)。 'off' に設定されている場合、そのオブジェクトは現在のオブジェクトになることはできません。さらに、 <コード> 'HandleVisibility' オブジェクトの親図 'off' に設定されています(そのようなオブジェクトを含む)、現在のオブジェクトになることができません。

'HandleVisibility' がすべてのオブジェクトや数字の 'on' または<コード>に設定されている場合は、すべてがうまく機能するはずです。

 

As Jonas alludes to, the 'HandleVisibility' property of an object will determine if the object shows up in its parent's list of children, and thus if it will be returned by functions like FINDOBJ. The standard fix is to use the function FINDALL instead.

However, the 'HandleVisibility' property also comes into play in determining whether or not an object can become the current object (i.e. returnable by the function GCO). If it is set to 'off', then that object can't become the current object. Additionally, if the 'HandleVisibility' property of the parent figure of an object is set to 'off' then none of its children (including said object) can become the current object.

If 'HandleVisibility' is set to 'on' or 'callback' for all your objects and figures, then I think everything should work fine.

</div
 
 
 
 
0
 
vote

xとyベクトルのオルソルを逆にする必要があります.1つのループを使用することができます。コード内の変更は次のとおりです。

<事前> <コード> x2=x(end:-1:1); % invers the ordre y2=y(end:-1:1); for i=1:length(x) set(hLine,'xdata',x(i),'ydata',y(i)); % move the point using set % to change the cooridinates. set(hLine2,'xdata',x2(i),'ydata',y2(i)); M(i)=getframe(gcf); end
 

you should inverse the ordre of x and y vector, and you can use just one loop, the changment in your code is :

x2=x(end:-1:1); % invers the ordre y2=y(end:-1:1);  for i=1:length(x)  set(hLine,'xdata',x(i),'ydata',y(i)); % move the point using set                                   % to change the cooridinates.  set(hLine2,'xdata',x2(i),'ydata',y2(i));   M(i)=getframe(gcf);  end 
</div
 
 

関連する質問

0  測地線で2枚の双曲層を描く方法  ( How to draw two sheeted hyperboloid with geodesics ) 
MATLABまたはPythonのいずれかを使用して、下の画像(透かしなし)を再作成したいと思います。 このリンクはとても親切でした双曲線を描くためには、そこに表示されているものを超えて何もしていません。緑色の測地線を維持する必要があります。これは簡単に行う...

0  Figureインスタンス内のすべてのMATPLOTLIB軸を取得する:figure.get_axes()またはfigure.axesを使用する必要がありますか?  ( Retrieving all matplotlib axes in a figure instance should i use figure get axe ) 
簡単な質問:の違いは何ですか <事前> <コード> import matplotlib.pyplot as plt f = plt.figure() a = f.get_axes() と <事前> <コード> f = plt.figure() a = f....

29  MATPLOTLIBプロットを90度まで回転させる方法  ( How can i rotate a matplotlib plot through 90 degrees ) 
私はMATPLOTLIBの図を作成しました。これは、3つのサブプロット、左上の象限に1つ、右上の象限に1つ、右下の象限に1つを含む。右上の図は2次元画像を含み、他の2つのプロットはそれぞれy軸への投影である。そのプロットのX軸は2次元プロットのy軸に沿って横ば...

1  Python /プロット治療法で地理的地図を拡大する方法  ( How to enlarge geographic map in python plotly choropleth plot ) 
私はプロットで治療区画を作りました。しかし、小さな地理的な地図。 href="https://i.stack.imgur.com/5s4ks.png" rel="nofollow noreferrow">そのような: 私のコードはここにあります: <事前>...

6  MATLAB:MATLABに表示されている図としてPDFに図を印刷する  ( Matlab print a figure to pdf as the figure shown in the matlab ) 
図を.pdf形式にエクスポート(名前を付け、印刷)しようとしています。ただし、設定をどのように設定しても、図の周囲に大きなマージンがあります。 図を.EPS形式にエクスポートすると、そのような問題はありませんが、これはMATLABに表示されているように見えます...

1  幾何学的図形の境界線をリンクする  ( Linking borders of geometric figures ) 
ペトリネットをシミュレートするAndroidアプリを作成しています。私は丸での場所を表現し、広場での移行を表しています。私はARCによってそれらの見解をつながっています(それは私の目的のためだけのペトリネットからの名前です)そしてここに私が直面している問題です...

0  なぜ私のオープンGL ESフィギュアが表示されていないのですか?  ( Why my open gl es figure is not showing ) 
まず、私は私の愚かな英語能力をお詫び申し上げます。 GoogleのAndroid開発者の例でOpenGL ESを学びました。 コードをテストし、正しく機能します。 しかし、私は自分のライブラリを作りたいので、コードを変更して分散させました。 (シェーダ.ja...

6  Matplotlib:図形全体をカバーするためのストレッチ画像  ( Matplotlib stretch image to cover the whole figure ) 
私はMATLABを操作し、Shift MatplotLibとNumpyを作ろうとしています。描画している画像が図の窓全体を占めるMATPLOTLIBの方法はありますか。 <事前> <コード> import numpy as np n = 30 pixelval...

202  MatpLotLib(Pyplot)SeveFigは空白の画像を出力します  ( Matplotlib pyplot savefig outputs blank image ) 
私はMATPLOTLIBを使って作るプロットを保存しようとしています。ただし、画像は空白の節約です。 これは私のコードです: <事前> <コード> plt.subplot(121) plt.imshow(dataStack, cmap=mpl.cm.bone)...

2  MATLAB:Yラベルは小型の窓に表示されません  ( Matlab y label isnt shown in small figure window ) 
次のコードを使用しています。 <事前> <コード> x = linspace(0, 9, 10); y1 = x; y2 = x.^2; y3 = x.^4; myfig = figure('Position', [500 500 400 320]); %[...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有