分享
查看: 1966|回复: 0

[分享] ThingJS创建多边形区域,仅需不到50行代码

[复制链接]

ThingJS创建多边形区域,仅需不到50行代码

发表于 2020-9-17 17:20:33 来自 分享 阅读模式 倒序浏览
zzv_icon1966 zzr_icon0 查看全部

一个区域是对显示器一块空间的描述,这个空间可以是矩形,多边形和椭圆。在仿真场景中,创建多边形区域是常见需求,ThingJS官方示例需要不到50行代码!

ThingJS创建多边形区域,仅需不到50行代码

矩形区域和圆形区域都很好画,大部分建模工具可直接拖拽生成,但多边形区域则需要确定多边形要经过的点,得出多边形的最终形状。

ThingJS绘制多边形区域,以矩形和圆形为例,效果展示如下图。

ThingJS创建多边形区域,仅需不到50行代码

ThingJS在线平台通过获取多个点坐标来确定多边形的形状,例如矩形获取4个世界坐标系下的坐标组合,构成多边形或矩形的点。


  1. var points = [[0, 0, 0], [5, 0, 0], [5, 0, 5], [0, 0, 5]];
复制代码


如果是圆半径,获取圆半径和圆心世界坐标后,需要根据圆形和半径计算坐标点。

  1. var radius = 3;// 圆半径
  2. var center = [10, 0, 0]; // 圆心世界坐标
  3. // 根据圆形和半径计算坐标点
  4. var points = [];
  5. for (var degree = 0, y = 0; degree <= 360; degree += 10) {
  6. var x = Math.cos(degree * 2 * Math.PI / 360) * radius;
  7. var z = Math.sin(degree * 2 * Math.PI / 360) * radius;
  8. var pos = THING.Math.addVector([x, y, z], center);
  9. points.push(pos);
  10. }
复制代码


创建区域需要定义一个type属性PolygonRegion,传入点坐标并按照自己喜欢的样式,设置区域颜色、边框颜色或不透明度等。

完整官方示例供参考。

  1. /**
  2. * 说明:创建多边形区域
  3. */
  4. var app = new THING.App({
  5. url: 'https://www.thingjs.com/static/models/storehouse' // 场景地址
  6. });
  7. new THING.widget.Button('创建区域', function () {
  8. // 构成多边形的点(取世界坐标系下的坐标)
  9. var points = [[0, 0, 0], [5, 0, 0], [5, 0, 5], [0, 0, 5]];
  10. // 创建区域
  11. var region = app.create({
  12. type: 'PolygonRegion',
  13. points: points, // 传入世界坐标系下点坐标
  14. style: {
  15. regionColor: '#ff0000', // 区域颜色
  16. lineColor: '#00ff00', // 边框颜色
  17. regionOpacity: 1 // 不透明度 (默认是 0.5 半透明)
  18. }
  19. })
  20. })
  21. new THING.widget.Button('创建圆形区域', function () {
  22. var radius = 3;// 圆半径
  23. var center = [10, 0, 0]; // 圆心世界坐标
  24. // 根据圆形和半径计算坐标点
  25. var points = [];
  26. for (var degree = 0, y = 0; degree <= 360; degree += 10) {
  27. var x = Math.cos(degree * 2 * Math.PI / 360) * radius;
  28. var z = Math.sin(degree * 2 * Math.PI / 360) * radius;
  29. var pos = THING.Math.addVector([x, y, z], center);
  30. points.push(pos);
  31. }
  32. // 创建区域
  33. var region = app.create({
  34. type: 'PolygonRegion',
  35. points: points, // 点坐标
  36. style: {
  37. regionColor: 'rgb(0,0,255)', // 区域颜色
  38. }
  39. })
  40. })
  41. new THING.widget.Button('删除', function () {
  42. var regions = app.query('.PolygonRegion');
  43. regions.destroy();
  44. })
复制代码


ThingJS让3D开发越来越简单,推动3d商业项目快速落地!


avatar
游客~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

130700ppkpl8x3t7tt1b1t