MicroCity笔记MicroCity笔记
笔记
  • Microcity Desktop 文档
  • Microcity Web 文档
  • 其它

    • 仿真框架(港口)说明文档
    • 模型/库资源
  • GitHub

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
    • MicroCity Web 在线环境
  • Gitee

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
  • zhhuu.top (自建修改)

    • MicroCity Web (fork) 仓库
    • MicroCity Web (fork) 在线环境
  • 简体中文
  • English
笔记
  • Microcity Desktop 文档
  • Microcity Web 文档
  • 其它

    • 仿真框架(港口)说明文档
    • 模型/库资源
  • GitHub

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
    • MicroCity Web 在线环境
  • Gitee

    • MicroCity Desktop 仓库
    • MicroCity Web 仓库
  • zhhuu.top (自建修改)

    • MicroCity Web (fork) 仓库
    • MicroCity Web (fork) 在线环境
  • 简体中文
  • English
  • MicroCity Web文档

    • 目录
    • 1.简介

      • 1.1 MicroCity 的功能
    • 2.入门指南

      • 2.1 滚动立方体
      • 2.2 搜索国家
    • 3.用户界面

      • 3.1 用户界面概览
      • 3.2 编辑脚本
      • 3.3 运行脚本
      • 3.4 浏览场景
    • 4.脚本接口

      • 4.1 SI 概述
      • 4.2 操作系统
      • 4.3 场景和对象
      • 4.4 离散事件仿真
      • 4.5 混合整数规划
    • 附录

      • Lua参考手册
      • 从空间数据到物流模型

4.3 场景和对象

场景库被设计用来控制场景画布以及其中的对象。

场景

这部分功能包括设置场景、添加查找对象和坐标转换工具。

scene.setenv (opttab)

根据opttab中的选项设置场景。无返回值。选项列表:

  • clear: 如果设置为 true,则清除场景中的所有对象。默认为 false。这可在脚本运行中使用,因为脚本开始运行时场景会被自动清理。
  • camtype: 将相机设置为透视 ("persp") 或正交 ("ortho") 投影。默认为 "persp"。
  • grid: 在xz平面 ("plane") 或单位球面上 ("sphere") 设置参考网格。默认为 "none"。
  • bgcolor: 设置背景颜色。可使用颜色字符串如 "black" 或 "#000000"。默认为 "white"。
  • rotspeed: 鼠标拖动旋转速度。默认为 1。
  • transpeed: 鼠标拖动平移速度。默认为 1。
  • near: 相机视锥近平面。默认为 2。
  • far: 相机视锥远平面。默认为 3000。

以下是设置相机投影和背景颜色的示例代码:

scene.setenv({camtype='ortho', bgcolor='black'})

scene.addobj (type [, opttab])

将一个特定类型和选项的对象添加到场景的(0, 0, 0)位置。返回这个对象。类型包括:

  • "points": 3D 离散点。使用以下选项: vertices, selectable, color, opacity, hcolor, size。
  • "polyline": 3D 折线。使用以下选项: vertices, selectable, color, opacity, hcolor, size。
  • "polygon": 2D 多边形,位于 xy 平面并朝 z(size) 方向挤压。使用以下选项: vertices, selectable, color, opacity, hcolor, size。
  • "mesh": 网格。使用以下选项: vertices, selectable, color, opacity, hcolor。
  • "box": 具有六个面的盒子。使用以下选项: width, height, length, selectable, color, opacity, hcolor。
  • "sphere": 球体。使用以下选项: radius, segments, selectable, color, opacity, hcolor。
  • "label": 始终朝向摄像机的文本标签。使用以下选项: text, font, selectable, color, opacity, hcolor, size。
  • "light": 始终指向(0, 0, 0)的方向光。使用不透明度选项。
  • ".json": Threejs JSON 文件。使用以下选项: selectable, hcolor。
  • ".gltf": GLTF 文件。使用以下选项: selectable, hcolor。
  • ".glb": GLB 文件。使用以下选项: selectable, hcolor。
  • ".geojson": GeoJSON 文件。使用以下选项: selectable, color, opacity, hcolor。

