开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (1)
master
master
分支 (1)
master
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (1)
master
node-sim
/
src
/
node_edge.cpp
node-sim
/
src
/
node_edge.cpp
node_edge.cpp 5.10 KB
一键复制 编辑 原始数据 按行查看 历史

#include <memory>
#include <spdlog/spdlog.h>
#include"node_edge.h"
#include"node_scene.h"
#include"FlowChartScene.h"
#include"node_graphics_edge.h"
#include"node_socket.h"
#include"node_node.h"
#include"node_graphics_node.h"
inline static bool NODEEDGEDEBUG = false;
unsigned int Edge::m_count = 20000;
Edge::Edge(std::weak_ptr <Scene> sence, std::weak_ptr<Socket> start_socket, std::weak_ptr<Socket> end_socket, EDGEPATHTYPE type)
:m_sence(sence),m_start_socket(start_socket),m_end_socket(end_socket),m_edgeType(type)
{
m_id = ++m_count;
spdlog::info("Edge is create");
}
Edge::Edge(std::weak_ptr <Scene> sence, EDGEPATHTYPE type)
: m_sence(sence),m_edgeType(type)
{
m_id = ++m_count;
//【240112】尚未构造
}
void Edge::initUi()
{
if (m_id > 29999)
{
spdlog::critical("Attention! edge id is more than limit");
};
if (m_start_socket.expired())
{
return;
}
//可能空操作后续注意
m_start_socket.lock()->setConnectedEdge(shared_from_this());
if (!m_end_socket.expired())
{
m_end_socket.lock()->setConnectedEdge(shared_from_this());
}
//根据类型生成 1.选择句 2. 父类强转子类? 3.swith
m_grEdge = nullptr;
if (m_edgeType == EDGEPATHTYPE::Line)
{
m_grEdge = new QDMGraphicsEdgeDirect(shared_from_this());
}
else if (m_edgeType == EDGEPATHTYPE::BezierCurve)
{
m_grEdge = new QDMGraphicsEdgeBezier(shared_from_this());
}
updatePosition();
if (NODEEDGEDEBUG)
{
qDebug() << "Edge From:" << m_grEdge->getPosSource() << "To" << m_grEdge->getPosDestination();
}
m_sence.lock()->getFcScene()->addItem(m_grEdge);
m_sence.lock()->addEdge(shared_from_this());
}
Edge::~Edge()
{
m_grEdge = nullptr;
spdlog::info("Edge is delete");
}
/**
* @brief remove_from_socket
* 1.将端点绑定的线,端点本省置为空指针
*/
void Edge::remove_from_socket()
{
if (!m_start_socket.expired()) //【逻辑】 如果edge没有开始端口了,设置开始端口中的edge为空
{
m_start_socket.lock()->cancelConnectedEdge();
}
if (!m_end_socket.expired())
{
m_end_socket.lock()->cancelConnectedEdge();
}
m_start_socket.reset();
m_end_socket.reset();
}
void Edge::remove()
{
remove_from_socket();
m_grEdge ->hide();
m_sence.lock()->getFcScene()->removeItem(m_grEdge);// 从场景中删除线,保护一下
m_sence.lock()->getFcScene()->update();
m_sence.lock()->removeEdge(shared_from_this()); //在场景中删除Edge
}
/**
* @brief updatePostion
* 1.m_grEdge->update();: 这一行代码调用 m_grEdge 对象的 update() 函数,更新边的绘制。update() 函数通常用于更新边的外观
*/
void Edge::updatePosition()
{
if (m_start_socket.expired() )
{
return;
}
auto source_pos = m_start_socket.lock()->getSocketPostion();
source_pos += m_start_socket.lock()->getNode().lock()->getGrNode()->pos();
m_grEdge->setPosSource(source_pos);//起点
if (!m_end_socket.expired())
{
auto end_pos = m_end_socket.lock()->getSocketPostion();
end_pos += m_end_socket.lock()->getNode().lock()->getGrNode()->pos();
m_grEdge->setPosDestination(end_pos);
}
else
{
m_grEdge->setPosDestination(source_pos);
}
m_grEdge->update(); //更新边的显示。这个操作通常在改变边的位置后执行,以确保边的新位置被正确显示。
if (NODEEDGEDEBUG)
{
//qDebug() << "SS:" <<m_start_socket.get() << "\nES" << m_end_socket.get();
//qDebug() << "Node title is:" << m_start_socket->getNode().lock()->getTitle() << "Node pos is:" << m_start_socket->getNode().lock()->getGrNode()->pos() << "\nStartSockect pos is" <<
// m_start_socket->getSocketPostion();
}
}
void Edge::setStartSocket(std::weak_ptr<Socket> start_socket)
{
m_start_socket = start_socket;
}
void Edge::setEndSocket(std::weak_ptr<Socket> end_socket)
{
m_end_socket = end_socket;
}
std::weak_ptr<Socket> Edge::getStartSocket() const
{
return m_start_socket;
}
std::weak_ptr<Socket> Edge::getEndSocket() const
{
return m_end_socket;
}
QDMGraphicsEdge* Edge::getGrEdge() const
{
return m_grEdge;
}
const rapidjson::Document Edge::serialize()
{
// 创建一个空的Document对象
rapidjson::Document d; // 创建JSON对象
d.SetObject();
// 创建value对象来表示节点
// rapidjson::Value nodeObj(rapidjson::kObjectType);
d.AddMember("id", m_id, d.GetAllocator());
d.AddMember("edge_type",(unsigned int)m_edgeType,d.GetAllocator());
d.AddMember("strat", m_start_socket.lock()->getId(), d.GetAllocator());
d.AddMember("end", m_end_socket.lock()->getId(), d.GetAllocator());
return d;
}
void Edge::deserialize(const rapidjson::Value& value)
{
if (value.HasMember("id"))
{
m_id = value["id"].GetUint();
}
if (value.HasMember("edge_type"))
{
m_edgeType = (EDGEPATHTYPE)value["edge_type"].GetUint();
}
if (value.HasMember("strat")&& value.HasMember("end"))
{
//指向序号所在的socket 1.找到scene 2.找到node下的入出端口, 3端口符合则赋值
for (const auto& node : m_sence.lock()->getNodes())
{
for (const auto& socket : node->getInputs() + node->getOutputs())
{
if (socket->getId() == value["strat"].GetUint())
{
m_start_socket = socket;
}
if (socket->getId() == value["end"].GetUint())
{
m_end_socket = socket;
}
}
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

C++重写nodeeditor的代码,目前写到了序列化反序列化。 暂时不太会有更新了。 代码水平一般,借鉴思路即可;
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/Distillation/node-sim.git
git@gitee.com:Distillation/node-sim.git
Distillation
node-sim
NodeSim
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /