以下のコードでは、2 つの円が描画され、1 つのグループ化ノードに追加されます。
以下の動作バリアントが観察されました。
1) 外側と内側を含む円の任意の点でドラッグできます。交点でドラッグすると、ドラッグは発生しません
2) 外装のみでドラッグ可能
3) ドラッグできない
4) 拡張境界内の任意の点でドラッグ可能
すべての動作はsubinitialize()
params によって開始されます。
ノードのアクティブな「ピッケブル」ポイントを微調整することは可能ですか? たとえば、(2) の場合のように、サブノードを選択不可のままにして、グループ全体を円の外部のみでドラッグできるようにすることはできますか?
Piccolo では、クリックが行われたグループ オブジェクトを特定できないため、必要です。特に、リスナーがアタッチされたグループノードを特定できないため、単一のリスナーを複数のノードにアタッチすると、どのノードが呼び出されたかを区別できなくなります。
public class Try_Picking_01 {
private static final Logger log = LoggerFactory.getLogger(Try_Picking_01.class);
public static void main(String[] args) {
new PFrame() {
final PNode group = new PNode();
@Override
public void initialize() {
group.addInputEventListener(new PBasicInputEventHandler() {
@Override
public void mouseDragged(PInputEvent event) {
PDimension dim = event.getDeltaRelativeTo(group.getParent());
group.offset(dim.getWidth(), dim.getHeight());
}
});
getCanvas().getLayer().addChild(group);
getCanvas().setPanEventHandler(null);
// able to drag by any point of circle, including exterior and interior
// if drag by intercircle point, drag does not occur
// subinitialize(false, true, false);
// able to drag only by exterior
//subinitialize(true, true, false);
// unable to drag
// subinitialize(true, false, false);
// able to drag by any point in extended bounds
subinitialize(true, false, true);
}
private void subinitialize(boolean emptyFill, boolean pickable, boolean expandBounds) {
PPath path1 = PPath.createEllipse(100, 100, 100, 100);
path1.setStrokePaint(Color.RED);
path1.setPaint( emptyFill ? null : Color.YELLOW ); // line #1
log.info("path1.bounds = {}", path1.getBounds());
path1.setPickable(pickable); // line #2
PPath path2 = PPath.createEllipse(200, 200, 100, 100);
path2.setPaint( emptyFill ? null : Color.YELLOW ); // line #3
log.info("path2.bounds = {}", path2.getBounds());
path2.setPickable(pickable); // line #4
group.addChild(path1);
group.addChild(path2);
log.info("group.bounds = {}", group.getBounds());
if( expandBounds ) {
group.setBounds(group.getFullBounds()); // line #5
log.info("group.bounds = {}", group.getBounds());
}
}
};
}
}