opttab 中的选项列表:

  • vertices: 一个数组,其中每三个数字代表一个三维点(x,y,z)。对于网格,每三个点组成一个三角形。法线遵循右手定则。默认为空。
  • width: 以x轴测量的盒子宽度。默认为1。
  • height: 以y轴测量的盒子高度。默认为1。
  • length: 以z轴测量的盒子长度。默认为1。
  • size: 厚度或宽度。默认为1。
  • radius: 球体的半径。默认为1。
  • segments: 对于球体网格的水平和1/2垂直分段。默认为32。
  • selectable: 如果为true,则可以选择该对象。默认为true。
  • color: 材质颜色,例如"red"或"#FF0000"。默认为"gray"。
  • hcolor: 如果被选中则高亮显示的颜色。默认为"red"。
  • opacity: 材质的透明度。默认为1。
  • name: 一个字符串,稍后可以被scene.getobj使用。默认为""。
  • text: 标签所使用的文本。默认为""。
  • font: 标签所使用的字体。默认为"Arial"。

以下是向场景添加对象的一些示例:

scene.setenv({grid='plane'})                                                 --设置一个平面网格
scene.addobj("points", {vertices={0,0,0, 5,5,5}, size=5})                    --添加两个大小为5的点
scene.addobj("polyline", {vertices={0,0,0, -2,3,5, 4,6,7}, color='blue'})    --添加一个蓝色折线
scene.addobj("polygon", {vertices={-1,-1,0, -1,1,0, 1,1,0, 1,-1,0}, size=0}) --添加一个二维多边形
scene.addobj("label", {text="hello", size=5})                                --添加一个标签
scene.render()                                                               --渲染场景

scene.getobj (name)

遍历场景,并返回第一个匹配名称的对象。相机和选定的对象可用"camera"和"selected"找到。

scene.tovector (radius, phi, theta)

从球坐标转换返回 x、y、z。

scene.topolar (x, y, z)

从向量返回球坐标:半径、phi、theta。

scene.render ([ms])

渲染场景并检查浏览器,类似于 os.getready,然后返回结果。可以通过 ms 参数控制渲染之间的间隔时间(毫秒)。

对象

这部分函数控制场景中的对象。请注意,调用 obj:func(args) 是 scene.func(obj, args) 的语法糖。

obj:getpos ()

返回对象的位置:x、y、z。

obj:setpos (x, y, z)

设置对象的位置:x、y、z。如果对象是正交摄像机,则 z 也用作摄像机的缩放值。

obj:getrot ()

返回对象的旋转(弧度):x、y、z。

obj:setrot (x, y, z)

设置对象的旋转(弧度):x、y、z。

obj:getscale ()

返回对象的缩放:x、y、z。

obj:setscale (x, y, z)

设置对象的缩放:x、y、z。

obj:getchildren ()

获取所有子对象并将它们放入一个表作为返回值。

obj:setchildren (childtab)

将表 childtab 中的所有对象设置为该对象的子对象。

obj:getparent ()

返回对象的父级对象。

obj:setparent ([parent])

设置对象的父级对象。对象可以没有父对象。

obj:getmat ()

获取对象的材质信息表。信息列表:

  • type:材质类型字符串,比如"MeshBasicMaterial"。
  • map:纹理ID号。
  • color:颜色字符串,例如"red"、"rgb(250, 0,0)"、"rgb(100%,0%,0%)"、"hsl(0, 100%, 50%)"、"#FF0000"、"#f00"。
  • opacity:表示材质透明度的数字。

obj:setmat (opttab)

从opttab中设置对象的材质。选项列表:

  • type:材质类型字符串,比如"MeshBasicMaterial"。
  • map:纹理ID号或图像文件路径或URL,例如"map.jpg"。
  • color:颜色字符串,例如"red"或"#FF0000"。
  • opacity:表示材质透明度的数字。

obj:getvertices ()

返回对象的几何体的顶点数组和索引数组(如果有)。

obj:setvertices (vertices [, indices])

设置对象的几何体的顶点数组和索引数组(如果有)。

obj:getdata ()

返回存储对象的自定义数据的表格。请参考2.2 Searching for Countries获取示例代码。

obj:setdata (datatab)

将 datatab 中的 (key, value) 写入对象的自定义数据字段中。

obj:tojson (fpath)

将对象写入到指定路径的 Threejs JSON 文件中。

obj:delete ()

递归删除对象及其所有子对象。

本文使用ChatGPT翻译,如有遗漏请反馈。

Last Updated:
Contributors: huuhghhgyg
Prev
4.2 操作系统
Next
4.4 离散事件仿真