0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HT for Web (Hightopo) 使用心得(3)- 吸附与锚点

图扑-数字孪生 来源:物联网袋鼠 作者:物联网袋鼠 2023-10-12 10:44 次阅读

吸附与锚点是 HT for Web 中两个比较重要的概念。这两个概念在执行交互和动画时会经常被用到。

吸附,顾名思义,是一个节点吸附到另一个节点上。就像船底的贝类一样,通过吸附到船身,在船移动的时候自己也会跟着移动;而锚点,则决定了哪个位置是该节点的坐标点位置。这里继续以船舶为例,锚点就是船舶抛锚后船锚所在点,只不过船的锚点在船外面,而 HT 节点的锚点通常在其中心。并且这里的锚链是刚性的不能弯曲。

吸附

HT 既支持 2D 吸附,也支持 3D 吸附。这里我们以 2D 为例说明一下其用法。在使用之前,有几个方法先在这里介绍一下:

getHost()和setHost(host)获取和设置吸附宿主对象,当节点吸附上宿主图元时,宿主移动或旋转时会带动所有吸附者。

getAttaches()获取吸附到自身的所有节点的ht.List类型数组。

onHostChanged(oldHost, newHost)当吸附宿主对象发生变化时回调该函数,可重载做后续处理。

handleHostPropertyChange(event)当吸附宿主对象属性发生变化时回调该函数,可重载做后续处理。

isHostOn(node)判断该图元是否吸附到指定图元对象上。

isLoopedHostOn(node)判断是否与指定图元形成环状吸附,如A吸附B,B吸附C,C吸附回A,则A,B和C图元相互环状吸附。

wKgaomUnXsCAU5zoABYSghk-0T0334.png

在上例中,我们创建了4个服务器,并且在他们之间配置了连线。另外我们在这里为它们配置了吸附关系:

Server 4 吸附到 Server 3, Server 3 吸附到 Server 2, Server 2 吸附到 Server 1。

这样,如果 Server 1 动,那么 Server 2 便会跟着动。由于 Server 3 吸附在 Server 2 上,Server 3 也会跟着移动。同理,Server 4 也会跟着 Server 3 移动。

由于前两篇文章已经讲过 2D 图纸及节点,连线的创建。这里主要是配置吸附关系。关键代码如下:

/**************** 分别创建 HT 节点并添加到图纸中 ************************/
// 创建4个服务器节点
const server1 = createServerNode(100, 100, 'Server 1 (Host)', {'label.color': 'red'});
const server2 = createServerNode(300, 100, 'Server 2');
const server3 = createServerNode(100, 300, 'Server 3');
const server4 = createServerNode(300, 300, 'Server 4');
/****************************** 创建连线 *************************************/
......
/****************************** 连线动画 *************************************/
......
/****************************** 设置吸附 *************************************/
server2.setHost(server1);
server3.setHost(server2);
server4.setHost(server3);

这里面主要的代码就是 setHost() 那三句。在设置了 Host 节点之后,我们可以通过 host.getAttaches() 方法获取所有吸附到 Host 上的所有节点。

const attaches = server1.getAttaches(); // 获取的 ht.List 长度为1,即只有 server2

需要注意的是,尽管这里获取的吸附节点个数为1,但由于吸附节点的递归关系,Server 3 和 Server 4 也会被间接吸附到 Server 1 上面。

吸附旋转

前面提过,设置吸附后的节点,不但会跟随 Host 节点移动,还会根据 Host 节点旋转,这是非常有用的一个功能。其逻辑由 HT for Web 内部实现,我们在这里调用即可。

wKgZomUnXsSAEfWWABaswcjWcRg266.png

锚点

如上图所示,4台服务器都围绕着一个中心点旋转,该中心点就是 Server 1 的锚点。同时,它也是 Server 1 坐标所在点。也就是说:锚点影响着节点的坐标位置,锚点同时也是节点旋转和缩放的中心点。

在 HT 中,锚点是Node上一个重要的概念。节点绘制的是一个矩形区域,而锚点是决定了矩形区域中哪个位置是节点的坐标点位置。

锚点的值是一个百分比数值,{x:0,y:0}是在区域左上角,{x:1,y:1}是在区域右下角,HT 默认以{x:0.5,y:0.5}为锚点,也就是图元中心点。如果为节点配置大于1或者小于0则锚点则该锚点将处于节点矩形区域之外。可以通过node.getAnchor和node.setAnchor获取和设置锚点,也可以通过node.getAnchorX、node.setAnchorX、node.getAnchorY、node.setAnchorY方法单独设置获取。

• getAnchor()和setAnchor(x, y | {x:0.5,y:0.5})获取和设置图元的锚点,锚点影响着节点坐标位置,锚点同时也是旋转和缩放的中心点

Hightopo 的官网示例从多个维度展示了锚点的作用:

wKgaomUnXseAcvQUAAraEXreQVw342.png

在 3D 场景中,其锚点原理上与 2D 类似,只不过这里增加了一个维度。获取和设置锚点的方法如下:

• getAnchor3d()和setAnchor3d(x, y, z | [x, y, z])获取和设置图元的 3D 锚点。需要注意的是,要想单独获取 Z 轴方向上的锚点,这里需要使用 node.getAnchorElevation 而不是 node.getAnchorZ

下图展示的是一个六面体在 3D 场景中的锚点位置。HT 节点默认的锚点是 {x: 0.5, y: 0.5, z: 0.5}。这里我们将其改成了 {x: 0, y: 0, z: 0},因此,这里的坐标轴显示在六面体的一角而不是中心位置。

wKgZomUnXsqAfkjvAAM3JN9-OJ0584.png

小结

