欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

QML中map的用法

程序员文章站 2024-01-05 15:02:16
...
            var keys = [];
            for(var p in dect){
                if(dect.hasOwnProperty(p))
                    keys.push(p);
            }
            //            console.log(keys);

            for(var i = 0; i < keys.length; i++){
                f_setLayerPropertyUI(layerId, dect, keys[i]);
            }

两个Rectangle的自动吸附功能

        function autoTile(arr, obj) {
            var sx = 0; // space x
            var sy = 0; // space y
            var sstd = 0;
            var end = arr.length - 1;

            for (var i = 0; i <= end; ++i) {
                if (arr[i] == obj) {
                    continue;
                }

                sx = arr[i].x - obj.x;
                sy = arr[i].y - obj.y;
                //                console.log("sx=" + sx + ",sy=" + sy + ",obj.x=" + obj.x + ",obj.y=" + obj.y);////////////////////TEST

                if (sx > 0) {
                    sstd = arr[i].x - obj.width;

                    if (Math.abs(Math.abs(sstd) - Math.abs(obj.x)) <= activeAutoTile) {
                        if (Math.abs(sy) <= activeAutoTile) {
                            obj.x = sstd;
                            obj.y = arr[i].y;
                            break;
                        }
                    }
                }
                else {
                    sstd = arr[i].x + arr[i].width;

                    if (Math.abs(Math.abs(sstd) - Math.abs(obj.x)) <= activeAutoTile) {
                        if (Math.abs(sy) <= activeAutoTile) {
                            obj.x = sstd;
                            obj.y = arr[i].y;
                            break;
                        }
                    }
                }

                if (sy > 0) {
                    sstd = arr[i].y - obj.height;

                    if (Math.abs(Math.abs(sstd) - Math.abs(obj.y)) <= activeAutoTile) {
                        if (Math.abs(sx) <= activeAutoTile) {
                            obj.x = arr[i].x;
                            obj.y = sstd;
                            break;
                        }
                    }
                }
                else {
                    sstd = arr[i].y + arr[i].height;

                    if (Math.abs(Math.abs(sstd) - Math.abs(obj.y)) <= activeAutoTile) {
                        if (Math.abs(sx) <= activeAutoTile) {
                            obj.x = arr[i].x;
                            obj.y = sstd;
                            break;
                        }
                    }
                }
            }
        }

旋转后获取最大矩形

        function f_getRotationMaxRect(point1,point2,point3,point4){ //旋转后获取最大的矩形
            var rect = {"x":0,"y":0,"width":0,"height":0};
            var minX = Math.min(point1.x,point2.x,point3.x,point4.x);
            var minY = Math.min(point1.y,point2.y,point3.y,point4.y);
            var maxX = Math.max(point1.x,point2.x,point3.x,point4.x);
            var maxY = Math.max(point1.y,point2.y,point3.y,point4.y);

            var w = maxX - minX;
            var h = maxY - minY;

            rect.x = minX;
            rect.y = minY;
            rect.width = w;
            rect.height = h;

            return rect;
        }

获取旋转后的点

        function f_getRotationLaterPoint(point, centerPoint, angle){ //获取旋转后的点
            var tmQ = angle/180*Math.PI;
            var tmX = (point.x - centerPoint.x)*Math.cos(tmQ) -(point.y - centerPoint.y)*Math.sin(tmQ) + centerPoint.x;
            var tmY = (point.x - centerPoint.x)*Math.sin(tmQ) -(point.y - centerPoint.y)*Math.cos(tmQ) + centerPoint.y;

            var tempPoint = Qt.point(tmX, tmY);
            return  tempPoint;
        }
点是否在矩形内
    function f_IsOnRectangle(rect, point){ //点是否在矩形内
        var rectX = rect.x;
        var rectY = rect.y;
        var rectW = rect.width;
        var rectH = rect.height;

        var pointX = point.x;
        var pointY = point.y;

        if(pointX>=rectX && pointX <=(rectX+rectW) && pointY >= rectY && pointY<=(rectY+rectH))
            return true;
        else
            return false;

    }