DrGraph - SVG模块之二:脚本修改

graph.svg 立即下载

DrGraph - SVG模块之二:脚本修改

手动修改

为了能明确修改对象,在XML显示的基础上,完成相应的内容更新。
比如美工做了一个灯的SVG图,是红色的灯,现在希望将其改为绿色。在这里插入图片描述

通过节点选择,选择目标界面对象所对应的XML节点
在这里插入图片描述
简单尝试一下,将目标节点的style属性修改为 fill:#00FF00,果然相应图元就成为绿色
在这里插入图片描述
是为手动。

脚本控制

当然,不能指望用户能用得这么深入,首先光培训就得N长时间,不划算;其次,也不好保存。
那就通过脚本方式,比较专业的用户编写一点代码,完成定制,最终用户就选选颜色、状态即可。

API

既然有脚本方式,那就需要为脚本提供一些API,方便使用。
比如颜色分量获取

if (SameText(funName, "GetRValue") || SameText(funName, "GetGValue") || SameText(funName, "GetBValue")) {
	int value = cRealize->Parameters[paramIndex++]->Variable->Value;
	int pos = SameText(funName, "GetRValue") ? 0 :
			  SameText(funName, "GetGValue") ? 1 : 2;
	if (pos)
		value >>= pos * 8;
	value &= 0xFF;
	Value = value;
}

又如xml操作处理

if (SameText(funName, "xmlFromFile")) {
	UnicodeString fileName = cRealize->Parameters[paramIndex++]->Variable->Value;
	if(FileExists(fileName) && InRunningMode) {
		CbwXML * xml = new CbwXML(fileName, "DrGraphXml");
		xml->Read();
		Value = int(xml);
	} else
		Value = 0;
} else if (SameText(funName, "xmlToFile")) {
	if(InRunningMode) {
		TObject * destObject = ObjectAtParameter(this, paramIndex++);
		UnicodeString fileName = cRealize->Parameters[paramIndex++]->Variable->Value;
		CbwXML * xml = dynamic_cast<CbwXML *>(destObject);
		if(xml)
			xml->RootNode->SaveToFile(fileName);
	}
} else if (SameText(funName, "xmlContent")) {
	if(InRunningMode) {
		TObject * destObject = ObjectAtParameter(this, paramIndex++);
		CbwXML * xml = dynamic_cast<CbwXML *>(destObject);
		if(xml)
			Value = xml->RootNode->GetHint(L"\n", true);
	}
} else if (SameText(funName, "xmlAttribute")) {
	TObject * destObject = ObjectAtParameter(this, paramIndex++);
	CbwXML * xml = dynamic_cast<CbwXML *>(destObject);
	UnicodeString attributePath = cRealize->Parameters[paramIndex++]->Variable->Value;
	TStrings * nodes = TTypeConvert::String2List(attributePath, L".");
	if(xml) {
		CbwXmlNode * currentNode = xml->RootNode;
		for(int i = 0; currentNode && i < nodes->Count - 1; ++i) {
			UnicodeString attr = nodes->Strings[i];
			CbwXmlNode * destNode = currentNode->NodeByName(attr);
			if(!destNode)
				destNode = currentNode->NodeByAttribute("name", attr);
			if(!destNode)
				destNode = currentNode->NodeByAttribute("id", attr);
			if(!destNode) {
				UnicodeString indexString = THelper::String::GetRegMatchAt(attr, L"(-?)\\d+", 0);
				if(indexString.Length()) {
					int index = THelper::String::GetRegMatchAt_Int(attr, L"(-?)\\d+", 0);
					DRGRAPH_MOD_IN(index, currentNode->ElementNumber);
					if(IS_IN_RANGE(index, 0, currentNode->ElementNumber - 1))
						destNode = currentNode->Elements(index);
				}
			}
			currentNode = destNode;
		}
		if(currentNode) {
			if (cRealize->Parameters.size() > 2 && InRunningMode) {
				UnicodeString attributeValue = cRealize->Parameters[paramIndex++]->Variable->Value;
				currentNode->AddAttribute(nodes->Strings[nodes->Count - 1], attributeValue);
			}
			Value = currentNode->AttributeValueByName(nodes->Strings[nodes->Count - 1]);
		} else {
			THelper::Loge(L"无法定位属性路径 %s, 请检查!!!", attributePath);
			Value = "";
		}
	}
	delete nodes;
}

或者是更新SVG图片

