资讯详情

水深注记采用渐变颜色的编程实现

最近有一个水深测量项目,业主要求水深结果必须按照其风格而不是海图格式提供。该格式的主要特点是:

(1)有水深点

(2)水深注入负号

(3)根据水深的大小给出不同颜色的水深点和注记赋值

显然,这种格式比海图格式复杂得多。海图格式一般只要求水深注记为大小数,不需要水深点,注记为单色。

由于时间短,博主时间短,编程没有实现。同事是手动实现的,不是很复杂。

首先利用CAD绘制点程序,批量绘制水深点,将水深值赋值Z属性,然后设置点格式样式。然后用博主编写的文字绘制程序将水深注入CAD将水深值赋值给文字的Z属性。最后,利用CAD根据预设的水深色标,快速选择工具,将水深点和水深注入彩色。虽然采用了阶梯色标 也就是说,水深对应一种颜色,但结果也很漂亮。

后来博主百度搜索了这个问题,网上相关信息不多,好像只有CASS该系统提供了这一功能,表明使用渐变色标记颜色的用途并不多。但是如何呢 有很多程序可以用程序绘制调色板。接下来,博主将根据水深值绘制调色板,实现水深点和上色功能。

具体功能实现分为两步:

第一步:设置水深最小值和水深最大值的颜色

第二步:匹配水深范围和颜色范围,根据单个水深计算相应的颜色。

具体界面如下:

修改如下:

颜色显示不如手动颜色好,但渐变效果比手动颜色好。由于使用第一个命令字符串导入(完整字符串),且整数水深不小,上图中小空白形成的细线为等深线。

试试另一种颜色。

效果如下:

颜色显示效果似乎不如手动调色好,所以在中间加一种颜色。

效果如下:

这个效果很好。

给水深赋色的主要代码是根据水深获得相应的颜色。这个贴在博主下面VBA函数代码。

Private Sub GetColorByDepth(depth1 As Double, dMinDepth As Double, dMaxDepth As Double, ByRef nRGB() As Long)

Dim r As Long, g As Long, b As LongDim r1 As Long, g1 As Long, b1 As LongDim r2 As Long, g2 As Long, b2 As LongDim r3 As Long, g3 As Long, b3 As LongDim dCenter As Doubler = Val(TextBox1.Text)g = Val(TextBox2.Text)b = Val(TextBox3.Text)r1 = Val(TextBox4.Text)g1 = Val(TextBox5.Text)b1 = Val(TextBox6.Text)r2 = Val(TextBox7.Text)g2 = Val(TextBox8.Text)b2 = Val(TextBox9.Text)dCenter = dMinDepth 0.5 * (dMaxDepth - dMinDepth)If depth1 < dCenter Thenr3 = CLng(r (r1 - r) * (depth1 - dMinDepth) / (dCenter - dMinDepth))g3 = CLng(g (g1 - g) * (depth1 - dMinDepth) / (dCenter - dMinDepth))b3 = CLng(b (b1 - b) * (depth1 - dMinDepth) / (dCenter - dMinDepth))Elser3 = CLng(r1 (r2 - r1) * (depth1 - dCenter) / (dMaxDepth - dCenter))g3 = CLng(g1 (g2 - g1) * (depth1 - dCenter) / (dMaxDepth - dCenter))b3 = CLng(b1 (b2 - b1) * (depth1 - dCenter) / (dMaxDepth - dCenter))End If根据水深值计算匹配的颜色值nRGB(0) = r3nRGB(1) = g3nRGB(2) = b3End Sub

标签: 色标传感器wm03nct2a色标光电传感器红外线电梯光幕

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台