private void reformBlockShape() {
		abstractBlockArea = blockShape.reformArea();
		// TODO for zooming, create an AffineTransform to scale the block shape
		AffineTransform at = new AffineTransform();
		at.setToScale(zoom, zoom);
		blockArea = abstractBlockArea.createTransformedArea(at);

		// note: need to add twice the highlight stroke width so that the
		// highlight does not get cut off
		Rectangle updatedDimensionRect = new Rectangle(this.getX(),
				this.getY(), blockArea.getBounds().width,
				blockArea.getBounds().height);
		if (!this.getBounds().equals(updatedDimensionRect)) {
			moveConnectedBlocks(); // bounds have changed, so move connected
									// blocks
		}
		this.setBounds(updatedDimensionRect);

		// ////////////////////////////////////////
		// set position of block labels.
		// ////////////////////////////////////////
		if (pageLabel != null && getBlock().hasPageLabel()) {
			pageLabel.update();
		}
		if (blockLabel != null) {
			blockLabel.update();
		}
		if (collapseLabel != null) {
			collapseLabel.update();
		}
		if (comment != null) {
			comment.update();
		}
		for (ConnectorTag tag : socketTags) {
			BlockConnector socket = tag.getSocket();
			SocketLabel label = tag.getLabel();
			if (label == null || SocketLabel.ignoreSocket(socket)) {
				continue;
			}
			label.update(getSocketAbstractPoint(socket));
		}
	}