本节我们主要介绍了 HT 的吸附和锚点功能。节点的吸附可以让节点跟随它所吸附的宿主对象一起移动或旋转。使用 HT 的 setHost() 方法可以设置节点的宿主对象,使用 getAttaches() 方法可以获取所有吸附到该宿主对象上的节点。此外,还介绍了节点旋转和缩放的中心点——锚点。锚点的值是一个百分比数值,HT 默认以 {x:0.5,y:0.5} 为锚点,也就是图元中心点。可以通过 node.getAnchor() 和 node.setAnchor(x, y | {x:0.5,y:0.5}) 等方法获取和设置锚点。


审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HT
    HT
    +关注

    关注

    0

    文章

    42

    浏览量

    30203
  • Hightopo
    +关注

    关注

    0

    文章

    2

    浏览量

    4153
收藏 人收藏

    评论

    相关推荐

    HT for Web (Hightopo) 使用心得(1)- 基本概念

    本章主要介绍了 HT for Web 中的一些基本概念,包括:基础数据 ht.Data、数据模型 ht.DataModel 和选择模型 ht
    的头像 发表于 09-11 10:45 506次阅读
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(1)- 基本概念

    HT for Web (Hightopo) 使用心得(4)- 3D 场景 Graph3dView 与 Obj 模型

    这里我们通过代码建立一个 3D 场景并添加一个 Obj 模型来介绍一下 HT for Web 在 3D 场景和模型加载方面的使用。
    的头像 发表于 11-20 11:05 276次阅读
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(4)- 3D 场景 Graph3dView 与 Obj 模型

    MPLAB ICD 3 及PICKIT3 使用心得及注意事项

    `MPLAB ICD 3 及PICKIT3 使用心得及注意事项,与发烧友们共同分享!`
    发表于 11-24 15:38

    滤波电容的使用心得

    图说滤波电容的使用心得,非常详细,不信你还不懂~
    发表于 07-18 15:23

    5G传输创新方案分析及研究

    不低于4小时。  (3)充分发挥现有各类机房、光缆资源优势,合理选点,灵活接入  的优势,是传输设备功率较小,按目前测算IPRAN2
    发表于 12-03 15:04

    关于Spartan6板子的使用心得

    给大家分享一下关于Spartan6板子的使用心得
    发表于 04-30 07:03

    TFT LCD使用心得

    TFT LCD使用心得体会的原因是,最近一段时间工作上一直在使用TFT LCD,主要是3.5寸LCD,以SAMSUNG的LTV350QV及其一些台湾的兼容产品为主。工作的内容就是把这些屏在我们的产品上应用起
    发表于 10-16 13:04 43次下载

    详细谈谈TFT LCD 的使用心得

    深入谈谈TFT LCD 的使用心得最近一段时间工作上一直在使用TFT LCD,主要是3、5 寸LCD,以SAMSUNG 的LTV350QV 及其一些台湾的兼容产品为主。工作的内容就是把这些屏在我们的产品上
    发表于 03-18 17:49 3次下载

    ADXL345芯片使用心得

    ADXL345芯片使用心得,介绍使用传感器过程的使用体会
    发表于 05-11 11:08 23次下载

    Django教程之Django的使用心得详细资料免费下载

    本文档的主要内容详细介绍的是Django教程之Django的使用心得详细资料免费下载。
    发表于 10-17 18:03 11次下载
    Django教程之Django的使<b class='flag-5'>用心得</b>详细资料免费下载

    合泰单片机使用心得 (转)

    合泰单片机使用心得 合泰单片机是台湾芯片,集成开发环境为HT-3000。大陆这边的芯片代理商是盛群半导体有限公司,官网上的程序用例都是由汇编编写的,当然也对C语言很好的支持,是标准C的子集。在工作中
    发表于 12-02 20:36 10次下载
    合泰单片机使<b class='flag-5'>用心得</b> (转)

    智慧服装工厂电子看板试用心得

    智慧服装工厂电子看板试用心得实现了企业生产的进度实时监控、现场拉式生产、生产节拍平衡和异常情况的反馈功能。而接下来我们主要讨论的是智慧服装工厂电子看板试用心得在生产线与仓库之间的物料配送体系,要谈到这个物料配送问题,则要首先考虑到物料的申请、准备、运输追踪和物料接收的流程
    的头像 发表于 02-17 18:02 767次阅读
    智慧服装工厂电子看板试<b class='flag-5'>用心得</b>

    HT for Web (Hightopo) 使用心得(2)- 2D 图纸、节点、连线 与基本动画

    概括来说,用 HT for Web 做可视化主要分为两部分,也就是 2D 和 3D。这两部分需要单独创建。在它们被创建完成后,我们再把它们集成到一起。 HT for Web 的 2D
    的头像 发表于 09-21 10:52 458次阅读
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(2)- 2D 图纸、节点、连线 与基本动画

    图扑 HT for Web 风格属性手册教程

    图扑软件明星产品 HT for Web 是一套纯国产化独立自主研发的 2D 和 3D 图形界面可视化引擎。HT for Web(以下简称 HT
    的头像 发表于 10-11 10:50 295次阅读
    图扑 <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> 风格属性手册教程

    HT for Web (Hightopo) 使用心得(5)- 动画的实现

    其实,在 HT for Web 中,有多种手段可以用来实现动画。我们这里仍然用直升机为例,只是更换了场景。增加了巡游过程。 使用 HT 开发的一个简单网页直升机巡逻动画(Hightopo
    的头像 发表于 11-29 11:04 323次阅读
    <b class='flag-5'>HT</b> for <b class='flag-5'>Web</b> (<b class='flag-5'>Hightopo</b>) 使<b class='flag-5'>用心得</b>(5)- 动画的实现