Python 开发环境

可以在交互式 Python 控制台中或从 Python 编辑器执行 Python 代码。

Python 控制台

Python 控制台具有两种模式:

  1. 交互模式:直接执行 Python 代码。
  2. 输出模式:显示运行脚本的打印和错误消息。

要获取交互式 Python 控制台,请打开控制台视图(窗口 > 显示控制台),然后从工具条中小三角形下方的下拉列表中选择 Python 控制台

控制台菜单
打开交互式 Python 控制台

默认情况下,系统会要求您选择所需的解释程序。 或者,您可以在首选项中配置默认的控制台解释程序(编辑 > 首选项 > Python > 交互式控制台 > 默认解释程序)。

默认解释程序
为交互式 Python 控制台选择解释程序

交互式 Python 控制台
Python 3.11 解释程序的交互式 Python 控制台

您可以同时打开多个控制台视图(控制台下拉菜单中的新建控制台视图)并为其分配不同的控制台。 例如,并排放置一个脚本输出控制台和一个交互式控制台会很方便。

多个控制台
多个控制台 - 一个用于脚本输出,另一个是交互式控制台

在交互式控制台中,可以键入特定的 CityEngine API 命令以及常规的 Python 命令。 要执行命令行,请按 Enter 键。 使用 Ctrl+空格键显示命令完成弹出窗口,该窗口可根据您的键入显示可能的命令。 可通过按上箭头键来调用最后使用的命令。

命令补全
交互式控制台中的命令补全

有关可用 CityEngine 函数的列表,请参阅按类别的命令命令参考

控制台脚本执行控件

控制台工具栏上有许多脚本执行控制按钮,用于停止和重新启动脚本以及关闭控制台。

控制台脚本执行控件
控制台脚本执行控件

Python 编辑器

Python 编辑器提供了一种更为方便的脚本编辑和执行方式。 通过文件 > 新建 > Python 模块来创建新的脚本模块。 选择当前工程的脚本文件夹作为 Source Folder,并为模块指定一个名称

新建 Python 脚本
新建 Python 脚本(模块)

共有四个可用的模块模板:

<空>

创建空模板

模块:类

创建空 Python 类

模块:导出

创建回调调用以便与基于 Python 的导出器搭配使用

模块:主

创建可执行脚本

Python 模块模板
Python 模块模板

选择 CityEngine 工程的脚本文件夹作为源文件夹,设置模块的名称并选择一个模板。

通过此对话框创建的新模块将包含以下行。

import sys
if sys.platform.startswith('java'):
    from scripting import *
else:
    from cityengine import *

# get a CityEngine instance
ce = CE()

  • 一个导入 API 特定的 scripting (Jython) 或 cityengine (Python 3) 模块的 import 语句。
  • 系统将根据这个模块创建主实例 ce,该实例允许调用所有 CityEngine Python 命令

运行脚本

要在编辑器中执行脚本,请在菜单中选择 Python > 运行脚本或按 F9 键。 (焦点必须位于编辑器区域中的 Python 脚本上才能启用 Python 菜单)。

可通过从输出控制台工具条中选择终止(或按 Ctrl+Alt+C 键)来取消所有正在运行的 Python 脚本。 如果输出控制台不可见,请使用窗口 > 显示控制台打开控制台视图。

与交互式控制台一样,可以使用 Ctrl+空格键来触发命令完成。

您将在下方看到主模板的默认部分为黑色,而所添加的代码为绿色。 该脚本可将所选模型作为 .obj 文件导出到当前工程的 model 文件夹中。

Python 高亮代码块

要使用上面的代码,请复制以下代码块:

import sys
if sys.platform.startswith('java'):
    from scripting import *
else:
    from cityengine import *

# get a CityEngine instance
ce = CE()

def export(objects):
    dir = ce.toFSPath("models/")
    name = "pythonTriggeredExport" 
    settings = OBJExportModelSettings()
    settings.setBaseName(name)
    settings.setOutputPath(dir)
    ce.export(objects, settings)

if __name__ == '__main__':
    export(ce.selection())

导入模块

默认情况下,脚本可以看到当前工程的“scripts”文件夹中的所有模块以及任何内置模块(内置模块在 Jython 2.7 和 Python 3 之间有所不同)。

>>> import random
>>> random.randint(0,100)
42

要导入自定义模块/脚本,其父文件夹需为“python path”的一部分。 有两种修改“python path”的方法:

  • 在代码中,通过编辑“sys.path”,例如:
    import sys
    sys.path.append("... path to module X ...")
    import X
  • 在 UI 中,通过在工程属性中的“外部库”下添加路径(例如,另一个工程的“scripts”文件夹):

脚本快捷菜单

要快速启动 Python 脚本,可以将其放在脚本菜单脚本 > 添加脚本中。

另请参阅