Bonjour,

J'ai un composant électrique



Celui-ci est composer différentes lignes

J'aimerai réaliser un resize de mon composant.(width et height)
Pour faire un resize d'un simple rectangle, je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
  /**
   * Equipment resize state. This states manages the resizing of a equipment.
   */
  private class EquipmentResizeState extends ControllerState {
    private float                deltaXToResizeVertex;
    private float                deltaYToResizeVertex;
    private SlipEquipment	 selectedPiece;
    private float                oldX;
    private float                oldY;
    private float                oldWidth;
    private float                oldHeight;
    private String               centimerResizeToolTipFeedback;
    private String               inchResizeToolTipFeedback;

    @Override
    public Mode getMode() {
      return Mode.SELECTION;
    }
    
    @Override
    public void enter() {
      this.centimerResizeToolTipFeedback = resource.getString("centimerResizeToolTipFeedback");
      this.inchResizeToolTipFeedback = resource.getString("inchResizeToolTipFeedback");
      this.selectedPiece = (SlipEquipment)slip.getSelectedItems().get(0);
      float [] resizePoint = this.selectedPiece.getGraphicEquipment().getPoints() [2];
      this.deltaXToResizeVertex = getXLastMousePress() - resizePoint [0];
      this.deltaYToResizeVertex = getYLastMousePress() - resizePoint [1];
      this.oldX = this.selectedPiece.getX();
      this.oldY = this.selectedPiece.getY();
      this.oldWidth = this.selectedPiece.getWidth();
      this.oldHeight = this.selectedPiece.getHeight();
      PlanComponent planView = (PlanComponent)getView();
      planView.setResizeIndicatorVisible(true);
      planView.setToolTipFeedback(getToolTipFeedbackText(this.oldWidth, this.oldHeight), 
          getXLastMousePress(), getYLastMousePress());
    }
    
    @Override
    public void moveMouse(float x, float y) {
      // Compute the new location and dimension of the piece to let 
      // its bottom right point be at mouse location
      float angle = this.selectedPiece.getAngle();
      double cos = Math.cos(angle); 
      double sin = Math.sin(angle); 
      float [] topLeftPoint = this.selectedPiece.getGraphicEquipment().getPoints() [0];
      float deltaX = x - this.deltaXToResizeVertex - topLeftPoint[0];
      float deltaY = y - this.deltaYToResizeVertex - topLeftPoint[1];
      float newWidth =  (float)(deltaY * sin + deltaX * cos);
      float newHeight =  (float)(deltaY * cos - deltaX * sin);

      newWidth = Math.max(Math.round(newWidth * 10f) / 10f, 0.1f);
      newHeight = Math.max(Math.round(newHeight * 10f) / 10f, 0.1f);

      // Update piece new location
      float newX = (float)(topLeftPoint [0] + (newWidth * cos - newHeight * sin) / 2f);
      float newY = (float)(topLeftPoint [1] + (newWidth * sin + newHeight * cos) / 2f);
      slip.setEquipmentLocation(this.selectedPiece, newX, newY);
      // Update piece new dimension
      slip.setEquipmentDimension(this.selectedPiece, newWidth, newHeight);


      PlanComponent planView = (PlanComponent)getView();
      // Ensure point at (x,y) is visible
      planView.makePointVisible(x, y);
      planView.setToolTipFeedback(getToolTipFeedbackText(newWidth, newHeight), x, y);
    }

    @Override
    public void releaseMouse(float x, float y) {
      postEquipmentResize(this.selectedPiece, this.oldX, this.oldY, 
          this.oldWidth, this.oldHeight);
      setState(getSelectionState());
    }

    @Override
    public void escape() {
      slip.setEquipmentLocation(this.selectedPiece, this.oldX, this.oldY);
      slip.setEquipmentDimension(this.selectedPiece, 
              this.oldWidth, this.oldHeight);
      setState(getSelectionState());
    }

    @Override
    public void exit() {
      PlanComponent planView = (PlanComponent)getView();
      planView.setResizeIndicatorVisible(false);
      planView.deleteToolTipFeedback();
      this.selectedPiece = null;
    }  
  }
Hors mon composant est un peu plus complexe qu'un simple rectangle.

J'ai essayé, dans ma classe permettant la modification, de modifier seulement les coordonnées de fin de mes différentes lignes (xEnd et yEnd)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
	   /**
            * Sets the width of this equipment.
            * This method should be called from {@link Slip}, which
            * controls notifications when a equipment changed.
                 */	    	   
	   void setWidth(float width) {
		     this.width = width;		     
	        for (EquipmentLine equipmentLine : this.getEquipmentLines()) {
	            equipmentLine.setXEnd(width);
	        }
	        this.shapeCache = null;
		   }
 
	   /**
            * Sets the height of this equipment.
            * This method should be called from {@link Slip}, which
            * controls notifications when a equipment changed.
            */
	   void setHeight(float height) {
	     this.height = height;
	        for (EquipmentLine equipmentLine : this.getEquipmentLines()) {
	            equipmentLine.setYEnd(height);
	        }
	        this.shapeCache = null;
	   }
Mais le résultat est catastrophique
Comment feriez-vous pour faire un resize d'un composant comme le mien?
Pour la rotation, je poserai ma question après
Merci de votre aide