您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Скашивание углов
// ==UserScript== // @name WME Chamfer Angle // @version 0.1 // @description Скашивание углов // @author ixxvivxxi // @include https://www.waze.com/editor/* // @include https://www.waze.com/*/editor/* // @include https://editor-beta.waze.com/editor/* // @include https://editor-beta.waze.com/*/editor/* // @grant none // @namespace WMEChamferAngle // ==/UserScript== setTimeout(chamfer,999); function chamfer() { UpdateSegmentGeometry=require("Waze/Action/UpdateSegmentGeometry"); Waze.selectionManager.events.register("selectionchanged", null, insertСhamferButtons); console.log("Start ChamferAngle"); function insertСhamferButtons() { $('.more-actions').append('<button id="chamferAngle" class="btn btn-default">Скосить углы</button>'); } $('#sidebar').on('click', '#chamferAngle', function(event) { event.preventDefault(); chamferAngle(); }); function getangle(A,B,C) { var AB = [B.x - A.x, B.y - A.y], CB = [B.x - C.x, B.y - C.y]; return Math.acos((AB[0]*CB[0]+AB[1]*CB[1])/(Math.sqrt(Math.pow(AB[0], 2)+Math.pow(AB[1], 2))*Math.sqrt(Math.pow(CB[0], 2)+Math.pow(CB[1], 2))))/(Math.PI / 180); } function chamferAngle() { var angle = 0, lengthAB = 0, ratio = 0, B2 = [], B3 = [], elem = {}, haveChamfer = false; if (0!=Waze.selectionManager.selectedItems.length) { for (var e=0;e<Waze.selectionManager.selectedItems.length;e++) { var t=Waze.selectionManager.selectedItems[e],r=t.model; if("segment"==r.type){ var o=r.geometry.clone(); var ln = o.components.length; if (ln > 2) { haveChamfer = false; for(var i=1;i<o.components.length-1;i++){ angle = getangle(o.components[i-1],o.components[i],o.components[i+1]); if (angle>25 && angle<115) { haveChamfer = true //console.log("Угол: " + angle); lengthAB = Math.sqrt(Math.pow(o.components[i].x - o.components[i-1].x, 2) + Math.pow(o.components[i].y - o.components[i-1].y, 2)); //console.log("Длина AB: " + lengthAB); ratio = lengthAB/2; //console.log("Соотношение AB: " + ratio); B2 = [(ratio * o.components[i].x + o.components[i-1].x) / (ratio + 1), (ratio * o.components[i].y + o.components[i-1].y) / (ratio +1)]; lengthAB = Math.sqrt(Math.pow(o.components[i].x - o.components[i+1].x, 2) + Math.pow(o.components[i].y - o.components[i+1].y, 2)); //console.log("Длина CB: " + lengthAB); ratio = lengthAB/2; //console.log("Соотношение CB: " + ratio); B3 = [(ratio * o.components[i].x + o.components[i+1].x) / (ratio +1), (ratio * o.components[i].y + o.components[i+1].y) / (ratio +1)]; o.components[i].x = B2[0]; o.components[i].y = B2[1]; elem = o.components[i].clone(); elem.x = B3[0]; elem.y = B3[1]; o.components.splice(i+1,0,elem); //console.log("-----------------------"); } } if (haveChamfer) { Waze.model.actionManager.add(new UpdateSegmentGeometry(r,r.geometry,o));} } } } } } }