Skip to content

entity

实体相关 CLI 命令。

cmd_delete(fmt, file_id, ids)

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

Source code in dimine_python_sdk\cli\commands\entity.py
103
104
105
106
107
108
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
134
135
136
137
138
def cmd_delete(fmt: str, file_id: str | None, ids: str) -> None:
    """删除指定实体(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    from dimine_python_sdk.cli.utils._utils import resolve_file_id

    # 将文件名解析为文件 ID
    if file_id is not None:
        try:
            resolved_id = asyncio.run(resolve_file_id(file_id))
        except Exception as e:
            output_error(f"解析文件ID失败: {e}", fmt)
    else:
        resolved_id = file_id

    try:
        delete_items = parse_entity_ids(ids, resolved_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, entity_ids, mode)

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

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
def cmd_select(fmt: str, file_id: str, entity_ids: str, mode: str) -> None:
    """选中或取消选中实体(需 Dimine 运行)。"""
    err = require_remote_sdk()
    if err:
        output_error(err, fmt)

    from dimine_python_sdk.cli.utils._utils import resolve_file_id
    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)

    entity_id_list = [e.strip() for e in entity_ids.split(",") if e.strip()]
    if not entity_id_list:
        output_error("entity_ids 不能为空,请提供逗号分隔的实体ID列表", fmt)

    async def _run():
        resolved_id = await resolve_file_id(file_id)
        geometry_list = [{"file": resolved_id, "id": eid} for eid in entity_id_list]
        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": resolved_id,
            "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
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
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", help="文件ID")
    p.add_argument("entity_ids", help="逗号分隔的实体ID列表,如 entity_id1,entity_id2")
    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 读取")