Skip to content

entity

实体相关 CLI 命令。

cmd_delete(fmt, file_id, ids)

删除指定实体(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\entity.py
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
def cmd_delete(fmt: str, file_id: str | None, ids: str) -> None:
    """删除指定实体(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    try:
        delete_items = parse_entity_ids(ids, file_id)
    except ValueError as e:
        output_error(str(e), fmt)

    async def _run():
        client = await get_client()
        await client.delete_geometry(delete_items)
        return {
            "success": True,
            "deleted_count": len(delete_items),
            "message": f"已成功删除 {len(delete_items)} 个实体",
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "删除实体失败")

cmd_entity_types(fmt)

列出 Dimine 实体类型的枚举值与中文名称映射表。

Source code in dimine_python_sdk\cli\commands\entity.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def cmd_entity_types(fmt: str) -> None:
    """列出 Dimine 实体类型的枚举值与中文名称映射表。"""
    if fmt == "text":
        lines = ["# Dimine 实体类型列表", ""]
        lines.append("| 枚举值 | 名称 | 中文描述 |")
        lines.append("|--------|------|----------|")
        for code in sorted(ENTITY_TYPE_CN.keys()):
            info = ENTITY_TYPE_CN[code]
            lines.append(f"| {code} | {info['name']} | {info['cn']} |")
        lines.append("")
        lines.append(f"共 {len(ENTITY_TYPE_CN)} 种实体类型")
        output_result("\n".join(lines), fmt="text")
    else:
        result = {}
        for code in sorted(ENTITY_TYPE_CN.keys()):
            info = ENTITY_TYPE_CN[code]
            result[str(code)] = {"name": info["name"], "cn": info["cn"]}
        output_result({"entity_types": result, "total_count": len(ENTITY_TYPE_CN)}, fmt="json")

cmd_get_selected(fmt, page_size, page)

获取用户在当前场景中手动选中的对象列表(需 Dimine 运行)。

Source code in dimine_python_sdk\cli\commands\entity.py
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
def cmd_get_selected(fmt: str, page_size: int, page: int) -> None:
    """获取用户在当前场景中手动选中的对象列表(需 Dimine 运行)。"""
    page_size = safe_int(page_size)
    page = safe_int(page)

    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    async def _run():
        client = await get_client()
        selected = await client.get_selected(page_size=page_size, page_num=page)
        items = [fmt_selected_item(item) for item in selected.ids]
        return {
            "total_count": selected.total_count,
            "page_size": selected.page_size,
            "page_num": selected.page_num,
            "count": len(items),
            "entities": items,
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "获取选中实体失败")

cmd_select(fmt, file_id, ids, mode)

选中或取消选中实体(需 Dimine 运行)。

支持两种传参方式: - 位置参数: select [--mode ...] - 命名参数: select --file --ids [--mode ...]

Source code in dimine_python_sdk\cli\commands\entity.py
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
def cmd_select(fmt: str, file_id: str | None, ids: str | None, mode: str) -> None:
    """选中或取消选中实体(需 Dimine 运行)。

    支持两种传参方式:
    - 位置参数: select <file_id> <entity_ids> [--mode ...]
    - 命名参数: select --file <file_id> --ids <entity_ids> [--mode ...]
    """
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    if not ids:
        output_error("请提供实体ID:--ids id1,id2 或位置参数 <file_id> <entity_ids>", fmt)

    from dimine_python_sdk.models.conn import SelectMode

    valid_modes = {"replace": SelectMode.REPLACE, "add": SelectMode.ADD, "remove": SelectMode.REMOVE}
    if mode not in valid_modes:
        output_error(f"无效的选择模式 '{mode}',可选值: {list(valid_modes.keys())}", fmt)

    try:
        geometry_list = parse_entity_ids(ids, file_id)
    except ValueError as e:
        output_error(str(e), fmt)

    async def _run():
        client = await get_client()
        result = await client.select_geometry(geometry_list, mode=valid_modes[mode])
        items = [fmt_selected_item(item) for item in result]
        return {
            "mode": mode,
            "file_id": file_id or "",
            "current_selected_count": len(items),
            "selected_entities": items,
        }

    try:
        result = asyncio.run(_run())
        output_result(result, fmt)
    except Exception as e:
        handle_sdk_error(e, fmt, "选中操作失败")

register_commands(subparsers, format_parent)

向 subparsers 注册实体相关子命令。

Source code in dimine_python_sdk\cli\commands\entity.py
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
def register_commands(subparsers, format_parent) -> None:
    """向 subparsers 注册实体相关子命令。"""
    subparsers.add_parser("entity-types", parents=[format_parent], help="列出实体类型枚举及中文名")

    p = subparsers.add_parser("get-selected", parents=[format_parent], help="获取当前选中实体")
    p.add_argument("--page-size", type=int, default=100, help="每页返回数量,默认100")
    p.add_argument("--page", type=int, default=1, help="页码,默认1")

    p = subparsers.add_parser("select", parents=[format_parent], help="选中/取消选中实体")
    p.add_argument("file_id", nargs="?", default=None, help="文件ID(位置参数)")
    p.add_argument("entity_ids", nargs="?", default=None, help="逗号分隔的实体ID列表(位置参数)")
    p.add_argument("--file", default=None, dest="file_id_opt", help="文件ID(命名参数)")
    p.add_argument("--ids", default=None, dest="ids_opt", help="逗号分隔的实体ID列表,或 - 从 stdin 读取(命名参数)")
    p.add_argument("--mode", default="add", choices=["replace", "add", "remove"], help="选择模式(默认: add)")

    p = subparsers.add_parser("delete", parents=[format_parent], help="删除实体")
    p.add_argument("--file", default=None, dest="file_id", help="文件ID,使用 --ids 逗号列表时必需")
    p.add_argument("--ids", required=True, help="逗号分隔的实体ID列表,或 - 从 stdin 读取")

    p = subparsers.add_parser("show", parents=[format_parent], help="显示实体")
    p.add_argument("--file", default=None, dest="file_id", help="文件ID,使用 --ids 逗号列表时必需")
    p.add_argument("--ids", required=True, help="逗号分隔的实体ID列表,或 - 从 stdin 读取")

    p = subparsers.add_parser("hide", parents=[format_parent], help="隐藏实体")
    p.add_argument("--file", default=None, dest="file_id", help="文件ID,使用 --ids 逗号列表时必需")
    p.add_argument("--ids", required=True, help="逗号分隔的实体ID列表,或 - 从 stdin 读取")

    p = subparsers.add_parser("exclusive-show", parents=[format_parent], help="排他显示实体")
    p.add_argument("--file", default=None, dest="file_id", help="文件ID,使用 --ids 逗号列表时必需")
    p.add_argument("--ids", required=True, help="逗号分隔的实体ID列表,或 - 从 stdin 读取")