fix:修复释放节点的bug
This commit is contained in:
@@ -102,8 +102,13 @@ import { Container } from "./container";
|
||||
dragStartY = null;
|
||||
|
||||
g6Instance.on('node:dragstart', ev => {
|
||||
const model = ev.item.getModel(),
|
||||
dragNode = this.engine.optionsTable[model.SVLayouter].behavior.dragNode;
|
||||
const model = ev.item.getModel();
|
||||
|
||||
if(model.SVModelType === 'pointer') {
|
||||
return;
|
||||
}
|
||||
|
||||
const dragNode = this.engine.optionsTable[model.SVLayouter].behavior.dragNode;
|
||||
|
||||
if(dragNode === false) {
|
||||
return;
|
||||
|
||||
+19
-6
@@ -1,5 +1,6 @@
|
||||
import { Bound, BoundingRect } from '../Common/boundingRect';
|
||||
import { Group } from '../Common/group';
|
||||
import { Vector } from '../Common/vector';
|
||||
import { Engine } from '../engine';
|
||||
import { LayoutGroupTable } from '../Model/modelConstructor';
|
||||
import { Element, Model, Pointer } from '../Model/modelData';
|
||||
@@ -41,12 +42,24 @@ export class Layouter {
|
||||
anchor = options.anchor || 0;
|
||||
|
||||
let target = item.target,
|
||||
targetBound: BoundingRect = item.target.getBound(),
|
||||
anchorPosition = item.target.G6Item.getAnchorPoints()[anchor];
|
||||
targetBound: BoundingRect = target.getBound(),
|
||||
anchorPosition = item.target.G6Item.getAnchorPoints()[anchor],
|
||||
center: [number, number] = [targetBound.x + targetBound.width / 2, targetBound.y + targetBound.height / 2],
|
||||
pointerPosition: [number, number];
|
||||
|
||||
anchorPosition = [anchorPosition.x, anchorPosition.y];
|
||||
|
||||
let anchorVector = Vector.subtract(anchorPosition, center),
|
||||
angle = anchorVector[0] === 0? 0: (Math.PI / 2 - Math.atan(anchorVector[1] / anchorVector[0])),
|
||||
len = Vector.length(anchorVector) + offset;
|
||||
|
||||
anchorVector = Vector.normalize(anchorVector);
|
||||
pointerPosition = Vector.location(center, anchorVector, len);
|
||||
|
||||
item.set({
|
||||
x: targetBound.x + targetBound.width / 2,
|
||||
y: targetBound.y - offset
|
||||
x: pointerPosition[0],
|
||||
y: pointerPosition[1],
|
||||
rotation: angle
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -56,7 +69,7 @@ export class Layouter {
|
||||
* @param container
|
||||
* @param models
|
||||
*/
|
||||
private fitCenter(container: Container, group: Group) {
|
||||
private fitCenter(container: Container, group: Group) {
|
||||
let width = container.getG6Instance().getWidth(),
|
||||
height = container.getG6Instance().getHeight(),
|
||||
viewBound: BoundingRect = group.getBound(),
|
||||
@@ -151,7 +164,7 @@ export class Layouter {
|
||||
* @param container
|
||||
* @param layoutGroupTable
|
||||
*/
|
||||
public layoutAll(container: Container, layoutGroupTable: LayoutGroupTable) {
|
||||
public layoutAll(container: Container, layoutGroupTable: LayoutGroupTable) {
|
||||
layoutGroupTable.forEach(item => {
|
||||
item.modelList.forEach(model => {
|
||||
model.G6Item = model.shadowG6Item;
|
||||
|
||||
+17
-11
@@ -72,24 +72,30 @@ export class ViewManager {
|
||||
*/
|
||||
private getFreedConstructList(layoutGroupTable: LayoutGroupTable): Model[] {
|
||||
let freedList: Model[] = [],
|
||||
freedGroup = null,
|
||||
freedGroupName = null;
|
||||
freedGroup: LayoutGroup = null,
|
||||
freedGroupName: string = null,
|
||||
removeModels: Model[] = [];
|
||||
|
||||
for(let group in layoutGroupTable) {
|
||||
let freedElements: Model[] = layoutGroupTable[group].element.filter(item => item.freed);
|
||||
layoutGroupTable.forEach((group, key) => {
|
||||
let freedElements: Model[] = group.element.filter(item => item.freed);
|
||||
|
||||
if(freedElements.length) {
|
||||
freedGroupName = group;
|
||||
break;
|
||||
freedGroupName = key;
|
||||
freedList = freedElements;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
freedGroup = layoutGroupTable[freedGroupName];
|
||||
freedGroup = layoutGroupTable.get(freedGroupName);
|
||||
|
||||
freedList.forEach(fItem => {
|
||||
freedGroup.element.splice(freedGroup.element.findIndex(item => item.id === fItem.id), 1);
|
||||
freedGroup.link.splice(freedGroup.link.findIndex(item => item.element.id === fItem.id || item.target.id === fItem.id));
|
||||
freedGroup.pointer.splice(freedGroup.pointer.findIndex(item => item.target.id === fItem.id));
|
||||
removeModels.push(...freedGroup.element.splice(freedGroup.element.findIndex(item => item.id === fItem.id), 1));
|
||||
removeModels.push(...freedGroup.link.splice(freedGroup.link.findIndex(item => item.element.id === fItem.id || item.target.id === fItem.id)));
|
||||
removeModels.push(...freedGroup.pointer.splice(freedGroup.pointer.findIndex(item => item.target.id === fItem.id)));
|
||||
});
|
||||
|
||||
removeModels.map(model => {
|
||||
const index = freedGroup.modelList.findIndex(item => item.id === model.id);
|
||||
freedGroup.modelList.splice(index, 1);
|
||||
});
|
||||
|
||||
return freedList;
|
||||
|
||||
Reference in New Issue
Block a user