用AO实现ACAD到Geodatabase的转换
2006-02-15 08:32
218 查看
Private Sub Command1_Click()
Dim pWorkspaceFact As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Dim myFWS As IFeatureWorkspace
Dim myFDS As IFeatureDataset
Dim myFCContainer As IFeatureClassContainer
Dim inDataName As IDatasetName
Dim inFDataName As IFeatureDatasetName
Dim inEnumDS_FC As IEnumDatasetName
Dim pOutAcFact As IWorkspaceFactory
Dim pOutAcWorkspaceName As IWorkspaceName
Dim pOutAcFeatDSName As IFeatureDatasetName
Dim pOutAcDSName As IDatasetName
Dim outFDS As IFeatureDataset
Dim pPropset As IPropertySet
Dim pName As IName
Dim theLayer As IFeatureLayer
Dim myFDC As IFeatureDataConverter
Set pPropset = New PropertySet
pPropset.SetProperty "Database", "F:/szhh/canada"
Set pOutAcFact = New AccessWorkspaceFactory
Set pOutAcWorkspaceName = pOutAcFact.Create("F:/szhh/canada", "canada", pPropset, Form1.hWnd)
Set pOutAcFeatDSName = New FeatureDatasetName
Set pOutAcDSName = pOutAcFeatDSName
Set pOutAcDSName.WorkspaceName = pOutAcWorkspaceName
pOutAcDSName.Name = "Country"
Set pName = pOutAcFeatDSName
'Set outFDS = pName.Open
Set myFDC = New FeatureDataConverter
Set pWorkspaceFact = New CadWorkspaceFactory
Set pWorkspace = pWorkspaceFact.OpenFromFile("F:/szhh", Form1.hWnd)
Set myFWS = pWorkspace
Set myFDS = myFWS.OpenFeatureDataset("aaa.dwg")
Set myFCContainer = myFDS
Set inDataName = myFDS.FullName
Set inFDataName = inDataName
Set inEnumDS_FC = inFDataName.FeatureClassNames
inEnumDS_FC.Reset
Dim inDSname As IDatasetName
Dim myFCname As IFeatureClassName
Set inDSname = inEnumDS_FC.Next
Set theLayer = Nothing
While Not inDSname Is Nothing
Set myFCname = inDSname
If inDSname.Name = "Annotation" Then
Set theLayer = New CadAnnotationLayer
Else
Set theLayer = New CadFeatureLayer
End If
Dim myFCL As IFeatureClass
Dim ShapeField As IField
Dim myGeom As IGeometryDef
theLayer.Name = inDSname.Name
Set myFCL = myFCContainer.ClassByName(inDSname.Name)
Set ShapeField = myFCL.Fields.Field(myFCL.FindField(myFCL.ShapeFieldName))
Set myGeom = ShapeField.GeometryDef
Dim myFilter As IQueryFilter
Set myFilter = New QueryFilter
myFilter.SubFields = "*"
' Dim myInGeo As IGeoDataset
' Set myInGeo = myFDS
' Dim myInRef As ISpatialReference
' Set myInRef = myInGeo.SpatialReference
' Dim inXMin As Double
' Dim inXMax As Double
' Dim inYMin As Double
' Dim inYMax As Double
' inXMin = 0
' inXMax = 0
' inYMin = 0
' inYMax = 0
' myInRef.GetDomain inXMin, inXMax, inYMin, inYMax
'
' Dim myOutGeo As IGeoDataset
' Set myOutGeo = outFDS
' Dim myOutRef As ISpatialReference
' Set myOutRef = myOutGeo.SpatialReference
' Dim outXMin As Double
' Dim outXMax As Double
' Dim outYMin As Double
' Dim outYMax As Double
' outXMin = 0
' outXMax = 0
' outYMin = 0
' outYMax = 0
' myOutRef.GetDomain outXMin, outXMax, outYMin, outYMax
'
' Dim newXMin As Double, newXMax As Double, newYMin As Double, newYMax As Double
' If inXMin < outXMin Then newXMin = inXMin Else newXMin = outXMin
' If inXMax > outXMax Then newXMax = inXMax Else newXMax = outXMax
' If inYMin < outYMin Then newYMin = inYMin Else newYMin = outYMin
' If inYMax > outYMax Then newYMax = inYMax Else newYMax = outYMax
' myOutRef.SetDomain newXMin, newXMax, newYMin, newYMax
Dim myEnumInv As IEnumInvalidObject
Set myEnumInv = myFDC.ConvertFeatureClass(myFCname, myFilter, pOutAcFeatDSName, myFCname, myGeom, myFCL.Fields, "", 1000, Form1.hWnd)
myEnumInv.Reset
Dim myInv As IInvalidObjectInfo
While Not myInv Is Nothing
MsgBox "Invalid Object #" & myInv.InvalidObjectID & myInv.ErrorDescription
Set myInv = myEnumInv.Next
Wend
Set inDSname = inEnumDS_FC.Next
Wend
End Sub
Dim pWorkspaceFact As IWorkspaceFactory
Dim pWorkspace As IWorkspace
Dim myFWS As IFeatureWorkspace
Dim myFDS As IFeatureDataset
Dim myFCContainer As IFeatureClassContainer
Dim inDataName As IDatasetName
Dim inFDataName As IFeatureDatasetName
Dim inEnumDS_FC As IEnumDatasetName
Dim pOutAcFact As IWorkspaceFactory
Dim pOutAcWorkspaceName As IWorkspaceName
Dim pOutAcFeatDSName As IFeatureDatasetName
Dim pOutAcDSName As IDatasetName
Dim outFDS As IFeatureDataset
Dim pPropset As IPropertySet
Dim pName As IName
Dim theLayer As IFeatureLayer
Dim myFDC As IFeatureDataConverter
Set pPropset = New PropertySet
pPropset.SetProperty "Database", "F:/szhh/canada"
Set pOutAcFact = New AccessWorkspaceFactory
Set pOutAcWorkspaceName = pOutAcFact.Create("F:/szhh/canada", "canada", pPropset, Form1.hWnd)
Set pOutAcFeatDSName = New FeatureDatasetName
Set pOutAcDSName = pOutAcFeatDSName
Set pOutAcDSName.WorkspaceName = pOutAcWorkspaceName
pOutAcDSName.Name = "Country"
Set pName = pOutAcFeatDSName
'Set outFDS = pName.Open
Set myFDC = New FeatureDataConverter
Set pWorkspaceFact = New CadWorkspaceFactory
Set pWorkspace = pWorkspaceFact.OpenFromFile("F:/szhh", Form1.hWnd)
Set myFWS = pWorkspace
Set myFDS = myFWS.OpenFeatureDataset("aaa.dwg")
Set myFCContainer = myFDS
Set inDataName = myFDS.FullName
Set inFDataName = inDataName
Set inEnumDS_FC = inFDataName.FeatureClassNames
inEnumDS_FC.Reset
Dim inDSname As IDatasetName
Dim myFCname As IFeatureClassName
Set inDSname = inEnumDS_FC.Next
Set theLayer = Nothing
While Not inDSname Is Nothing
Set myFCname = inDSname
If inDSname.Name = "Annotation" Then
Set theLayer = New CadAnnotationLayer
Else
Set theLayer = New CadFeatureLayer
End If
Dim myFCL As IFeatureClass
Dim ShapeField As IField
Dim myGeom As IGeometryDef
theLayer.Name = inDSname.Name
Set myFCL = myFCContainer.ClassByName(inDSname.Name)
Set ShapeField = myFCL.Fields.Field(myFCL.FindField(myFCL.ShapeFieldName))
Set myGeom = ShapeField.GeometryDef
Dim myFilter As IQueryFilter
Set myFilter = New QueryFilter
myFilter.SubFields = "*"
' Dim myInGeo As IGeoDataset
' Set myInGeo = myFDS
' Dim myInRef As ISpatialReference
' Set myInRef = myInGeo.SpatialReference
' Dim inXMin As Double
' Dim inXMax As Double
' Dim inYMin As Double
' Dim inYMax As Double
' inXMin = 0
' inXMax = 0
' inYMin = 0
' inYMax = 0
' myInRef.GetDomain inXMin, inXMax, inYMin, inYMax
'
' Dim myOutGeo As IGeoDataset
' Set myOutGeo = outFDS
' Dim myOutRef As ISpatialReference
' Set myOutRef = myOutGeo.SpatialReference
' Dim outXMin As Double
' Dim outXMax As Double
' Dim outYMin As Double
' Dim outYMax As Double
' outXMin = 0
' outXMax = 0
' outYMin = 0
' outYMax = 0
' myOutRef.GetDomain outXMin, outXMax, outYMin, outYMax
'
' Dim newXMin As Double, newXMax As Double, newYMin As Double, newYMax As Double
' If inXMin < outXMin Then newXMin = inXMin Else newXMin = outXMin
' If inXMax > outXMax Then newXMax = inXMax Else newXMax = outXMax
' If inYMin < outYMin Then newYMin = inYMin Else newYMin = outYMin
' If inYMax > outYMax Then newYMax = inYMax Else newYMax = outYMax
' myOutRef.SetDomain newXMin, newXMax, newYMin, newYMax
Dim myEnumInv As IEnumInvalidObject
Set myEnumInv = myFDC.ConvertFeatureClass(myFCname, myFilter, pOutAcFeatDSName, myFCname, myGeom, myFCL.Fields, "", 1000, Form1.hWnd)
myEnumInv.Reset
Dim myInv As IInvalidObjectInfo
While Not myInv Is Nothing
MsgBox "Invalid Object #" & myInv.InvalidObjectID & myInv.ErrorDescription
Set myInv = myEnumInv.Next
Wend
Set inDSname = inEnumDS_FC.Next
Wend
End Sub
相关文章推荐
- OpenCV提供的转换函数实现YUV到RGB的转换
- 用递归实现十进制转换成二进制
- 编程实现excle的行列命名与另一种表示方式的相互转换
- Oracle实现行列转换的方法分析
- js 实现 Base64 编码的相互转换
- NHibernate实现IList 转换成DataSet
- 原码反码补码详解与十进制转换为二进制的各种实现
- JSON.NET框架实现C#对象和JSON字符串的转换
- 实现将VirtualBox 虚拟机转换为KVM虚拟机的步骤
- C#实现集合转换成json格式数据的方法
- <java代码> 实现Unix时间戳(Unix timestamp)与普通时间 之间的相互转换
- 用Javascript实现UTF8编码转换成gb2312编码
- iOS中使用KVC实现JSON数据与Objective-C实体对象之间的转换
- 数据结构Java实现06----中缀表达式转换为后缀表达式
- 用C++实现十进制到十六进制的两种转换方法
- mysql 行列动态转换的实现(列联表,交叉表)
- C++ 实现任意基本类型转换为 string 类型
- JavaScript实现1-4000内阿拉伯数字转换为罗马数字
- VC实现 UTF8转换成GB2312
- ASP.NET下调用ffmpeg与mencoder实现视频转换截屏