jcoon 发表于 2011-9-9 13:21:15

aeccpoint插入

尝试在选定的屏幕位置插入一个 aeccpoint,但我在
Set oPoints = g_oDocument时不断收到错误。此处的“错误。它是帮助文件的副本吗?那么为什么不
生成一个对象
感谢
john
Option Explicit
Public g_oCivilApp As AeccApplication
Public g_oDocument As AeccDocument
Public g_oAeccDatabase As AeccDatabase
Public AeccApp As AeccApplication
Public AeccDoc As AeccDocument
Public AeccDb As AeccDatabase
Public doc As AcadDocument
Private Sub CommandButton19_Click()
hide
' Always get the objects,因为支持 MDI。
If (GetBaseCivilObjects() = False) then
Exit Sub
End if
Dim basePnt As Variant
Dim oPoints As AeccPoints
Dim oPoint1 As AeccPoint
Dim dLocation(0 To 2) As Double

basePnt = ThisDrawing.Utility.GetPoint(, “Select Location to Label”)

dLocation(0) = basePnt(0)
dLocation(1) = basePnt(1)
dLocation(2) = 0#
Set oPoints = g_oDocument.Points ''
'oPoint1.Name = “point1”
'oPoint1.RawDescription = “Point Description”
'oPoint1.Update

opoint.update
UserForm1.Show
End Sub
**** Hidden Message *****

Jeff_M 发表于 2011-9-9 14:09:33

错误是什么?另外,g_oDocument设置正确吗?当尝试设置Point对象时,它是有效对象吗?)?

jcoon 发表于 2011-9-10 15:22:32


Jeff,
我收到一个错误,说在Set oPoint=g_oDocument.Points.Add(dLoc)处没有设置块变量。我在家测试了它
并删除了公共设置,它工作正常。我不确定为什么删除公共设置会在模块1中设置后做到这一点,但我的示例现在工作正常。
您是否碰巧有与下面相同但在vb点网中的示例或绘制简单线对齐的示例。
一如既往地感谢您帮助我想出这一点。
john
Private SubCommandButton20_Click()
隐藏
'检查以确保民用3D正在运行并获取民用对象
如果(GetBase文明对象=False)然后
Exit Sub
End如果
Dim dLoc(0 To 2)As Double
Dim oPoint As AeccPoint
Dim oPoint As AeccPoint
dLoc(0)=100: dLoc(1)=100: dLoc(2)=100#
设置oPoint=g_oDocument.Points.Add(dLoc)
oPoint.Update
UserForm1.Show

Jeff_M 发表于 2011-9-10 22:03:42

嗨,约翰,如果公共对象在另一个模块中也被调暗了,VBA不喜欢那个IIRC。
这里有3个示例:使用COM设置一个点,使用COM向无站点对齐添加对齐,另一个用于. NET

Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.Civil
Imports Autodesk.Civil.ApplicationServices
Imports Autodesk.Civil.Land.DatabaseServices
Imports Autodesk.AECC.Interop.Land
Imports Autodesk.AECC.Interop.UiLand
Imports Autodesk.Civil.Land.DatabaseServices.Styles
Public Class Class1
   _
    Public Sub MySetPoint()
      Dim aeccapp As AeccApplication = New AeccApplicationClass()
      aeccapp.Init(Application.AcadApplication)
      Dim aeccdoc As AeccDocument = aeccapp.ActiveDocument
      Dim pt As Point3d = New Point3d(100.0, 100.0, 100.0)
      Dim aeccpt As AeccPoint = aeccdoc.Points.Add(pt.ToArray())
      aeccapp = Nothing
    End Sub
   _
    Public Sub MyAddAlignCOM()
      Dim aeccapp As AeccApplication = New AeccApplicationClass()
      aeccapp.Init(Application.AcadApplication)
      Dim aeccdoc As AeccDocument = aeccapp.ActiveDocument
      Dim alignstyle As AeccAlignmentStyle = aeccdoc.AlignmentStyles(0) ''get the first style in the collection
      Dim alignlblstyle As AeccAlignmentLabelStyleSet = aeccdoc.AlignmentLabelStyleSets(0) ''get the first label style set in the collection
      Dim layer As String = aeccdoc.Settings.DrawingSettings.ObjectLayerSettings.AlignmentLayer.Layer
      Dim aeccalign As AeccAlignment = aeccdoc.AlignmentsSiteless.Add("MyFirstAlign", "0", alignstyle, alignlblstyle)
      Dim pt1 As Point3d = New Point3d(100.0, 100.0, 100.0)
      Dim pt2 As Point3d = New Point3d(300.0, 100.0, 100.0)
      aeccalign.Entities.AddFixedLine1(pt1.ToArray(), pt2.ToArray())
      aeccapp = Nothing
    End Sub
   _
    Public Sub MyAddALignNET()
      Dim civdoc As CivilDocument = CivilApplication.ActiveDocument
      Dim alignstyle As ObjectId = civdoc.Styles.AlignmentStyles(0)
      Dim alignlblstyle As ObjectId = civdoc.Styles.LabelSetStyles.AlignmentLabelSetStyles(0)
      Dim layer As ObjectId = civdoc.Settings.DrawingSettings.ObjectLayerSettings.GetObjectLayerSetting(Autodesk.Civil.Settings.SettingsObjectLayerType.Alignment).LayerId
      Dim alignid As ObjectId = Alignment.Create(civdoc, "MyFirstNETAlign", ObjectId.Null, layer, alignstyle, alignlblstyle)
      Using tr As Transaction = Application.DocumentManager.MdiActiveDocument.Database.TransactionManager.StartTransaction()
            Dim pt1 As Point3d = New Point3d(100.0, 100.0, 100.0)
            Dim pt2 As Point3d = New Point3d(300.0, 100.0, 100.0)
            Dim align As Alignment = tr.GetObject(alignid, OpenMode.ForWrite)
            align.Entities.AddFixedLine(pt1, pt2)
            tr.Commit()
      End Using
    End Sub
End Class

jcoon 发表于 2011-9-12 07:55:44

杰夫,我不知道VBA不喜欢IIRC。我只是复制了一些旧的代码,使这一次例行公事,从来没有想过公共dim。
我想我很幸运,因为我以前从未遇到过。
非常感谢您提供的. net样本。我试着找了几次时间把我的日常工作转移到点网上,但是当我正在学习点网的时候,工作似乎总是变得疯狂,然后一个月后,我忘记了我前一个月做的所有事情。
我大部分时间都在努力调试,当我试图在. net中调试时,我崩溃了,因为我不知道如何捕捉. net错误。当我崩溃系统时,不得不一次又一次地启动autocad,这令人沮丧........我会及时到达那里。
一如既往地感谢您的帮助和理解。我知道一直要处理初学者的问题并不容易。
约翰
页: [1]
查看完整版本: aeccpoint插入