| | |
| | | import com.ximple.util.DgnUtility; |
| | | |
| | | /** |
| | | * Record |
| | | * FileRecord |
| | | * |
| | | * @author Ulysses |
| | | * @version 0.1 |
| | | * @since 2006/5/18 ¤W¤È 11:14:50 |
| | | * @since 2006/5/18 �W�� 11:14:50 |
| | | */ |
| | | public class Element { |
| | | public static final int CONSTRUCTION_CLASS = 0; |
| | |
| | | protected short[] raw; |
| | | protected byte attrOffset = 0; |
| | | protected ByteBuffer rawBuffer; |
| | | protected boolean newElement = false; |
| | | |
| | | public Element(byte[] raw) { |
| | | Element(byte[] raw) { |
| | | // this.raw = raw; |
| | | this.raw = new short[raw.length / 2]; |
| | | rawBuffer = ByteBuffer.wrap(raw); |
| | |
| | | |
| | | public int getLineStyle() { |
| | | return (raw[17] & 0x0007); |
| | | } |
| | | |
| | | protected void setLineStyle(int value) { |
| | | if (value > -1 && value < 8) |
| | | raw[17] = (short) ((raw[17] & 0xfff8) | (value & 0x0007)); |
| | | else |
| | | new IllegalArgumentException("Out of Range!"); |
| | | } |
| | | |
| | | public Envelope getRange() { |
| | |
| | | return (short) ((raw[0] >>> 7) & 0x0001) == 1; |
| | | } |
| | | |
| | | protected void setComponentElement(boolean value) { |
| | | raw[0] = (short) ((raw[0] & 0xff7f) | (value ? 0x0080 : 0x0)); |
| | | } |
| | | |
| | | public boolean removeUserAttributeData(int iLinkageId) { |
| | | return true; |
| | | } |
| | |
| | | return (short) ((raw[0] >>> 15) & 0x0001) == 1; |
| | | } |
| | | |
| | | protected void setDeleted(boolean value) { |
| | | raw[0] = (short) ((raw[0] & 0x7fff) | ((((value) ? 1 : 0) << 15) & 0x8000)); |
| | | } |
| | | |
| | | public int getColorIndex() { |
| | | return ((raw[17] >>> 8) & 0x00ff); |
| | | } |
| | | |
| | | protected void setColorIndex(int value) { |
| | | if (value > -1 && value < 256) |
| | | { |
| | | raw[17] = (short) ((raw[17] & 0x00ff) | (value << 8 & 0xff00)); |
| | | } else new IllegalArgumentException("Out of Range!"); |
| | | } |
| | | |
| | | public int getType() { |
| | | return ((raw[0] >>> 8) & 0x007f); |
| | | } |
| | | |
| | | protected void setType(int value) { |
| | | raw[0] = (short) ((raw[0] & 0x80ff) | (value << 8) & 0x3f00); |
| | | } |
| | | |
| | | public ElementType getElementType() { |
| | |
| | | public Exception() { |
| | | } |
| | | |
| | | // Constructs an Record.Exception with no detail message. |
| | | // Constructs an ElementRecord.Exception with no detail message. |
| | | public Exception(String oStrMessage) { |
| | | super(oStrMessage); |
| | | } |
| | |
| | | return elementType; |
| | | } |
| | | |
| | | public Object read(ByteBuffer buffer, short signature, int length) { |
| | | public Element read(ByteBuffer buffer, short signature, int length) { |
| | | byte[] dst = new byte[length]; |
| | | try { |
| | | buffer.get(dst, 4, dst.length - 4); |
| | |
| | | return new Element(raw); |
| | | } |
| | | } |
| | | |
| | | public static final class FileRecord { |
| | | int length; |
| | | int number = 0; |
| | | int offset; // Relative to the whole file |
| | | int start = 0; // Relative to the current loaded buffer |
| | | short signature = 0; |
| | | |
| | | /** |
| | | * The minimum X value. |
| | | */ |
| | | public double minX; |
| | | |
| | | /** |
| | | * The minimum Y value. |
| | | */ |
| | | public double minY; |
| | | |
| | | /** |
| | | * The minimum Z value. |
| | | */ |
| | | public double minZ; |
| | | |
| | | /** |
| | | * The maximum X value. |
| | | */ |
| | | public double maxX; |
| | | |
| | | /** |
| | | * The maximum Y value. |
| | | */ |
| | | public double maxY; |
| | | |
| | | /** |
| | | * The maximum Z value. |
| | | */ |
| | | public double maxZ; |
| | | |
| | | // ElementType type; |
| | | int end = 0; // Relative to the whole file |
| | | Object element = null; |
| | | IElementHandler handler; |
| | | ByteBuffer buffer; |
| | | |
| | | public Object element() { |
| | | if (element == null) { |
| | | buffer.position(start); |
| | | buffer.order(ByteOrder.LITTLE_ENDIAN); |
| | | |
| | | if (handler == null) { |
| | | return null; |
| | | } |
| | | |
| | | element = handler.read(buffer, signature, length); |
| | | } |
| | | |
| | | return element; |
| | | } |
| | | |
| | | public int offset() { |
| | | return offset; |
| | | } |
| | | |
| | | /** |
| | | * A summary of the record. |
| | | */ |
| | | public String toString() { |
| | | return "FileRecord " + number + " length " + length + " bounds " + minX + "," + minY + " " + maxX + "," + maxY; |
| | | } |
| | | } |
| | | } |