修复:拷贝墙和洞的逻辑,撤销重做正确性

pull/1885/MERGE
ChenX 2 years ago
parent 41724dfe47
commit ef3622b241

@ -16,6 +16,8 @@ import { DirectionalLight } from '../DatabaseServices/Lights/DirectionalLight';
import { ObjectId } from '../DatabaseServices/ObjectId';
import { RoomFlatBase } from '../DatabaseServices/Room/Entity/Flat/RoomFlatBase';
import { RoomRegion } from '../DatabaseServices/Room/Entity/Region/RoomRegion';
import { RoomHolePolyline } from '../DatabaseServices/Room/Entity/Wall/Hole/RoomHolePolyline';
import { RoomWallBase } from '../DatabaseServices/Room/Entity/Wall/RoomWallBase';
import { ViewportEntity } from '../DatabaseServices/ViewportEntity';
import { WblockCloneFiler2 } from '../DatabaseServices/WblockCloneFiler';
import { Command } from '../Editor/CommandMachine';
@ -23,6 +25,7 @@ import { JigUtils } from '../Editor/JigUtils';
import { PromptStatus } from '../Editor/PromptResult';
import { userConfig } from '../Editor/UserConfig';
import { MoveMatrix } from '../Geometry/GeUtils';
import { UpdateWallHolesDataAndUpdateDraw } from '../Reactor/RoomHoleReactor';
import { AppToaster } from '../UI/Components/Toaster';
import { AdjustUCS } from './AdjustUCS';
import { HoleInBoard } from './DrawDrilling/HoleUtils';
@ -334,6 +337,21 @@ export class Command_Copy implements Command
e.AppendShowObjects(oldVe.ShowObjects);
e.UpdateScene();
}
else if (e instanceof RoomWallBase)
{
UpdateWallHolesDataAndUpdateDraw(e);
}
else if (e instanceof RoomHolePolyline)
{
let fullCopy = e.RelevancyWalls.length === (e.Points.length - 1) && e.RelevancyWalls.every(id =>
{
let oldId = GetOldObjectId(id);
return olds.has(oldId.Object as Entity);
});
if (!fullCopy)
e.Erase();//我们现在直接删除它,我们其实应该重新放置它,但是我们没做!
}
}
}
else

@ -1,4 +1,4 @@
import { Vector3 } from "three";
import { Vector2, Vector3 } from "three";
import { Matrix2 } from "../../../Geometry/Matrix2";
import { Arc } from "../../Entity/Arc";
import { Line } from "../../Entity/Line";
@ -75,7 +75,7 @@ export class GetLineParam
{
let param = this.GetParamAtPoint(p);
let np = this.GetPointAtParam(param);
return [param, np.distanceToSquared(p) < 1e-4];
return [param, Vector2.prototype.distanceToSquared.call(np, p) < 1e-4];
}
GetPointAtParam(param: number)

@ -24,9 +24,12 @@ export async function UpdateRelevanceWallHole(ents: CADObject[])
//先更新洞,因为洞可能会修复位置
for (let holeId of wall.RelevancyHoles)//更新关联的洞
{
if (holeId.IsErase) continue;
let hole = holeId.Object;
if (wall.IsErase)
hole.Erase();
UpdateHole(hole);//这里如果只更新洞,那么有可能关联的其他的墙会逃逸
}
@ -44,6 +47,8 @@ export async function UpdateRelevanceWallHole(ents: CADObject[])
for (let wallId of hole.RelevancyWalls)
{
if (wallId.IsErase) continue;
let wall = wallId.Object as RoomWallBase;
if (updated.has(wall)) continue;
@ -65,7 +70,7 @@ export async function UpdateRelevanceWallHole(ents: CADObject[])
/**
* ,
*/
function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)
export function UpdateWallHolesDataAndUpdateDraw(wall: RoomWallBase)
{
wall.Holes = [];
@ -141,7 +146,8 @@ function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)
else
{
let index = orgWall.RelevancyHoles.indexOf(hole.Id);
if (index < 0)
let holeData = orgWall.Holes[index];
if (!holeData)
{
hole.Erase();
return;
@ -149,8 +155,8 @@ function UpdateHoleFakerWallsAndUpdateDraw(hole: RoomHolePolyline)
updateHole = true;
let p1Param = orgWall.Holes[index].StartParam;
let p2Param = orgWall.Holes[index].EndParam;
let p1Param = holeData.StartParam;
let p2Param = holeData.EndParam;
//TODO:注意 这个实现导致的墙洞的尺寸发生变化! 在墙尺寸变化的时候
wall.StartPoint = paramGet.GetPointAtParam(p1Param);

Loading…
Cancel
Save