jonigata commited on
Commit
91f44da
1 Parent(s): d5fd1ce

add cut off

Browse files
Files changed (1) hide show
  1. static/poseEditor.js +35 -2
static/poseEditor.js CHANGED
@@ -21,6 +21,25 @@ function findParentNodeIndex(nodeIndex) {
21
  return limbIndex === -1 ? -1 : limbSeq[limbIndex][0];
22
  }
23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
  function repairPose(sourcePose) {
25
  // TODO: ループには対応してないかも
26
  var pose = sourcePose;
@@ -123,6 +142,14 @@ function repairPerson(personIndex) {
123
  Redraw();
124
  }
125
 
 
 
 
 
 
 
 
 
126
  // ドラッグ中の各キーが押されているかどうかのフラグ
127
  var keyDownFlags = {};
128
  // マウスカーソル
@@ -291,7 +318,8 @@ function drawUI() {
291
  "ControlRight": "Scale",
292
  "ShiftLeft": "Rotate",
293
  "ShiftRight": "Rotate",
294
- "KeyQ": "Delete",
 
295
  "KeyX": "X-Axis",
296
  "KeyC": "Y-Axis",
297
  "KeyR": "Repair",
@@ -399,9 +427,14 @@ function handleMouseDown(event) {
399
  const p = getCanvasPosition(event);
400
  const [personIndex, nodeIndex, minDist] = getNearestNode(p);
401
 
402
- if (keyDownFlags["KeyQ"]) {removePerson(personIndex);return;}
403
  if (keyDownFlags["KeyR"]) {repairPerson(personIndex);return;}
404
 
 
 
 
 
 
405
  // ドラッグ処理の開始
406
  dragStart = p;
407
  dragMarks = poseData.map(pose => pose.map(node => false));
 
21
  return limbIndex === -1 ? -1 : limbSeq[limbIndex][0];
22
  }
23
 
24
+ function cutOffLimb(pose, cutOffIndex) {
25
+ console.log(`cutOffLimb: ${cutOffIndex}`);
26
+ // 末端ノードの座標を削除する
27
+ var newPose = deepCopy(pose);
28
+ for (let i = 0; i < 18; i++) {
29
+ // ルートまで検索し、その間にcuttOffIndexがあれば削除
30
+ if (i == 1) {continue;} // ルートは削除しない
31
+ while (true) {
32
+ let parent = findParentNodeIndex(i);
33
+ if (parent === cutOffIndex) {
34
+ console.log(`cutOffLimb: ${i} -> ${cutOffIndex}`);
35
+ newPose[i] = null;
36
+ break;
37
+ }
38
+ }
39
+ }
40
+ return newPose;
41
+ }
42
+
43
  function repairPose(sourcePose) {
44
  // TODO: ループには対応してないかも
45
  var pose = sourcePose;
 
142
  Redraw();
143
  }
144
 
145
+ function cutOffPersonLimb(personIndex, limbIndex) {
146
+ poseData[personIndex] = cutOffLimb(poseData[personIndex], limbIndex);
147
+ console.log(poseData[personIndex]);
148
+ console.log(poseData);
149
+ addHistory();
150
+ Redraw();
151
+ }
152
+
153
  // ドラッグ中の各キーが押されているかどうかのフラグ
154
  var keyDownFlags = {};
155
  // マウスカーソル
 
318
  "ControlRight": "Scale",
319
  "ShiftLeft": "Rotate",
320
  "ShiftRight": "Rotate",
321
+ "KeyQ": "CutOff",
322
+ "KeyD": "Delete",
323
  "KeyX": "X-Axis",
324
  "KeyC": "Y-Axis",
325
  "KeyR": "Repair",
 
427
  const p = getCanvasPosition(event);
428
  const [personIndex, nodeIndex, minDist] = getNearestNode(p);
429
 
430
+ if (keyDownFlags["KeyD"]) {removePerson(personIndex);return;}
431
  if (keyDownFlags["KeyR"]) {repairPerson(personIndex);return;}
432
 
433
+ if (keyDownFlags["KeyQ"] && minDist < 16 && nodeIndex != 1) {
434
+ cutOffPersonLimb(personIndex, nodeIndex);
435
+ return;
436
+ }
437
+
438
  // ドラッグ処理の開始
439
  dragStart = p;
440
  dragMarks = poseData.map(pose => pose.map(node => false));