fix(stereo): прямой угол (90°) рисуется квадратиком, а не дугой
В инструменте «∠ рёбер» общий рисовальщик _drawAngleArc всегда чертил дугу, включая случай 90° — должен быть квадратный маркер прямого угла. - _drawAngleArc: при |angle−90|<0.5° рисует угловой «квадратик» (p1=center+ n1·r, p3=center+(n1+n2)·r, p2=center+n2·r, r=radius·0.7) вместо дуги. Подпись «∠ABC = 90.0°» и лучи угла рисуются отдельно в обработчике — не затронуты. Для не-прямых углов поведение прежнее (дуга). Верификация: node --check OK; headless-смоук 10/10 (90° → 3-точечный квадрат с верной геометрией в любой плоскости; 89.6° в допуске → квадрат; 60/88/130° → дуга; полный поток _onEdgeAngleClick на угле куба → квадрат); эмодзи/eval/ new Function — 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -3361,6 +3361,19 @@ class StereoSim {
|
||||
_drawAngleArc(center, dir1, dir2, angleDeg, radius, color) {
|
||||
const n1 = dir1.clone().normalize();
|
||||
const n2 = dir2.clone().normalize();
|
||||
|
||||
// Right angle → draw the conventional square corner marker, not an arc.
|
||||
if (Math.abs(angleDeg - 90) < 0.5) {
|
||||
const r = radius * 0.7;
|
||||
const p1 = center.clone().addScaledVector(n1, r);
|
||||
const p2 = center.clone().addScaledVector(n2, r);
|
||||
const p3 = p1.clone().addScaledVector(n2, r); // outer corner
|
||||
const geo = new THREE.BufferGeometry().setFromPoints([p1, p3, p2]);
|
||||
const mat = new THREE.LineBasicMaterial({ color: new THREE.Color(color), transparent: true, opacity: 0.85 });
|
||||
this._angleGroup.add(new THREE.Line(geo, mat));
|
||||
return;
|
||||
}
|
||||
|
||||
const angleRad = angleDeg * Math.PI / 180;
|
||||
const steps = Math.max(8, Math.round(angleDeg / 5));
|
||||
const pts = [];
|
||||
|
||||
Reference in New Issue
Block a user