gis
gis
管理员
管理员
  • 注册日期2003-07-16
  • 发帖数15951
  • QQ
  • 铜币25345枚
  • 威望15368点
  • 贡献值0点
  • 银元0个
  • GIS帝国居民
  • 帝国沙发管家
  • GIS帝国明星
  • GIS帝国铁杆
阅读:2118回复:4

[转帖]MO自定义符号之二(将点显示为水池符号)

楼主#
更多 发布于:2005-08-19 17:19
这里再讲一个VB下自定义符号的应用实例,那就是将点显示为一个水池,如下图所示。
<P><a href="http://edu.bjenv.com/blog/uploadfile/2005516184544481.jpg" target="_blank" ><IMG src="http://edu.bjenv.com/blog/uploadfile/2005516184544481.jpg" border=0></A></P>
<br>
<P>罗嗦的话就不说了,直接贴代码:</P>
<P>Option Explicit</P>
<P>Implements AFCustom.ICustomMarker</P>
<P>' data members<BR>Private m_pen As Long<BR>Private m_oldPen As Long<BR>Private m_size As Long<BR>Private m_Style As WsNodeStyle</P>
<P>' win32 api functions<BR>Private Declare Function SelectObject Lib "gdi32" (ByVal hDC As Long, ByVal hObject As Long) As Long<BR>Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long<BR>Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long</P>
<P>Private Declare Function LineTo Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long) As Long<BR>Private Declare Function MoveToEx Lib "gdi32" (ByVal hDC As Long, ByVal x As Long, ByVal y As Long, lpPoint As Long) As Long<BR>Private Declare Function Ellipse Lib "gdi32" (ByVal hDC As Long, ByVal x1 As Long, ByVal y1 As Long, ByVal x2 As Long, ByVal y2 As Long) As Long</P>
<P>Private Sub Class_Initialize()<BR>  m_Style = WsWaterTankNode<BR>End Sub</P>
<P>Public Property Let SymbolStyle(ByVal vData As WsNodeStyle)<BR>    m_Style = vData<BR>End Property</P>
<P>Public Property Get SymbolStyle() As WsNodeStyle<BR>    SymbolStyle = m_Style<BR>End Property</P>
<P>Public Sub ICustomMarker_Draw(ByVal hDC As Long, ByVal x As Long, ByVal y As Long)<BR>  Select Case m_Style<BR>  Case WsWaterTankNode '水池<BR>    MoveToEx hDC, x - m_size, y - m_size, 0<BR>    LineTo hDC, x - m_size, y<BR>    LineTo hDC, x + m_size, y<BR>    LineTo hDC, x + m_size, y - m_size<BR>    MoveToEx hDC, x - m_size, Int(y - m_size * 2 / 5), 0<BR>    LineTo hDC, x + m_size, Int(y - m_size * 2 / 5)<BR>  Case Else<BR>    Ellipse hDC, x - m_size, y - m_size, x + m_size, y + m_size<BR>  End Select<BR>End Sub</P>
<P>Public Sub ICustomMarker_ResetDC(ByVal hDC As Long)<BR>  SelectObject hDC, m_oldPen<BR>  DeleteObject m_pen<BR>End Sub</P>
<P>Public Sub ICustomMarker_SetupDC(ByVal hDC As Long, ByVal dpi As Double, ByVal pBaseSym As Object)<BR>  m_pen = CreatePen(0, 1, pBaseSym.Color)<BR>  m_oldPen = SelectObject(hDC, m_pen)<BR>  m_size = pBaseSym.Size<BR>End Sub</P>
喜欢0 评分0
GIS麦田守望者,期待与您交流。
小波波
路人甲
路人甲
  • 注册日期2006-06-30
  • 发帖数6
  • QQ
  • 铜币129枚
  • 威望0点
  • 贡献值0点
  • 银元0个
1楼#
发布于:2006-12-25 22:42
用位图表示时,如果点很多,两三万个,会出现刷新很慢,不知道有什么好的解决方法没有?
举报 回复(0) 喜欢(0)     评分
lixaokui
路人甲
路人甲
  • 注册日期2003-12-25
  • 发帖数768
  • QQ28796446
  • 铜币27枚
  • 威望0点
  • 贡献值0点
  • 银元0个
2楼#
发布于:2006-12-02 20:56
<P>这个东东不错,顶一下</P>
西门吹血,有了鼓风机,就不用吹啦!
举报 回复(0) 喜欢(0)     评分
pkfhh
路人甲
路人甲
  • 注册日期2006-11-30
  • 发帖数6
  • QQ
  • 铜币114枚
  • 威望0点
  • 贡献值0点
  • 银元0个
3楼#
发布于:2006-12-02 10:14
这个东西很好,很实用,版主能给点设计思路吗?
举报 回复(0) 喜欢(0)     评分
heqjxiaoyao
路人甲
路人甲
  • 注册日期2003-07-31
  • 发帖数981
  • QQ83031582
  • 铜币910枚
  • 威望0点
  • 贡献值0点
  • 银元0个
4楼#
发布于:2005-08-26 10:34
不错,MO中也有这样的自定义特征符号的例子,但是如果特征点的符号差别变化不大时VB中用位图来表示最方便。
希望大家访问我的个人博客: 随笔闲谈: http://rsgisman.bokee.com
举报 回复(0) 喜欢(0)     评分
游客

返回顶部