.NET
Pro, Platinum
The BricsCAD .NET API exposes BricsCAD functionality for use by
managed code built on the .NET Common Language Runtime (CLR)
platform.
Runtime
With BricsCAD V18, the supported .NET
framework version is 4.5.1 (CLR version 4).
The .NET 4.5.1 framework is
highly compatible with .NET Framework 4. Existing modules compiled
for older BricsCAD versions should work in V18 unless
version-dependent P/invoke signatures were used to access unmanaged
API functions.
Compiler version
For new development on V18,
developers must use Visual Studio 2013 or later. Managed modules
compiled with .NET 4 for older BricsCAD versions will continue to
run on V18 but Visual Studio 2010 and older versions of VS will not
recognize the current BrxMgd TD_Mgd modules because they are based
on .NET 4.5.1.
For .NET based development
it is sufficient to use the free Visual Studio Community
Edition.
.NET project setup in Visual Studio
Create a class library using the class
library wizard under your preferred .NET language. There are
currently two DLLs that must be referenced (BrxMgd.dll and TD_Mgd.dll) plus one optional BREP API DLL
(TD_MgdBrep.dll). These DLLs are located
in your BricsCAD installation folder.
Important note: when referencing these DLLs,
it's important to set the 'Copy Local'
property to False.
Note: importing the BricsCAD and Teigha COM
type libraries requires TlbImp
without the /strictref
option!
Sample projects can be found in the BricsCAD
install folder, subfolder \API\dotNet.
Changes in V18
Bricscad.Internal namespace has
been added, with plans to add undocumented functions upon
request.
BRX17.DLL has been updated as
BRX18.DLL, P/Invoke signatures depending on this file will need to
be updated accordingly.
Code compatibility
It's generally possible to use
the same source code to build assemblies targeting both BricsCAD
and AutoCAD. A common technique for resolving differences in
namespaces is to use short namespace aliases that are different
depending on the target application:
C#
|
VB.NET
|
#if BRX_APP
using _AcAp = Bricscad.ApplicationServices;
using _AcBr = Teigha.BoundaryRepresentation;
using _AcCm = Teigha.Colors;
using _AcDb = Teigha.DatabaseServices;
using _AcEd = Bricscad.EditorInput;
using _AcGe = Teigha.Geometry;
using _AcGi = Teigha.GraphicsInterface;
using _AcGs = Teigha.GraphicsSystem;
using _AcGsk = Bricscad.GraphicsSystem;
using _AcPl = Bricscad.PlottingServices;
using _AcBrx = Bricscad.Runtime;
using _AcTrx = Teigha.Runtime;
using _AcWnd = Bricscad.Windows;
using _AcInt = Bricscad.Internal;
#elif ARX_APP
using _AcAp = Autodesk.AutoCAD.ApplicationServices;
using _AcBr =
Autodesk.AutoCAD.BoundaryRepresentation;
using _AcCm = Autodesk.AutoCAD.Colors;
using _AcDb = Autodesk.AutoCAD.DatabaseServices;
using _AcEd = Autodesk.AutoCAD.EditorInput;
using _AcGe = Autodesk.AutoCAD.Geometry;
using _AcGi = Autodesk.AutoCAD.GraphicsInterface;
using _AcGs = Autodesk.AutoCAD.GraphicsSystem;
using _AcGsk = Autodesk.AutoCAD.GraphicsSystem;
using _AcPl = Autodesk.AutoCAD.PlottingServices;
using _AcBrx = Autodesk.AutoCAD.Runtime;
using _AcTrx = Autodesk.AutoCAD.Runtime;
using _AcWnd = Autodesk.AutoCAD.Windows;
using _AcInt = Autodesk.AutoCAD.Internal;
#endif
|
#If BRX_APP Then
Imports _AcAp = Bricscad.ApplicationServices
Imports _AcBr = Teigha.BoundaryRepresentation
Imports _AcCm = Teigha.Colors
Imports _AcDb = Teigha.DatabaseServices
Imports _AcEd = Bricscad.EditorInput
Imports _AcGe = Teigha.Geometry
Imports _AcGi = Teigha.GraphicsInterface
Imports _AcGs = Teigha.GraphicsSystem
Imports _AcGsk = Bricscad.GraphicsSystem
Imports _AcPl = Bricscad.PlottingServices
Imports _AcBrx = Bricscad.Runtime
Imports _AcTrx = Teigha.Runtime
Imports _AcWnd = Bricscad.Windows
Imports _AcInt = Bricscad.Internal
#ElseIf ARX_APP Then
Imports _AcAp = Autodesk.AutoCAD.ApplicationServices
Imports _AcBr = Autodesk.AutoCAD.BoundaryRepresentation
Imports _AcCm = Autodesk.AutoCAD.Colors
Imports _AcDb = Autodesk.AutoCAD.DatabaseServices
Imports _AcEd = Autodesk.AutoCAD.EditorInput
Imports _AcGe = Autodesk.AutoCAD.Geometry
Imports _AcGi = Autodesk.AutoCAD.GraphicsInterface
Imports _AcGs = Autodesk.AutoCAD.GraphicsSystem
Imports _AcGsk = Autodesk.AutoCAD.GraphicsSystem
Imports _AcPl = Autodesk.AutoCAD.PlottingServices
Imports _AcBrx = Autodesk.AutoCAD.Runtime
Imports _AcTrx = Autodesk.AutoCAD.Runtime
Imports _AcWnd = Autodesk.AutoCAD.Windows
Imports _AcInt = Autodesk.AutoCAD.Internal
#End If
|
Known differences
There are some known differences
that developers should be aware of.
Access DBObject
after transaction ends
In AutoCAD, objects belonging to
a transaction remain accessible in some cases even after the
transaction has ended. In BricsCAD, all transaction resident
objects are closed when the transaction ends. For example:
using (_AcDb.Transaction tr =
db.TransactionManager.StartTransaction())
{
_AcDb.DBObject space = tr.GetObject(db.CurrentSpaceId,
_AcDb.OpenMode.ForRead);
tr.Commit();
//now 'space' is closed and no longer transaction
resident
_AcDb.ObjectId idXDict = space.ExtensionDictionary;
//works in Acad; eInvalidOperation in Teigha
}
If this situation is
encountered, there are two common solutions:
- Reorder the sequence of events
so that all object access is completed before the transaction
ends.
- Use OpenCloseTransaction for
object access, either exclusively or to access an object after the
transaction has ended.
For further assistance please contact Bricsys
Support.
Tell me about...
Copying Code
Examples from the BricsCAD Programmer’s Reference
|
© Bricsys NV. All rights reserved. |