if (SameText(funName, "refreshSVG")) {	// void refreshSVG(TCbwObject image, String fileName)
	if(InRunningMode) {
		TObject * destObject = ObjectAtParameter(this, paramIndex++);
		TCbwImage * image = dynamic_cast<TCbwImage *>(destObject);
		UnicodeString fileName = cRealize->Parameters[paramIndex++]->Variable->Value;
		if(!FileExists(fileName)) {
			UnicodeString digitalString = THelper::String::GetRegMatchAt(fileName, L"(-?)\\d+");
			if(digitalString == fileName) {
				CBW_CAST(CbwXML, xml, digitalString.ToInt());
				if(xml) {
					fileName = THelper::File::GetPath_Debug() + L"templateSvgFile.svg";
					if(FileExists(fileName))
						DeleteFile(fileName);
					xml->RootNode->SaveToFile(fileName);
				}
			}
		}
		if(image)
			image->RefreshSVG(fileName);
	}
}

如此种种

脚本代码

在API的基础上,即可简单实现手动方式修改xml以改变SVG效果。
在这里插入图片描述
即每次调用xmlAttribute即可实现SVG某个xml节点的效果修改。如果需要协同处理效果,也就是多条xml节点的关联处理。多几句话的事。

planar-graph-to-svg:将平面图转换为 SVG 图像 平面图到 svg 将平面图转换为 SVG 字符串 例子 var toSVG = require ( 'planar-graph-to-svg' ) var ch = require ( 'convex-hull' ) var points = [ ] for ( var i = 0 ; i < 100 ; ++ i ) { points . push ( [ Math . random ( ) , Math . random ( ) ] ) } console . log ( toSVG ( ch ( points ) , points ) ) 输出: 安装 npm i planar-graph-to-svg 应用程序接口 var svg = require('planar-graph-to-svg')(edges,positions[,options]) edges是平面图 立即下载

相关推荐

SVG

SVG

c#(SVG)无刷新,动态执行Javascript处理SVG对象:包含SVG的 页面.aspx (一)

 ==========  包含SVG的 页面 ==============    设备布置图                window.moveTo(0,0);        window.resizeTo(screen.availWidth,screen.availHeight);        function refreshSVG(){          tscript.src="

迷茫 3389

【Qt】Qt6系列教程汇总_qt6教程

简介:QT相关电子书、建议和相关参考网址。

2401_87556657的博客 1185

DrGraph原理示教 - OpenCV 4 功能 - 二值化

二值化,也就是处理结果为0或1,当然是针对图像的各像素而言的1或0,对应于有无,也就是留下有用的,删除无用的,有用的部分,就是关心的部分在图像处理中,也不仅仅只是1或0,因为这两个值看起来都是黑的,人眼很难分辨清楚,那就放大一些,255或0,黑白就出来了目标识别、图像分割、目标提取等后续应用,很多会基于二值化的结果。所以图像分析的二值化处理是一个重要环节。

drgraph的博客 734

从零编写linux0.11 - 第二章 内核初始化

编程环境:Ubuntu Kylin 16.04 代码仓库:https://gitee.com/AprilSloan/linux0.11-project linux0.11源码下载(不能直接编译,需进行修改) 1.添加内核 进入内核后也不是马上进入main函数,上一章只是暂时设置gdt,此外还要设置idt和其他的一些初始化操作,这些内容也要使用汇编进行编写,此处采用AT&T格式的汇编。 以下为head.s的内容,为了简单起见,内容还是一个死循环。 .globl startup_32 startup_3

皓空Fly的博客 1265

生信入门(六)——单细胞分析(Seurat)

生信入门(六)——单细胞分析(Seurat) 文章目录生信入门(六)——单细胞分析(Seurat)一、数据导入1、数据来源2、数据导入二、标准预处理1、QC和选择细胞进行进一步分析2、规范化数据3、识别高度可变的特征(特征选择)4、缩放数据三、主成分分析(PCA)1、线性降维2、确定数据集的“维度”四、聚类细胞五、非线性降维(UMAP/tSNE)六、寻找差异表达的特征(簇生物标志物) 一、数据导入 1、数据来源 点击此处下载数据 数据说明:分析10X Genomics提供的外周血单细胞(PBMC)数据集,有

羊羊的博客 6万+

DrGraph原理示教 - OpenCV 4 功能 - 颜色空间

前段时间,甲方提出明确需求,让把软件国产化。稍微研究了一下,那就转QT开发,顺便把以前的功能代码重写一遍。至于在Ubuntu下折腾QT、OpenCV安装事宜,网上文章很多,照猫画虎即可。QT 6支持C++ 17,里面很多C++的新功能,用起来更为舒爽。QT Creator中,代码提示更快捷,代码折叠也很准确QT Creator中,文档生成更方便,配合Doxygen之后,自己都感觉更专业了当然,更让我高兴的是,QT直接支持最新版的OpenCV,以前还一直停留在2.3版。

drgraph的博客 1442

[QMT量化交易小白入门]-六十九、ETF动量评分策略,历史年化收益率107%

C . bar_date } 跳过') returnC . bar_date } 跳过') returnC . bar_date } 跳过') return作用:如果当前不是回测模式且不是最后一根K线,则记录日志并跳过本次任务。这是为了避免在实时交易中对尚未完成的数据进行处理。

