ht.lib = ht.lib || {};
if (!ht.lib['zmt']) {
    ht.lib['zmt'] = function (x, y, width, height, angle, localVarObj, localDynamicVar, nodename) {
        _ratio = GD.getRatioWithRotation(0, ratio);
        ht.lib['zmt'].superClass.constructor.apply(this);
        this.localVarObj = localVarObj;
        this.localDynamicVar = localDynamicVar;
        this.childNodes = [];
        
        this._styleObject = {};
        this._originWidth = 24*_ratio.ratioX;
        this._originHeight = 31*_ratio.ratioY;
        this._baseClass = "ht.lib.zmt";

        this._background = new ht.Node();
        this._background.setWidth(this._originWidth);
        this._background.setHeight(this._originHeight);
        this._background.setPosition(this._originWidth/2, this._originHeight/2);
        this._background.setImage({
            width: width,
            height: height,
            clip: true,
            comps: [
                {
                    type: 'rect',
                    background: 'rgba(0,255,0,0)',
                    rect: [0,0,width, height]
                }
            ]
        });
        this._background.__parentLib = nodename;
        this._background.isLibBackground = true;
        this.childNodes.push(this._background);
        dataModel.add(this._background);
        /*@PageBackgroundInit@*/ 
        /*@PageBeforeInit@*/
        var Lib_zmtNode0;
(function () {
    var _ratio = GD.getRatioWithRotation(0*Math.PI/180, ratio);
    var ratioX, ratioY;
    if ('Default' === 'False') {
        ratioX = 1;
        ratioY = 1;
    } else if ('Default' === 'X') {
        ratioX = ratioY = _ratio.ratioX;
    } else if ('Default' === 'Y') {
        ratioX = ratioY = _ratio.ratioY;
    } else {
        ratioX = _ratio.ratioX;
        ratioY = _ratio.ratioY;
    }
    ht.Default.setImage('imgimage//patrol_gl010.png', PAGEROOTDIR + 'image//patrol_gl010.png');
    Lib_zmtNode0 = new ht.Node();
    Lib_zmtNode0.setPosition(11*ratio.ratioX, 15*ratio.ratioY);
    Lib_zmtNode0.setSize(23*ratioX, 30*ratioY);
    Lib_zmtNode0.setImage('imgimage//patrol_gl010.png');
    Lib_zmtNode0.setRotation(0*Math.PI/180);
    Lib_zmtNode0._zoomBy = 'Default';
    Lib_zmtNode0._nodeType = 'image';
    Lib_zmtNode0._disallowEvert = true;
    dataModel.add(Lib_zmtNode0);
})();
var Lib_zmtNode1;
(function () {
    var _ratio = GD.getRatioWithRotation(0*Math.PI/180, ratio);
    var ratioX, ratioY;
    if ('Default' === 'False') {
        ratioX = 1;
        ratioY = 1;
    } else if ('Default' === 'X') {
        ratioX = ratioY = _ratio.ratioX;
    } else if ('Default' === 'Y') {
        ratioX = ratioY = _ratio.ratioY;
    } else {
        ratioX = _ratio.ratioX;
        ratioY = _ratio.ratioY;
    }
    ht.Default.setImage('imgimage//patrol_gl021.png', PAGEROOTDIR + 'image//patrol_gl021.png');
    Lib_zmtNode1 = new ht.Node();
    Lib_zmtNode1.setPosition(11*ratio.ratioX, 15*ratio.ratioY);
    Lib_zmtNode1.setSize(23*ratioX, 30*ratioY);
    Lib_zmtNode1.setImage('imgimage//patrol_gl021.png');
    Lib_zmtNode1.setRotation(0*Math.PI/180);
    Lib_zmtNode1._zoomBy = 'Default';
    Lib_zmtNode1._nodeType = 'image';
    Lib_zmtNode1._disallowEvert = true;
    dataModel.add(Lib_zmtNode1);
})();

/*@GraphList@*/
        /*@PageInit@*/
        
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

        this['Lib_zmtNode0'] = Lib_zmtNode0; 
 Lib_zmtNode0.__parentLib = nodename; 
 Lib_zmtNode0.__parent = this; 
  this.childNodes.push(Lib_zmtNode0); 
this['Lib_zmtNode1'] = Lib_zmtNode1; 
 Lib_zmtNode1.__parentLib = nodename; 
 Lib_zmtNode1.__parent = this; 
  this.childNodes.push(Lib_zmtNode1); 

        /*@ControlContextMenu@*/
        /*@Declare@*/
        this.init(x, y, width, height, angle);
    };
    ht.Default.def('ht.lib.zmt', Object, {
        refresh10ms: function () {
    
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

    var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

    /*@refresh10ms@*/
},
refresh100ms: function () {
    
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

    var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

    /*@refresh100ms@*/
},
refresh500ms: function () {
    
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

    var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

    if((1 )>0) {if(((getVarValue(xianshi)==0)>0 )){Lib_zmtNode0.s('2d.visible',true&&this.getStyle('2d.visible'));}else{Lib_zmtNode0.s('2d.visible',false&&this.getStyle('2d.visible'));}}
if((1 )>0) {if(((getVarValue(xianshi)==1)>0 )){Lib_zmtNode1.s('2d.visible',true&&this.getStyle('2d.visible'));}else{Lib_zmtNode1.s('2d.visible',false&&this.getStyle('2d.visible'));}}

/*@refresh500ms@*/
},
refresh1s: function () {
    var Counter1s = arguments[0] || 0;
    
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

    var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

    /*@refresh1s@*/
},
refresh5s: function () {
    
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

    var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

    /*@refresh5s@*/
},

/*@PageDynamic@*/
        onEvent: function (e, data, type, origin, offset, objMouseOn, ctm) {
            
 var localVarObj = this.localVarObj; 
 var localDynamicVarObj = this.localDynamicVar(); 
var xianshi= localVarObj.xianshi || localDynamicVarObj.xianshi; 

            var Lib_zmtNode0= this.Lib_zmtNode0; 
var Lib_zmtNode1= this.Lib_zmtNode1; 

            
if (type === 'click') {
    /*@EvnentClicked@*/
} else if (type === 'mousedown') {
    mouseX=e.clientX;
    mouseY=e.clientY;
    /*@EvnentMouseDown@*/
} else if (type === 'mouseup') {
    /*@EvnentMouseUp@*/
} else if (type === 'mousemove') {
    var mouseX, mouseY, position, zoom;
    position=origin.getLogicalPoint(e);
    zoom = graphView.getZoom();
    if (origin === graphView) {
        mouseX= position.x + origin.tx();
        mouseY = position.y + origin.ty();
    } else {
        offset = offset || {x: 0, y: 0};
        mouseX = position.x / zoom + offset.x + origin.tx();
        mouseY = position.y / zoom + offset.y + origin.ty();
    }
    /*@EvnentMouseLeave@*/

    /*@EvnentMouseOver@*/
} else if (type === 'keydown') {
    /*@EvnentKeyDown@*/ 
} else if (type === 'contextmenu') {
    /*@Declare@*/
    /*@SetNodeContextMenu@*/
    /*@SetPageContextMenu@*/
}
/*@LibEvent@*/
        },
        getBaseClass: function () {
            return this._baseClass;
        },
        getWidth: function () {
            return this._width;
        },
        getHeight: function () {
            return this._height;
        },
        getSize: function () {
            return {
                width: this._width,
                height: this._height
            }
        },
        setWidth: function (width) {
            if (width === undefined || width === null || width != width) {
                return ;
            }
            var originWidth = this._width;
            var ratio = width / originWidth;
            var childNodes = this.childNodes, childNode, p, op = this.getPosition(), w, cw, ox, rotation = this.getRotation();
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                p = childNode.getPosition();
                cw = childNode.getWidth();
                    w = cw >=2 ? cw * ratio : cw;
                    childNode.setWidth(w);
                ox = op.x + (p.x - op.x) * ratio;
                childNode.setPosition(ox, p.y);

                rotation = GD.calcRotation(rotation);
                if (rotation === 0 || rotation === Math.PI) {
                    // 图元未旋转
                    ox = op.x + (p.x - op.x)*ratio;
                    childNode.setPosition(ox, p.y);
                } else if (rotation === 90 * Math.PI / 180) {
                    // 图元旋转以后
                    ox = op.y + (p.y - op.y)*ratio;
                    childNode.setPosition(p.x, ox);
                }
            }
            this._width = width;
            this._originWidth = width;
            this._ratioX = ratio;
            return this;
        },
        setHeight: function (height) {
            if (height === undefined || height === null || height != height) {
                return ;
            }
            var originHeight = this._height;
            var ratio = height / originHeight;
            var childNodes = this.childNodes, childNode, p, op = this.getPosition(), h, ch, oy, rotation = this.getRotation();
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                p = childNode.getPosition();
                ch = childNode.getHeight();

                h = ch >=2 ? ch * ratio : ch;
                childNode.setHeight(h);
                
                rotation = GD.calcRotation(rotation);

                if (rotation === 0 || rotation === Math.PI) {
                    // 图元未旋转
                    oy = op.y + (p.y - op.y)*ratio;
                    childNode.setPosition(p.x, oy);
                } else if (rotation === 90 * Math.PI / 180) {
                    // 图元旋转以后
                    oy = op.x + (p.x - op.x)*ratio;
                    childNode.setPosition(oy, p.y);
                }
            }
            this._height = height;
            this._originHeight = height;
            this._ratioY = ratio;
            return this;
        },
        setSize: function (size) {
            // var args = Array.prototype.slice.call(arguments, 0);
            // var height, width;
            // if (args.length === 0) {
            //     return ;
            // }else if (args.length === 1) {
            //     height = args[0].height;
            //     width = args[0].width;
            // } else {
            //     width = args[0];
            //     height = args[1];
            // }
            // var wh = GD.getRatioWithRotation(angle, wid)
            // this.setHeight(height);
            // this.setWidth(width);
            // return this;

            var args = Array.prototype.slice.call(arguments, 0);
            var height, width;
            if (args.length === 0) {
                return ;
            }else if (args.length === 1) {
                height = args[0].height;
                width = args[0].width;
                angle = 0;
            } else if (args.length === 2) {
                if (typeof args[0] === 'object') {
                    width = args[0].width;
                    height = args[0].height;
                    angle = args[1] || 0;
                } else {
                    width = args[0];
                    height = args[1];
                    angle = 0;
                }
            } else if (args.length === 3) {
                width = args[0];
                height = args[1];
                angle = args[2] || 0;
            }
            var wh = GD.getRatioWithRotation(0, width, height);
            this.setHeight(wh.ratioY);
            this.setWidth(wh.ratioX);
            return this;
        },
        getPosition: function () {
            return {
                x: this._x,
                y: this._y
            }
        },
        setPosition: function () {
            var args = Array.prototype.slice.call(arguments, 0), x, y;
            if (args.length === 0) {
                return this;
            } else if (args.length === 1) {
                if (typeof args[0] != 'object') {
                    return this;
                }
                x = args[0].x;
                y = args[0].y;
            } else {
                x = args[0];
                y = args[1];
            }
            if ((x !== 0 && !x) || (y !== 0 && !y)) {
                return this;
            }
            // var childNodes = this.childNodes, offset, childNode, p;
            // for (var i = 0, len = childNodes.length; i < len; i++) {
            //     childNode = childNodes[i];
            //     p = childNode.getPosition();
            //     childNode.setPosition(x - (this._x-p.x)*this._ratioX, y - (this._y-p.y)*this._ratioY);
            // }
            // this._x = x;
            // this._y = y;
            // return this;

            var childNodes, childNode, background, offset = {}, op, cp;

            childNodes = this.childNodes;
            background = this._background;
            op = background.getPosition();
            offset.x = x - op.x;
            offset.y = y - op.y;
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                cp = childNode.getPosition();
                childNode.setPosition(cp.x + offset.x, cp.y + offset.y);
            }
            this._x = x;
            this._y = y;
            this._position = {x: x, y: y};
            return this;
        },
        getStyle: function (key) {
            if (!key) {
                return undefined;
            }
            return this._styleObject[key];
        },
        setStyle: function (key, value, force) {
            var childNodes = this.childNodes, childNode;
            
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                if (key === '2d.visible') {
                    if (value === graphView.isVisible(childNode)) {
                        continue;
                    }
                    if (!value) {
                        childNode._savedIsVisible = graphView.isVisible(childNode);
                        childNode.s({
                            '2d.visible': false
                        })
                    } else {
                        childNode.s({
                            '2d.visible': childNode._savedIsVisible
                        })
                    }
                    continue;
                }
                childNode.s({
                    key: value
                });
            }
            this._styleObject[key] = value;
            return this;
        },
        calcSize: function () {
            var background = this._background;
            var position = background.getPosition(),
                width = background.getWidth(),
                height = background.getHeight();
            this._width = width;
            this._height = height;
            this._x = position.x;
            this._y = position.y;
            this._position = {
                x: this._x,
                y: this._y
            }
            return this;
            return this;
        },
        s: function (styleObj, force) {
            var args = Array.prototype.slice.call(arguments, 0);
            var styleObj;
            if (args.length === 0) {
                return this;
            } else if (args.length === 1) {
                styleObj = args[0];
            } else {
                this.setStyle(args[0], args[1]);
                return this;
            }
            for (var key in styleObj) {
                if (!styleObj.hasOwnProperty(key)) {
                    continue;
                }
                this.setStyle(key, styleObj[key], force);
            }
            return this;
        }, 
        init: function (x, y, width, height, angle) {
            var that = this;
            this.calcSize();
            (function (width, height, angle) {
                // that.setSize(width, height, angle);
                // var wh = GD.getRatioWithRotation(angle, width, height);
                // width = wh.ratioX;
                // height = wh.ratioY;
                var originHeight = that._height;
                var originWidth = that._width;
                var ratioY = height / originHeight;
                var ratioX = width / originWidth;
                var childNodes = that.childNodes,
                    childNode,p, op = that.getPosition(), h, ch, oy, w, cw, ox, name, borderRatio, borderWidth;
                for (var i = 0, len = childNodes.length; i < len; i++) {
                    childNode = childNodes[i];
                    p = childNode.getPosition();
                    childNode.originHeight = childNode.originHeight || childNode.getHeight();
                    ch = childNode.getHeight();
                    cw = childNode.getWidth();
                    
                    if (ch > 2) {
                        h = ch * ratioY;
                        childNode.setHeight(h);
                    } 
                    if (cw > 2) {
                        w = cw * ratioX;
                        childNode.setWidth(w);
                    }

                    borderRatio = (ratioX + ratioY)*0.5;
                    if (childNode._nodeType === 'line') { // 如果是线,
                        if (childNode.getWidth() > childNode.getHeight()) {
                            borderRatio = ratioX;
                        } else {
                            borderRatio = ratioY;
                        }
                    }

                    name = childNode._nodename;
                    // if (childNode.borderWidth && name && ch > 2 && cw > 2) {
                    //     borderWidth = childNode.borderWidth / borderRatio;
                    //     if (borderWidth > ch*0.5 || borderWidth > cw *0.5) {
                    //         // borderWidth = childNode.borderWidth;
                    //     }
                    //     childNode.borderWidth = borderWidth;
                    //     childNode.a(name + '.borderwidth', borderWidth);
                    // }
                }
                that._height = height;
                that._originHeight = height;
                that._ratioY = ratioY;
                that._width = width;
                that._originWidth = width;
                that._ratioX = ratioX;
            })(width, height, angle);
            that._x = width / 2;
            that._y = height / 2;
            that._rotation = 0;
            // that.setPosition(x, y);
            (function (x, y) {
                var childNodes = that.childNodes, offset, childNode;
                var w2 = that.getWidth() / 2, h2 = that.getHeight()/2;
                for (var i = 0, len = childNodes.length; i < len; i++) {
                    childNode = childNodes[i];
                    offset = childNode.getPosition();
                    childNode.setPosition(x + offset.x * that._ratioX - w2, y + offset.y * that._ratioY - h2);
                }
                that._x = x;
                that._y = y;
            })(x, y);
            // setTimeout(that.addEVent, 1000);
        },
        setRotation: function (angle) {
            var that = this, _angle = that.getRotation();
            if (angle!==0 && !angle || angle === _angle) {
                return this;
            }
            var childNodes = this.childNodes, childNode, p = this.getPosition(), px = p.x, py = p.y;
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                var x = childNode.getPosition().x - px;
                var y = childNode.getPosition().y - py;
                childNode.setPosition(Math.cos(angle-_angle) * x - Math.sin(angle-_angle) * y + px, Math.cos(angle-_angle) * y + Math.sin(angle-_angle) * x + py);
                childNode.setRotation(angle);
            }
            this._rotation = angle;
            return this;
        },
        getRotation: function () {
            return this._rotation;
        },
        setScale: function (sx, sy) {
            var that = this,
                childNodes = this.childNodes,
                childNode;
            if (sx === undefined || sx === null) return ;
            if (sy === undefined || sy === null) {
                sy = sx;
            }
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                if (typeof childNode.setScale === 'function') {
                    childNode.setScale(sx, sy);
                }
            }
        },
        getScale: function () {
            return this._background.getScale();
        },
        setScaleX: function (sx) {
            if (sx === undefined || sx === null) return;
            var that = this,
                childNodes = this.childNodes,
                childNode;
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                if (typeof childNode.setScaleX === 'function') {
                    childNode.setScaleX(sx);
                }
            }
        },
        setScaleY: function (sy) {
            if (sy === undefined || sy === null) return;
            var that = this,
                childNodes = this.childNodes,
                childNode;
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                if (typeof childNode.setScaleY === 'function') {
                    childNode.setScaleY(sy);
                }
            }
        },
        getScaleX: function () {
            return this._background.getScaleX();
        },
        getScaleY: function () {
            return this._background.getScaleY();
        },
        evert: function () {
            var that = this,
                childNodes = this.childNodes,
                background = this._background,
                bp = background.getPosition(),
                bx = bp.x,
                by = bp.y,
                childNode, distanceX, distanceY, x, y, p, nx, ny;
            
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                p = childNode.getPosition();
                x = p.x;
                y = p.y;
                distanceX = bx - x;
                distanceY = by - y;
                nx = bx + distanceX;
                ny = by + distanceY;
                childNode.setPosition(nx, ny);
                if (typeof childNode.setScale === 'function') {
                    if (!(childNode._disallowEvert === true))
                        childNode.setScale(-1, -1);
                }
            }
        },
        evertX: function () {
            var that = this,
                childNodes = this.childNodes,
                background = this._background,
                bx = background.getPosition().x,
                childNode, distance, x, p, nx;
            
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                p = childNode.getPosition();
                x = p.x;
                distance = bx - x;
                nx = bx + distance;
                childNode.setPosition(nx, p.y);
                if (typeof childNode.setScaleX === 'function') {
                    if (!(childNode._disallowEvert === true))
                        childNode.setScaleX(-1);
                }
            }
        },
        evertY: function () {
            var that = this,
                childNodes = this.childNodes,
                background = this._background,
                by = background.getPosition().y,
                childNode, distance, y, p, ny;
            
            for (var i = 0, len = childNodes.length; i < len; i++) {
                childNode = childNodes[i];
                p = childNode.getPosition();
                y = p.y;
                distance = by - y;
                ny = by + distance;
                childNode.setPosition(p.x, ny);
                if (typeof childNode.setScaleY === 'function') {
                    if (!(childNode._disallowEvert === true))
                        childNode.setScaleY(-1);
                }
            }
        },
        attr: function (key, value) {
            var _attrObj = this._attrObj || {};
            if (arguments.length === 1) {
                return _attrObj[key];
            }
            var childNodes = this.childNodes, childNode;
            _attrObj[key] = value;
            for (var i = 0; childNode = childNodes[i++];) {
                if (typeof childNode.a === 'function') {
                    childNode.a(key, value);
                }
            }
        },
        a: function () {
            return this.attr.apply(this, arguments);
        }
    });
}