我不会VB,有的地方转不过来,代码不多,可以吗?我先贴出一段,谢谢大家了
Public Sub MergeAllByOne(ByVal pEnumFeature As IEnumFeature, ByVal lSCode As Long, ByVal lGTotalVal As Double)
If m_pCurrentLayer Is Nothing Then
Exit Sub
End If
Dim pWorkspaceEdit As IWorkspaceEdit = GetWorkspaceEdit()
Dim pFeatureLayer As IFeatureLayer = m_pCurrentLayer
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
pWorkspaceEdit.StartEditOperation() pEnumFeature.Reset()
Dim pCurFeature As IFeature
Dim pNewFeature As IFeature
Dim lCount As Long
pNewFeature = pFeatureClass.CreateFeature() Dim pGeom As IGeometry
Dim pTmpGeom As IGeometry
Dim pOutputGeometry As IGeometry
Dim pTopoOperator As ITopologicalOperator Dim pOutRSType As IRowSubtypes
pOutRSType = pNewFeature
If lSCode <> 0 Then
pOutRSType.SubtypeCode = lSCode
End If
pOutRSType.InitDefaultValues() pCurFeature = pEnumFeature.Next()
Dim pFlds As IFields
pFlds = pFeatureClass.Fields lCount = 1
Do
pGeom = pCurFeature.ShapeCopy
If lCount = 1 Then
pTmpGeom = pGeom
Else
pTopoOperator = pTmpGeom
pOutputGeometry = pTopoOperator.Union(pGeom)
pTmpGeom = pOutputGeometry
End If Dim pFld As IField
Dim pDomain As IDomain
Dim pSubtypes As ISubtypes
pSubtypes = pFeatureClass
Dim i As Long
For i = 0 To pFlds.FieldCount - 1
pFld = pFlds.Field(i)
pDomain = pSubtypes.Domain(lSCode, pFld.Name)
If Not pDomain Is Nothing Then
Select Case pDomain.MergePolicy
Case esriMergePolicyType.esriMPTSumValues
If lCount = 1 Then
pNewFeature.Value(i) = pCurFeature.Value(i)
Else
pNewFeature.Value(i) = pNewFeature.Value(i) + pCurFeature.Value(i)
End If
Case esriMergePolicyType.esriMPTAreaWeighted
If lCount = 1 Then
pNewFeature.Value(i) = pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal)
Else
pNewFeature.Value(i) = pNewFeature.Value(i) + (pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal)) End If
End Select
End If
Next i
pCurFeature.Delete()
pCurFeature = pEnumFeature.Next()
lCount = lCount + 1 Loop Until pCurFeature Is Nothing pNewFeature.Shape = pOutputGeometry
pNewFeature.Store()
pWorkspaceEdit.StopEditOperation() Dim pRefresh As IInvalidArea
pRefresh = New InvalidArea
Dim pActiveView As IActiveView
pActiveView = m_pMap
pRefresh.Display = pActiveView.ScreenDisplay
pRefresh.Add(pNewFeature)
pRefresh.Invalidate(esriScreenCache.esriAllScreenCaches) m_pMap.ClearSelection()
m_pMap.SelectFeature(m_pCurrentLayer, pNewFeature) End Sub
Public Sub MergeAllByOne(ByVal pEnumFeature As IEnumFeature, ByVal lSCode As Long, ByVal lGTotalVal As Double)
If m_pCurrentLayer Is Nothing Then
Exit Sub
End If
Dim pWorkspaceEdit As IWorkspaceEdit = GetWorkspaceEdit()
Dim pFeatureLayer As IFeatureLayer = m_pCurrentLayer
Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
pWorkspaceEdit.StartEditOperation() pEnumFeature.Reset()
Dim pCurFeature As IFeature
Dim pNewFeature As IFeature
Dim lCount As Long
pNewFeature = pFeatureClass.CreateFeature() Dim pGeom As IGeometry
Dim pTmpGeom As IGeometry
Dim pOutputGeometry As IGeometry
Dim pTopoOperator As ITopologicalOperator Dim pOutRSType As IRowSubtypes
pOutRSType = pNewFeature
If lSCode <> 0 Then
pOutRSType.SubtypeCode = lSCode
End If
pOutRSType.InitDefaultValues() pCurFeature = pEnumFeature.Next()
Dim pFlds As IFields
pFlds = pFeatureClass.Fields lCount = 1
Do
pGeom = pCurFeature.ShapeCopy
If lCount = 1 Then
pTmpGeom = pGeom
Else
pTopoOperator = pTmpGeom
pOutputGeometry = pTopoOperator.Union(pGeom)
pTmpGeom = pOutputGeometry
End If Dim pFld As IField
Dim pDomain As IDomain
Dim pSubtypes As ISubtypes
pSubtypes = pFeatureClass
Dim i As Long
For i = 0 To pFlds.FieldCount - 1
pFld = pFlds.Field(i)
pDomain = pSubtypes.Domain(lSCode, pFld.Name)
If Not pDomain Is Nothing Then
Select Case pDomain.MergePolicy
Case esriMergePolicyType.esriMPTSumValues
If lCount = 1 Then
pNewFeature.Value(i) = pCurFeature.Value(i)
Else
pNewFeature.Value(i) = pNewFeature.Value(i) + pCurFeature.Value(i)
End If
Case esriMergePolicyType.esriMPTAreaWeighted
If lCount = 1 Then
pNewFeature.Value(i) = pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal)
Else
pNewFeature.Value(i) = pNewFeature.Value(i) + (pCurFeature.Value(i) * (getGeomVal(pCurFeature) / lGTotalVal)) End If
End Select
End If
Next i
pCurFeature.Delete()
pCurFeature = pEnumFeature.Next()
lCount = lCount + 1 Loop Until pCurFeature Is Nothing pNewFeature.Shape = pOutputGeometry
pNewFeature.Store()
pWorkspaceEdit.StopEditOperation() Dim pRefresh As IInvalidArea
pRefresh = New InvalidArea
Dim pActiveView As IActiveView
pActiveView = m_pMap
pRefresh.Display = pActiveView.ScreenDisplay
pRefresh.Add(pNewFeature)
pRefresh.Invalidate(esriScreenCache.esriAllScreenCaches) m_pMap.ClearSelection()
m_pMap.SelectFeature(m_pCurrentLayer, pNewFeature) End Sub
if ((m_pCurrentLayer == null)) {
return;
}
IWorkspaceEdit pWorkspaceEdit = GetWorkspaceEdit();
IFeatureLayer pFeatureLayer = m_pCurrentLayer;
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
pWorkspaceEdit.StartEditOperation();
pEnumFeature.Reset();
IFeature pCurFeature;
IFeature pNewFeature;
long lCount;
pNewFeature = pFeatureClass.CreateFeature();
IGeometry pGeom;
IGeometry pTmpGeom;
IGeometry pOutputGeometry;
ITopologicalOperator pTopoOperator;
IRowSubtypes pOutRSType;
pOutRSType = pNewFeature;
if ((lSCode != 0)) {
pOutRSType.SubtypeCode = lSCode;
}
pOutRSType.InitDefaultValues();
pCurFeature = pEnumFeature.Next();
IFields pFlds;
pFlds = pFeatureClass.Fields;
lCount = 1;
for (
; ((pCurFeature == null)
== false);
) {
pGeom = pCurFeature.ShapeCopy;
if ((lCount == 1)) {
pTmpGeom = pGeom;
}
else {
pTopoOperator = pTmpGeom;
pOutputGeometry = pTopoOperator.Union(pGeom);
pTmpGeom = pOutputGeometry;
}
IField pFld;
IDomain pDomain;
ISubtypes pSubtypes;
pSubtypes = pFeatureClass;
long i;
for (i = 0; (i
<= (pFlds.FieldCount - 1)); i++) {
pFld = pFlds.Field(i);
pDomain = pSubtypes.Domain(lSCode, pFld.Name);
if (!(pDomain == null)) {
switch (pDomain.MergePolicy) {
case esriMergePolicyType.esriMPTSumValues:
if ((lCount == 1)) {
pNewFeature.Value(i) = pCurFeature.Value(i);
}
else {
pNewFeature.Value(i) = (pNewFeature.Value(i) + pCurFeature.Value(i));
}
break;
case esriMergePolicyType.esriMPTAreaWeighted:
if ((lCount == 1)) {
pNewFeature.Value(i) = (pCurFeature.Value(i)
* (getGeomVal(pCurFeature) / lGTotalVal));
}
else {
pNewFeature.Value(i) = (pNewFeature.Value(i)
+ (pCurFeature.Value(i)
* (getGeomVal(pCurFeature) / lGTotalVal)));
}
break;
}
}
}
pCurFeature.Delete();
pCurFeature = pEnumFeature.Next();
lCount = (lCount + 1);
}
pNewFeature.Shape = pOutputGeometry;
pNewFeature.Store();
pWorkspaceEdit.StopEditOperation();
IInvalidArea pRefresh;
pRefresh = new InvalidArea();
IActiveView pActiveView;
pActiveView = m_pMap;
pRefresh.Display = pActiveView.ScreenDisplay;
pRefresh.Add(pNewFeature);
pRefresh.Invalidate(esriScreenCache.esriAllScreenCaches);
m_pMap.ClearSelection();
m_pMap.SelectFeature(m_pCurrentLayer, pNewFeature);
}
Dim pWorkspaceEdit As IWorkspaceEdit
/Dim pWorkspaceEdit As New IWorkspaceEdit改成(以分号结速一行)IWorkspaceEdit pWorkspaceEdit;
/IWorkspaceEdit pWorkspaceEdit = new IWorkspaceEdit();即 Dim 类型实例 As New 类型 ==》 类型 类型实例 = new 类型实例();2、判断
If m_pCurrentLayer Is Nothing Then
Exit Sub
End If改成if (m_pCurrentLayer == null)
{
return;
}
3、调用方法pWorkspaceEdit.StartEditOperation()改成(加一个分号就行)pWorkspaceEdit.StartEditOperation();VB的
Call 方法 或 方法
改成 方法();
4、Select Case语句
Select Case pDomain.MergePolicy Case esriMergePolicyType.esriMPTSumValues
If lCount = 1 Then
pNewFeature.Value(i) = pCurFeature.Value(i)
Else
pNewFeature.Value(i) = pNewFeature.Value(i) + pCurFeature.Value(i)
End If
Case esriMergePolicyType.esriMPTAreaWeighted
改成
switch(pDomain.MergePolicy)
{
case esriMergePolicyType.esriMPTSumValues:
if(lCount == 1)
{
pNewFeature.Value[i] = pCurFeature.Value[i];
}
else
{
pNewFeature.Value[i] = pNewFeature.Value[i] + pCurFeature.Value[i];
}
break;Case esriMergePolicyType.esriMPTAreaWeighted:
...
break;default:
//...
break; }
将()
改成
[]如上pNewFeature.Value(i) = pCurFeature.Value(i); ==>pNewFeature.Value[i] = pCurFeature.Value[i];
6、注释
VB用'
C#用//如果是多行,可用
/*
这是注释
/*7折叠
仅说明一下区别
VB中的折叠是受限制的,不能用在Sub和Function内部,但是C#不限任何限制#region 这是折叠部分,很方便...
//随便写什么,想折叠什么就折叠什么#endregion
www.webmis.com.cn