OL3-如何知道绘图或交互是否开始
OL3 - How to know if drawing or interaction is started
在 OpenLayer 3 中,我使用 'draw-feature' sample code they have on their website 创建了一个 Draw 交互。
唯一的区别是我向 Draw 构造函数提供了我自己的条件函数。
我想知道是否有一种方法可以在条件函数中确定 interaction/drawing 是否已启动?
基本上,我的目标是稍微更改行为,以便通过按住 CTRL 键单击而不是单击来启动绘制框。但是只需单击一下即可结束绘图。所以我的方法是这样的(在 TypeScript 中)
var condition = (e: ol.MapBrowserEvent): boolean => {
return (myDraw.isStarted() ? true : e.originalEvent['ctrlKey']);
}
据我所知,在 OL Draw class 中没有 isStarted() 方法。如果我可以访问内部成员,我会通过检查 myDraw.sketchCoords_ 的长度来解决它(还没有检查这个但是如果 0 绘图还没有开始)。但我不想依赖私有成员,而且我使用的是 OL 的缩小版本,其中成员名称已转换。
尝试这样的事情:
var start_drawing = false;
function drawCondition(evt){
var ctrl = ol.events.condition.platformModifierKeyOnly(evt);
// this should be ol.events.condition.click
// but for some reason always returns false
var click = evt.type == 'pointerdown';
// to finish draw with click
if(start_drawing) return click;
// start drawing only with Ctrl + click
return ctrl && click;
}
// draw is a reference to ol.interaction.Draw
draw.on('drawstart', function(evt){
start_drawing = true;
});
draw.on('drawend', function(evt){
start_drawing = false;
});
在 OpenLayer 3 中,我使用 'draw-feature' sample code they have on their website 创建了一个 Draw 交互。
唯一的区别是我向 Draw 构造函数提供了我自己的条件函数。
我想知道是否有一种方法可以在条件函数中确定 interaction/drawing 是否已启动?
基本上,我的目标是稍微更改行为,以便通过按住 CTRL 键单击而不是单击来启动绘制框。但是只需单击一下即可结束绘图。所以我的方法是这样的(在 TypeScript 中)
var condition = (e: ol.MapBrowserEvent): boolean => {
return (myDraw.isStarted() ? true : e.originalEvent['ctrlKey']);
}
据我所知,在 OL Draw class 中没有 isStarted() 方法。如果我可以访问内部成员,我会通过检查 myDraw.sketchCoords_ 的长度来解决它(还没有检查这个但是如果 0 绘图还没有开始)。但我不想依赖私有成员,而且我使用的是 OL 的缩小版本,其中成员名称已转换。
尝试这样的事情:
var start_drawing = false;
function drawCondition(evt){
var ctrl = ol.events.condition.platformModifierKeyOnly(evt);
// this should be ol.events.condition.click
// but for some reason always returns false
var click = evt.type == 'pointerdown';
// to finish draw with click
if(start_drawing) return click;
// start drawing only with Ctrl + click
return ctrl && click;
}
// draw is a reference to ol.interaction.Draw
draw.on('drawstart', function(evt){
start_drawing = true;
});
draw.on('drawend', function(evt){
start_drawing = false;
});