60 lines
3.5 KiB
Markdown
60 lines
3.5 KiB
Markdown
|
# 图层删除
|
|||
|
当删除一个节点时,该节点一定满足且只满足以下条件中的一条:
|
|||
|
1. 是一个Leaf节点,引用了其他的Element;
|
|||
|
2. 是一个Folder节点,没有GroupElement引用,没有引用任何其他节点(因为是Folder);
|
|||
|
3. 是一个Folder节点,存在对应的GroupElement引用。
|
|||
|
|
|||
|
其中,对于第1条,由于Leaf节点被删除只影响其父亲Folder的属性,所以显然在删除Leaf节点时是绝对安全的。
|
|||
|
|
|||
|
对于第2条,对于其父亲Folder,其被删除只影响其父亲Folder的属性,所以不会影响其父亲;对于其孩子,有可能存在以下情况:
|
|||
|
1. 孩子中不存在任何被引用的情况:删除安全;
|
|||
|
2. 孩子中存在Folder节点被GroupElement引用,不安全,需要手动将情况转换为第1条后才可以删除。
|
|||
|
|
|||
|
对于第3条,必须首先手动解除其本身的引用,然后将转变为第2条。
|
|||
|
|
|||
|
# 图元删除
|
|||
|
**显然**,无论是什么种类的图元,删除一个图元会影响到的元素只有引用它的图层,所以我们将SimpleElement与GroupElement合并成一种情况讨论。
|
|||
|
|
|||
|
当删除一个图元时,该图元一定满足且只满足以下条件中的一条:
|
|||
|
1. 是一个GraphicElement,未被其他图层引用;
|
|||
|
2. 是一个GraphicElement,被其他图层引用。
|
|||
|
|
|||
|
对于第1条,删除绝对安全。
|
|||
|
|
|||
|
对于第2条,将引用关系手动解除后,删除安全。
|
|||
|
|
|||
|
# 图层移动
|
|||
|
## 条件分析
|
|||
|
图层移动时,显然,被移动的节点只影响它本身及它的子图层,
|
|||
|
移动的目标节点只影响它本身及它的父图层,那么:
|
|||
|
|
|||
|
(1) 被移动的图层一定满足且只满足以下条件中的一条:
|
|||
|
1. 是一个Folder节点,无对应的GroupElement引用,子节点无引用GroupElement;
|
|||
|
2. 是一个Folder节点,无对应的GroupElement引用,子节点存在引用GroupElement;
|
|||
|
3. 是一个Folder节点,存在对应的GroupElement引用;
|
|||
|
4. 是一个Leaf节点,引用了GroupElement;
|
|||
|
5. 是一个Leaf节点,未引用GroupElement。
|
|||
|
|
|||
|
(2) 目标FolderLayer一定满足且只满足以下条件中的一条:
|
|||
|
1. 自身无对应的GroupElement引用,无父节点有GroupElement引用;
|
|||
|
2. 自身无对应的GroupElement引用,存在父节点有GroupElement引用;
|
|||
|
3. 自身存在对应的GroupElement引用。
|
|||
|
|
|||
|
显然,以上条件的全组合可以覆盖所有情况。
|
|||
|
由于:
|
|||
|
- `(1) 1` 与 `(2) 中的任一条件`进行组合显然是绝对安全的;
|
|||
|
- `(1) 3` 中自身提供的GroupElement并不会影响移动;
|
|||
|
- `(1) 5` 与 `(2) 中的任一条件`进行组合显然是绝对安全的;
|
|||
|
- `(1) 中的任一条件` 与 `(2) 1` 进行组合显然是绝对安全的。
|
|||
|
|
|||
|
所以接下来对于除去以上情况的所有组合情况进行讨论。
|
|||
|
## 讨论证明
|
|||
|
### `(1) 2` - `(2) 2`
|
|||
|
当且仅当被移动的图层的子节点引用的GroupElement 与 目标图层父节点提供的GroupElement 相同时,移动不安全。
|
|||
|
### `(1) 4` - `(2) 2`
|
|||
|
当且仅当被移动的图层引用的GroupElement 与 目标图层父节点提供的 GroupElement 相同时,移动不安全。
|
|||
|
### `(2) 3` 的特殊讨论
|
|||
|
当且仅当自身提供的GroupElement 被 被移动图层或其子节点引用时,需要处理其自身情况,否则无视其自身提供的GroupElement,与 `(2) 1` 或 `(2) 2` 视为同情况处理。
|
|||
|
|
|||
|
## 结论
|
|||
|
当且仅当被移动的图层或其子节点所引用的GroupElement 与 目标图层或其父节点所提供的GroupElement 相同时,移动不安全;其余情况均安全。
|