木头大左的博客 2228

DrGraph原理示教 - OpenCV 4 功能 - 直方图

OpenCV直方图是一种可以对整幅图的灰度分布进行整体了解的图示。它是带有像素值(从0到255,不总是)的图在X轴上,在y轴上的图像对应的像素个数。通过观察图像的直方图,我们可以直观的了解图像的对比度、亮度、亮度分布等。在直方图中,横坐标表示图像中各个像素点的灰度级,纵坐标表示具有该灰度级的像素个数。直方图的左边部分显示了图像中较暗像素的数量,右边区域显示了更明亮的像素。直方图是非常常用的图像处理方法,有时在很多图像预处理中能起到特别好的效果。

drgraph的博客 1361

【零基础入门unity游戏开发——unity通用篇12】导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

导入导出unity资源包、设置编程工具、创建脚本(组件)规则、MonoBehaviour基类介绍、脚本模板(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 760

基于STM32、HAL库的TLV320AIC3204IRHBR音频接口芯片驱动程序设计

* 开启所有数字部分 */#define TLV320AIC3204_REG_LEFT_HEADPHONE_OUT_VOLUME 0x0C /* 左声道耳机输出音量 */#define TLV320AIC3204_REG_DIGITAL_AUDIO_PATH_CONTROL 0x05 /* 数字音频路径控制 */#define TLV320AIC3204_REG_ANALOG_HP_FILTER_CONTROL 0x34 /* 模拟耳机滤波器控制 *//* 最大音量 */

corlin6688的博客 521

DrGraph - 新起点

DrGraph - 新起点库图形组态电/气/液路原理图绘制梯形图虚拟面板图原理图与面板图映射脚本图像分析处理3D展示交互操作流程子图提取路径查找模拟电路定量分析数字电路分析虚拟操作故障模拟故障分析与定位潜在通路分析一令一展示...在线安装程序下载 又是一年春来到,播种的季节总是信心百倍,立不完的FLAG。游玩的时候进了一寺庙,看到一句话:心以静为贵,欲以寡为贵,穷以志为贵,富以仁为贵。原来喜欢立志是因为穷,心马上就静下来了。 心静后,继续立志,今年要把DrGraph软件上一个新台阶,主要做以下几方面: 库

drgraph的博客 366

YOLOv12改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov12精度提升

RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。

Limiiiing的博客 684

DrGraph原理示教 - OpenCV 4 功能 - 形态操作

OpenCV作为一个基础的或通用的图像处理,那肯定是需要支持不同的需求,象刚说的这些主体差异,功能也是存在了,只不过采用了相应的所谓专业术语来进行称呼,如梯度、礼帽与黑帽。这些结果可以为主体,但很多地方还想看看边界或轮廓,那就需要在这些主体之间进行差值,或是减法操作,这样,结果就是边缘,就象两个大小不同的同心圆,差值后就得到圆环。从OpenCV图像处理基本知识来看,膨胀腐蚀操作后,还有形态操作,如开运算、闭运算、梯度、礼帽与黑帽,感觉很多,其实,本质上就是批处理操作,如。如,梯度 = 膨胀 - 腐蚀。

drgraph的博客 636

Halcon那些事:Halcon缺陷检测检测印刷数字完整性

创建模板 create_shape_model模板匹配 find_shape_model。

十多年IT经验,专注机器视觉,智能制造半导体行业 764

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

python2+uiautomator2自动化测试脚本改python3+uiautomator2方法

python2+uiautomator2自动化测试脚本改python3+uiautomator2方法,逆向就是python3改python2 输出自动化报告修改 HTMLTestRunnerEN修改为HTMLTestRunner import HTMLTestRunnerEN #python2 import HTMLTestRunner #python3 “print” Pyt...

默金 1081

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

网课脚本教程 【基础】(2) 脚本制作规范

欢迎来到skeleton系列教程 :网课脚本编写教程 制作优良脚本应该有如下规范。 一: 做任何脚本,优先考虑制作发送 网络请求 的脚本 , 其次考虑制作自动化脚本。 意思就是,做任何脚本,如果你对抓包,发送网络请求可以熟悉掌握。那么优先考虑 发送请求脚本。 因为前端界面是会经常发生变动的!!! ,如果修改了一个元素的 ID,或者更改了一个模块, 你的整个自动化脚本很可能需要 重构。 但是后端接口 是不会经常发生变化的,比较稳定,就算修改,也能根据接口规则,局部修改脚本即可! 二: 如果遇到网络请求.

言小溪 的博客 5898

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

32bit 天堂2脚本修改资料大全【客户端+服务端】

该资料夹中所有教程资料全部适合天堂2初章32位服务端的脚本修改,已经1、2章相关客户端的修改。 https://pan.baidu.com/s/1RuGMFNgERd2JMYQpdceQwg 提取码: gbnr 转载于:https://www.cnblogs.com/kt007/p/10308702.html...

weixin_30339969的博客 1920

DrGraph - SVG模块之一:显示与节点选择

DrGraph - SVG模块之一:显示与节点选择显示SVG编辑生成目标子集SVG 对于虚拟面板中的元件,以前采用FLASH技术实现相应显示与交互,通过ActionScript进行通信。现在看来,FLASH好象势微,使用起来有点麻烦,需要一些设置。其次,做FLASH的人也少了,后续也不太方便。 那就用SVG来进行改造。 显示SVG 将SVG解析置于DLL中,应用程序直接调用DLL完成解析并生成PNG,然后再画出显示。 UnicodeString filename = FResponseNode->At

drgraph的博客 680

Vue2.0+AntvX6——画布graph

vue2.0 vue antv-x6 的画布基本常用的属性

ZMN0057的博客 5453

qt svg模块源码解析1

enum QXmlStreamReader::TokenType:此枚举指定读取器当前读取的类型。其中DTD 的目的是定义 XML 文档的结构。它使用一系列合法的元素来定义文档结构,与画图无关。用 QXmlStreamReader *const xml;读取svg文件,并解析。文档开始StartDocument,结尾EndDocument,注释都不需要关注。拿到标签名 localName,首先要对他们分类。如果标签为以下节点,分别返回不同的函数指针。解析标签名的首字母判断标签的含义,如下。

fuyouzhiyi的博客 1063

DrGraph群

915这几个数字,可能和我有缘,这不,今天就开一个QQ群. 群号:21732392 本群的主要目的,在于讨论基于图形化的电路分析及其应用,欢迎有兴趣的朋友加入.

ArWen的专栏 1109

javascript SVG的动画,脚本,事件

svg支持鼠标单击、鼠标移动和鼠标按下,动画,脚本响应事件。 svg支持鼠标事件的例子: "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> xmlns="http://www.w3.org/2000/svg"> stroke-width="2" fill="red">

seacean2000的专栏 8051

SVG窗口自适应脚本编写

SVG如果嵌入其他如iFrame,当获取到了iFrame的大小后,如何内部做自适应呢?这时只需要在onload事件里写函数,改变svg节点的tramsform,来达到自适应的过程。本实例svg用的是图也SVG编辑器(svgsvg.com)编辑的,svg节点的transform有部分浏览器支持,有部分浏览器不支持,支持的浏览器有谷歌,火狐等,IE不支持,Android 手机端也不支持。 以下是自适

ringgit的博客 1954

使用脚本动态操作 SVG 文档

使用脚本动态操作 SVG 文档 级别: 初级 陈珂 (chenke@snmobile.com), 技术总监,...

wenzi_li的专栏 194

SVG (SVG的概念 、SVG 实例 、SVG 在HTML中 、SVG 矩形 、SVG 圆形 、SVG 椭圆 、SVG 直线 、SVG 多边形、svg验证码 )

SVG的用来创建一个圆。一个半径80px的绿色圆圈绘制在红色矩形的正中央(向右偏移150px,向下偏移115px)。SVG文件可通过以下标签嵌入HTML文档、或者。不同于用像素来描绘的矩阵图像(JPG、PNG、GIF),SVG是和分辨率无关的;SVG的用来创建一个矩形,通过fill把背景颜色设为黄色。关闭标签的作用是关闭SVG元素和文档本身。......

qq_52301431的博客 1万+
上一篇: DrGraph - SVG模块之一:显示与节点选择
下一篇: 上班摸鱼软件
DrGraph
博客等级 码龄14年 228粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值