UNPKG

kekule

Version:

Open source JavaScript toolkit for chemoinformatics

233 lines (225 loc) 7.84 kB
/** * @fileoverview * Defines glyphs used in 2D/3D drawing. * @author Partridge Jiang */ /* * requires /lan/classes.js * requires /core/kekule.common.js */ (function(){ "use strict"; /** * Name space for glyph classes. * @namespace */ Kekule.Glyph = {}; /** * Represent an small glyph in chem document (especially in 2D rendering). * @class * @augments Kekule.ChemObject * @param {String} id Id of this object. * //@param {String} glyphName Name of this glyph. * @param {Hash} coord2D The top left 2D coordinates of glyph, {x, y}, can be null. * @param {Hash} coord3D The min 3D coordinates of glyph box, {x, y, z}, can be null. Usually unneeded. * * //@property {String} glyphName Name of this glyph. * @property {Hash} coord2D The 2D coordinates of glyph, {x, y}. * @property {Hash} coord3D The 3D coordinates of glyph, {x, y, z}. * @property {Hash} absCoord2D The absolute 2D coordinates of glyph, {x, y}. * @property {Hash} absCoord3D The absolute 3D coordinates of glyph, {x, y, z}. * @property {Hash} size2D The 2D dimension (width, height) of glyph, {x, y}. * @property {Hash} size3D The 3D dimension (width, height, depth) of glyph, {x, y, z}. * * @borrows Kekule.ClassDefineUtils.CommonCoordMethods#getCoordOfMode as #getCoordOfMode * @borrows Kekule.ClassDefineUtils.CommonCoordMethods#setCoordOfMode as #setCoordOfMode * @borrows Kekule.ClassDefineUtils.Coord2DMethods#fetchCoord2D as #fetchCoord2D * @borrows Kekule.ClassDefineUtils.Coord2DMethods#hasCoord2D as #hasCoord2D * @borrows Kekule.ClassDefineUtils.Coord2DMethods#get2DX as #get2DX * @borrows Kekule.ClassDefineUtils.Coord2DMethods#set2DX as #set2DX * @borrows Kekule.ClassDefineUtils.Coord2DMethods#get2DY as #get2DY * @borrows Kekule.ClassDefineUtils.Coord2DMethods#set2DY as #set2DY * @borrows Kekule.ClassDefineUtils.Coord3DMethods#fetchCoord3D as #fetchCoord3D * @borrows Kekule.ClassDefineUtils.Coord3DMethods#hasCoord2D as #hasCoord3D * @borrows Kekule.ClassDefineUtils.Coord3DMethods#get3DX as #get3DX * @borrows Kekule.ClassDefineUtils.Coord3DMethods#set3DX as #set3DX * @borrows Kekule.ClassDefineUtils.Coord3DMethods#get3DY as #get3DY * @borrows Kekule.ClassDefineUtils.Coord3DMethods#set3DY as #set3DY * @borrows Kekule.ClassDefineUtils.Coord3DMethods#get3DZ as #get3DZ * @borrows Kekule.ClassDefineUtils.Coord3DMethods#set3DZ as #set3DZ * //@borrows Kekule.ClassDefineUtils.CommonSizeMethods#getSizeOfMode as #getSizeOfMode * //@borrows Kekule.ClassDefineUtils.CommonSizeMethods#setSizeOfMode as #setSizeOfMode * //@borrows Kekule.ClassDefineUtils.CommonSizeMethods#getBoxOfMode as #getBoxOfMode * //@borrows Kekule.ClassDefineUtils.Size2DMethods#fetchSize2D as #fetchSize2D * //@borrows Kekule.ClassDefineUtils.Size2DMethods#hasSize2D as #hasSize2D * //@borrows Kekule.ClassDefineUtils.Size2DMethods#get2DSizeX as #get2DSizeX * //@borrows Kekule.ClassDefineUtils.Size2DMethods#set2DSizeX as #set2DSizeX * //@borrows Kekule.ClassDefineUtils.Size2DMethods#get2DSizeY as #get2DSizeY * //@borrows Kekule.ClassDefineUtils.Size2DMethods#set2DSizeY as #set2DSizeY * //@borrows Kekule.ClassDefineUtils.CommonSizeMethods#getBox2D as #getBox2D * //@borrows Kekule.ClassDefineUtils.Size3DMethods#fetchSize3D as #fetchSize3D * //@borrows Kekule.ClassDefineUtils.Size3DMethods#hasSize3D as #hasSize3D * //@borrows Kekule.ClassDefineUtils.Size3DMethods#get3DSizeX as #get3DSizeX * //@borrows Kekule.ClassDefineUtils.Size3DMethods#set3DSizeX as #set3DSizeX * //@borrows Kekule.ClassDefineUtils.Size3DMethods#get3DSizeY as #get3DSizeY * //@borrows Kekule.ClassDefineUtils.Size3DMethods#set3DSizeY as #set3DSizeY * //@borrows Kekule.ClassDefineUtils.CommonSizeMethods#getBox3D as #getBox3D */ Kekule.Glyph.Base = Class.create(Kekule.ChemObject, /** @lends Kekule.Glyph.Base# */ { /** @private */ CLASS_NAME: 'Kekule.Glyph.Base', /** * @constructs */ initialize: function(/*$super, */id, coord2D, coord3D) { this.tryApplySuper('initialize', [id]) /* $super(id) */; /* if (glyphName) this.setGlyphName(glyphName); */ if (coord2D) this.setCoord2D(coord2D); if (coord3D) this.setCoord3D(coord3D); }, /** @private */ initProperties: function() { //this.defineProp('glyphName', {'dataType': DataType.STRING}); /* this.defineProp('dimension2D', { 'dataType': DataType.HASH, // clone result object so that user can not modify x/y directly from getter 'getter': function(allowCreateNew){ var c = this.getPropStoreFieldValue('dimension2D'); if (!c) { if (!allowCreateNew) return c; else this.setPropStoreFieldValue('dimension2D', {}); } var r = {}; r = Object.extend(r, c); return r; }, // clone value from input 'setter': function(value){ var c = this.doGetDimension2D(true); // create new if not set if (value.x !== undefined) c.x = value.x; if (value.y !== undefined) c.y = value.y; this.setPropStoreFieldValue('dimension2D', c); //this.notifyDimension2DChanged(c); } }); this.defineProp('dimension3D', { 'dataType': DataType.HASH, // clone result object so that user can not modify x/y directly from getter 'getter': function(allowCreateNew){ var c = this.getPropStoreFieldValue('dimension3D'); if (!c) { if (!allowCreateNew) return c; else this.setPropStoreFieldValue('dimension3D', {}); } var r = {}; r = Object.extend(r, c); return r; }, // clone value from input 'setter': function(value){ var c = this.doGetDimension3D(true); // create new if not set if (value.x !== undefined) c.x = value.x; if (value.y !== undefined) c.y = value.y; if (value.z !== undefined) c.z = value.z; this.setPropStoreFieldValue('dimension3D', c); //this.notifyDimension3DChanged(c); } }); */ }, /** @private */ getAutoIdPrefix: function() { return 'g'; }, /* @private */ /* notifyDimension2DChanged: function(newValue) { this.notifyPropSet('dimension2D', newValue); }, */ /* @private */ /* notifyDimension3DChanged: function(newValue) { this.notifyPropSet('dimension3D', newValue); }, */ /* * Returns a min 3D box containing this glyph. * @returns {Hash} */ /* get3DBoundBox: function() { if (!this.hasSize3D()) return null; else { var coord1 = this.getSize3D(); var coord2 = Kekule.CoordUtils.add(coord1, this.getSize3D()); return {'x1': coord1.x, 'y1': coord1.y, 'z1': coord1.z, 'x2': coord2.x, 'y2': coord2.y, 'z2': coord2.z}; } } */ /** * Controls whether coord stick is allowed for a child node. * Descendants may override this method. * @param {Kekule.ChemObject} child * @param {Kekule.ChemObject} dest * @returns {Bool} * @private */ getAllowChildCoordStickTo: function(child, dest) { return false; }, /** * Controls whether a child object can be a coord stick target. * Descendants may override this method. * @param {Kekule.ChemObject} child * @returns {Bool} * @private */ getChildAcceptCoordStickFrom: function(child, fromObj) { return false; }, /** * Controls whether coord offset should be used in rendering when a child sticking to another target. * Descendants may override this method. * @param {Kekule.ChemObject} child * @param {Kekule.ChemObject} stickDest * @returns {Bool} * @private */ getChildUseCoordStickOffset: function(child, stickDest) { return null; } }); Kekule.ClassDefineUtils.addStandardCoordSupport(Kekule.Glyph.Base); //Kekule.ClassDefineUtils.addStandardSizeSupport(Kekule.Glyph); })();