乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 58|回复: 2

将折线导入到 Autocad 速度

[复制链接]

12

主题

20

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
68
发表于 2018-1-30 17:30:50 | 显示全部楼层 |阅读模式

嗨,我玩点空间导入SHP文件到Autopcad,如果我导入一个文件,那是可以的,但有几个速度是小显示
是有人可以帮助我如何加快这个
  1.         _
  2.         Public Sub XYinsert()
  3.             ReadSHPfile("C:\map\streetline.shp", "st")
  4.         End Sub
  5. a few
  6.         Public Sub ReadSHPfile(ByVal slod, ByVal Layerinst)
  7.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  8.             Dim db As Database = doc.Database
  9.             Dim ed As Editor = doc.Editor
  10.             Using acTrans As Transaction = db.TransactionManager.StartTransaction()
  11.                 Dim acBlkTbl As BlockTable
  12.                 acBlkTbl = CType(acTrans.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable)
  13.                 Dim acBlkTblRec As BlockTableRecord
  14.                 acBlkTblRec = CType(acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite), BlockTableRecord)
  15.                 Dim shapeActual As FeatureSet = FeatureSet.Open(slod)
  16.                 shapeActual.FillAttributes()
  17.                 Dim dt As System.Data.DataTable = shapeActual.DataTable
  18.                 Dim pline As Polyline = New Polyline()
  19.                 pline.SetDatabaseDefaults()
  20.                 Dim ptColl As Point3dCollection = New Point3dCollection()
  21.                 For count As Integer = 0 To shapeActual.Features.Count - 1
  22.                     For Each feature As IFeature In shapeActual.Features 'circle through the features
  23.                         For i As Integer = 0 To feature.BasicGeometry.NumGeometries - 1 'circle through the parts of one feature
  24.                             For Each coord As Coordinate In feature.BasicGeometry.GetBasicGeometryN(i).Coordinates() 'circle through the coordinates of the feature part
  25.                                 'Dim AdresX = coord.X
  26.                                 'Dim AdresY = coord.Y
  27.                                 pline.AddVertexAt(count, New Point2d(coord.X, (coord.Y)), 0.0, 0.0, 0.0)
  28.                                 count = count + 1
  29.                                 Dim pt As New Point3d(coord.X, coord.Y, coord.Z)
  30.                                 pts.Add(pt)
  31.                             Next
  32.                             '    installa1()
  33.                             ed.WriteMessage(vbCr & feature.FeatureType.ToString)
  34.                         Next
  35.                         insert_with_layer(Layerinst)
  36.                         pts.Clear()
  37.                     Next
  38.                 Next
  39.                 acTrans.Commit()
  40.             End Using
  41.         End Sub
  42.         Public Sub insert_with_layer(ByVal Layer_name As String)
  43.             Dim doc As Document = Application.DocumentManager.MdiActiveDocument
  44.             Dim db As Database = doc.Database
  45.             Dim trans As Transaction
  46.             Dim transMan As Autodesk.AutoCAD.ApplicationServices.TransactionManager
  47.             transMan = db.TransactionManager
  48.             trans = transMan.StartTransaction
  49.             ' Dim lne As New Line(pt1, pt2)
  50.             Dim pline As Polyline = New Polyline()
  51.             Dim bt As BlockTable
  52.             Dim btr As BlockTableRecord
  53.             bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead)
  54.             btr = trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
  55.             Dim i As Integer = 0
  56.             For Each pnt As Point3d In pts
  57.                 Dim pt As New Point3d(pnt.X, pnt.Y, pnt.Z)
  58.                 pline.AddVertexAt(i, New Point2d(pt.X, (pt.Y)), 0.0, 0.0, 0.0)
  59.                 i += 1
  60.             Next
  61.             pline.Layer = Layer_name
  62.             btr.AppendEntity(pline)
  63.             trans.AddNewlyCreatedDBObject(pline, True)
  64.             trans.Commit()
  65.             trans.Dispose()
  66.             transMan.Dispose()
  67.         End Sub

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-1-30 17:47:29 | 显示全部楼层
快速浏览后:
您可能不需要创建“新”折线或集合对象,只需重置/清除它们,这将节省每次迭代分配的新内存。对于您可能重用的任何其他对象也是如此。
这听起来似乎不太直观,但是我发现为每个实体创建一个单独的事务有时比试图在一个循环中完成所有事务然后提交要快。您可以将循环封装在一个事务中,然后用内部事务添加实体,类似于辅助函数“postToDatabase”。
如我所说,听起来开销更大,但这是我的经验
回复

使用道具 举报

7

主题

60

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
88
发表于 2018-1-31 11:54:49 | 显示全部楼层
你在acad部分做得很好
在调试中运行时,请注意代码行右侧显示的数字
它会显示为10毫秒,这意味着最后一次操作需要10毫秒
使用该功能,您可以快速找到速度较慢的部件,并在自己的环境中进行测试
在快速情况下,您只需尝试两者,因为事务分组很容易
我也使用了dotspacial,实际上我已经准备好做一个shapefile->google earth工具,就像我自己做的acad->kmz一样,比civil3d工具好100倍左右。顺便说一句,我在coord translations中使用mapguide api。其优点是coord系统的“短”名称与acad map使用的名称匹配,因为map也使用mapguide引擎。您可以在普通acad或bcad中使用它,无需垂直。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-4 10:32 , Processed in 0.215504 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表