ObjectARX 2018Developer Technical Services Developer Technical Services Worldwide Workgroup Over 25 Specialists World Wide Virtually 24 hour support, 5 days a week Americas Team US (CA, AZ, WA), Canada, Brazil European Team Switzerland, United Kingdom, France, Russia APac Team China, Japan, India Getting Support http://www.autodesk.com/adn-devhelp Provides access to On-line knowledge base Call submission Newsgroups Calls are logged automatically 1-3 day turnaround Callbacks as needed Answers to frequently asked questions are posted in our on-line knowledge base .NET Give you complete of coverage of all API functions . VB.Course Objective It is to understand: The fundamentals of ObjectARX How to teach yourself AutoCAD APIs Where to get help with afterwards What it is not: Teach you C++. C#. Class Agenda Lectures with Labs Slides give an abstract overview Labs and my comments give the practical experience Lectures: Overview of APIs AutoCAD: Hello.arx – Step 1 + 2 ObjectDBX: Structure – Step 3 + 4 ObjectDBX: Extend it! – Step 5 + 6 AutoCAD: Multi-Document Environment Notification System – Step 7 . 1:00 PM Day 1 Overview of APIs AutoCAD: Hello.Class Schedule Time : 9:30 AM .arx Lab : Step 1 + Step 2 Day 2 ObjectDBX: Structure ObjectDBX: Extend it! Lab : Step 3 + Step 4 + Step 5 + Step 6 Day 3 AutoCAD: MDE Notification System Lab : Step 7 .5:30 PM Lunch 12:00 PM . exe .ObjectARX snoop tool .pptx .this presentation objectarx_2018_win_64_and_32bit. Training Material ObjectARX.ObjectARX installation file ArxDbg . Agenda Overview of APIs AutoCAD: Hello.arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System . API Overview A general look at APIs Types of API Client/Server interaction Client code AutoCAD’s APIs and IDEs Implementation Comparison . cpp in C++) Binary Static library DLL EXE .h/. it is about responsibilities Both sides are (or may be) required to Implement service entry points Call services properly Code implementing API can be packaged as Source code modules (.What is an API? A contract. etc.exe API Static MFC Library 3 API Win 32 API DLLs 1. script. DLL. DLL 4. EXE . Static library 3. Source code 2.API Packaging Client EXE. 4 API ATL templates API 2 1 SomeApp. Client/Server Interaction In process Client/server is in the same process Local Client/server is on the same machine Remote Client/server is on the same network . ARX API APIs ObjectARX .DLL .EXE AutoCAD .DLL . The Plug-In Architecture API is implemented by an exe Client is implemented as a dll .ARX . Forms of Client Code Interpreted code SLOW Source script AutoLISP in the past Packaged code (p-code) Pre-processed.NET Compiled into IL Compiled code FAST Processor instructions ObjectARX . semi interpreted code Compiled Visual LISP AutoCAD. Applications Edition (VBA) (Visual Studio outside AutoCAD) .AutoCAD APIs and IDEs Application Programming Interfaces ObjectARX . Java.NET Managed API COM Automation (VB. Delphi. etc.) AutoLISP Integrated Development Environments in AutoCAD Visual LISP Visual Basic. arx acvba.arx axdb.dll Acmgd.API Implementation II . Delphi) Acdbmgd.dll ObjectARX APIs COM AutoCAD . Java.NET Lisp VBA COM Client script script (VB.dll vl. 00 Update 1000 Circles 0.00 70.00 80.00 90.00 60.00 Add XData to 1000 Entities 10.00 Create 1000 2dPolylines 20.00 40.00 Create 1000 lines COM (VB) COM (VBA) Create 1000 Circles LISP ObjectARX Cre Cre Upd AutoCAD's APIs Add Cre Tota .Old API Performance Comparison S.00 Seconds 50.0.58 API Performance 100.00 Total 30. NET 60000 LISP 40000 VBA VB 20000 0 Xrecord Xdata .How to Store Your Data in AutoCAD Different Programming Techniques Data Container Performance Chart 140000 120000 Time in seconds 100000 ObjectARX 80000 . NET VBA 1000 LISP 0 Xrecord Custom Object .How to Store Your Data in AutoCAD Different Programming Techniques Data Container Performance Chart 5000 Time in seconds 4000 3000 ObjectARX 2000 . NET is close second. .NET. VBA also though obsolete Coverage ObjectARX.API Comparison Summary Speed ObjectARX. .NET everything except custom objects Ease of use . VBA .NET. VBA Learning curve . arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System .Agenda Overview of APIs AutoCAD: Hello. arx ObjectARX What it is Where to get it ObjectARX applications Structure Loading Memory management Creating commands Command mechanism Prompting for user input ObjectARX Wizards . AutoCAD: Hello. .What is ObjectARX? AutoCAD Runtime eXtension A DLL plug-in model A set of Object Oriented C++ libraries A framework A framework? More than just a toolkit Specialized objects can be plugged back into the system Custom entities Reactors .. . What can I do with ObjectARX? Modify and extend the drawing database Create/modify/erase objects Create new types of objects Modify AutoCAD’s user interface Commands Toolbars/dialogs Properties Window Design Center Display system Monitor/Modify AutoCAD’s standard behavior Event notifications Input point acquisition . Free On Autodesk public web site Developer Center .com/adn/servlet/index?siteID=4814862&id=1 6619795&linkID=4900509 .autodesk.ObjectARX (http://usa.com/adsk/servlet/index?id=773204 &siteID=123112) Or Search for ObjectARX on http://www.autodesk. Getting the ObjectARX SDK Download .com/ http://adn.autodesk. Binary compatibility ObjectARX 2018 AutoCAD 2018 Binary incompatible with earlier releases ObjectARX 2017 AutoCAD 2017 Binary incompatible with earlier releases ObjectARX 2016 AutoCAD 2016 ObjectARX 2015 AutoCAD 2015 and 2016 Binary incompatible with earlier releases ObjectARX 2014 AutoCAD 2014 . Development Environment For ObjectARX development Microsoft Visual Studio 2015 Update 3 ObjectARX 2018 SDK Microsoft Windows WIN7 or better . ObjectARX SDK Contents What comes with the SDK Libraries and Header Files Documentation Samples Utilities . I AcRx Object and Class Management (rxapi.lib) AcGe AutoCAD Geometry Library (acge22.acdrawbridge.lib.Main Libraries .lib) 32.lib and ac1st22.lib) AcDb AutoCAD Database (acdb22.lib) AcGi AutoCAD Graphics Interface (acgiapi.and 64-bit versions: C:\ObjectARX 2018\lib-win32 and C:\ObjectARX 2018\lib-x64 .lib) AutoCAD Core Library (accore. lib) Automation (axdb.lib acui22.lib) .II AcUi/AdUi MFC Extension Library (adui22.lib) ads_ Function Set (acad.Main Libraries . lib) AutoCAD Boundary Representation (acbr22.msi downloadable from Developer Center http://usa.autodesk.lib. acgex22.Utilities AutoCAD Facet Modeler (aecmodeler.lib) ObjectARX Wizard ObjectArxWizards.Raster graphics .com/adsk/servlet/index?siteID=123112&id=1911627 ATIL . chm) ObjectARX Training Material and Labs ObjectARXLabs.chm) Managed Class Reference Guide (arxmgd.chm downloadable from Developer Center http://usa.chm) ObjectARX Readme (readarx.On-line Documentation Found in ObjectARX\docs ObjectARX Documentation (arxdoc.chm) Migration Guide (arxmgr.chm) ObjectARX Developers Guide (arxdev.autodesk.chm) Interoperability Guide (arxiop.com/adsk/servlet/index?siteID=123112&id=1911627 .chm) Reference Manual (arxref. Samples The ObjectARX SDK comes with a number of code samples organized into sub-categories: ObjectARX\Samples COM Database DotNet Editor Entity Graphics Misc Reactors PolySamp and ArxDbg Also see Knowledgebase on the ADN website and visit ADN Devblog. .ARX = .DLL + 2 exported functions acrxEntryPoint acrxGetApiVersion .DLL .ARX .ARX .DLL API APIs ObjectARX .EXE AutoCAD Loading ObjectARX Applications I Loaded by the user ARX & APPLOAD commands Drag & Drop Autoloader PackageContents.xml Demand loaded Startup Registry (arxload) in acad2018doc.lsp On command invocation Registry On request From another application On proxy detection Registry . Operating System 1. 4. 6. acrxGetApiVersion 6.ARX 1. CRT_INIT (constructs global class vars) 4. DllMain (see MSDN for info) 5. LoadLibrary 2.Loading ObjectARX Applications II 3. 2. acrxEntryPoint . Rxapi.lib AutoCAD 5. _DllMainCRTStartup (see MSDN for info) 3. AutoCAD de-allocates it with release ‘delete’… CRASH .Wrong ARX Memory Management AutoCAD/ObjectDBX 3.DLL 1. . Piece of CRASH! Memory . . MSVCRTD.DLL 2.ARX passes allocated memory to AutoCAD 3. MSVCRT.ARX allocates memory from debug heap 2.ARX 1. AutoCAD/ObjectDBX MSVCRT. . .Correct ARX Memory Management 3.ARX passes allocated memory to AutoCAD 3.ARX 1.ARX allocates memory from release heap 2.DLL Piece of Memory 2. . AutoCAD de-allocates it with release ‘delete’… OK . 1. Getting Started Visual C++ 14.sysinternals.dependencywalker.com Process Monitor www.com .0 with Update 3 AutoCAD 2018 ObjectARX 2018 ArxDbg \ObjectARX 2018\samples\database\ARXDBG Dependency Walker www. 4. User types command name 4. Call callback function . Callback 2 5.Command Mechanism I . Add command 2. Create command object 3. function AcEdCommand AutoCAD 1. AcEdCommandStack 3. Lookup command object 5.ARX 1. Command Mechanism II Removing commands is as important as adding them Command names can clash Commands belong to groups Command groups must be unique Registered Developer Symbol (RDS) Search for “Registered Developer Symbol” takes you to http://usa.com/adsk/servlet/index?siteID=123112&id=1075006 .autodesk. ARX .Step 1 Setup your first .Lab . Prompting for User Input AcEd functions String. acedGetInt() Point. number acquisition : acedGetString(). angle acquisition : acedGetPoint(). acedGetAngle() Entity selection : acedEntSel() Full range of Win32 controls . .ObjectARX 2018 Wizards Installer downloadable from Developer Center Visual Studio ObjectARX wizards COM Wrapper Wizard Custom Object Wizard Reactors Class Wizard Jig wizard Dynamic Property Wizard etc. Step 2 Play around with user input functions .Lab . arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System .Agenda Overview of APIs AutoCAD: Hello. Terminology AutoCAD Session Document Current Document ObjectARX works with this in background Active Document User sees this in UI Drawing Database Working Database acdbHostApplicationServices()->workingDatabase() . ObjectDBX: Introduction What is ObjectDBX and RealDWG? AutoCAD drawing database Object identity Transactions Inter-object references Important classes Important objects Storing data . RealDWG allows to read/write DWG files from your own application Set of DLLs Custom object data services Extensible application development framework .What is ObjectDBX and RealDWG? ObjectDBX is an AutoCAD-independent subset of ObjectARX RealDWG is the license to use ObjectDBX in an own application outside of AutoCAD. com Autodesk Design Review DWG TrueView – conversion of dwgs from old formats .DWG Viewers No viewing available in RealDWG! AutoCAD OEM DWF www.dwfit. Database Framework . Enabling Custom Objects w/o ACAD . exe & other AutoCAD ObjectDBX DLLs specific DLLs .Plug-In Model & ObjectDBX AutoCAD process .DBX Acad.ARX . lib rcexelib.lib acad.lib achapi22.obj acgiapi.lib adui22.lib … … RealDWG Shared .lib AcTcUI.lib acui22.lib acedapi.lib rxapi.lib AcTc. ObjectARX & ObjectDBX ObjectDBX ObjectARX SDK acdb22.lib oleaprot.lib axdb.lib Acge22.lib acismobj22.lib rxheap. ARX) Create object enabler DLLs (.What can I do with ObjectARX? Create/Modify DWG/DXF files (.DBX) Cannot create standalone applications … this requires RealDWG . AutoCAD Drawing Database An AutoCAD drawing file is the persistent state of an object database Objects have identity (primary key) Objects are only accessed in a transaction Objects can have references to other objects Objects can encapsulate data Relational model Object model Tables Objects Records Objects Fields Data members (encapsulated) . Object Identity Handle (AcDbHandle) Unique identifier of an object for the life of the drawing Object ID (AcDbObjectId) Unique identifier of an object for a session of ObjectDBX Multiple drawings allowed per session IDs unique across ALL files would require too much storage space (GUIDs) Pointer Unique identifier of an object for the duration of a transaction . dwg Closed AcDbObject AcDbObject 4. 2. Object closed Pointer becomes invalid 5. New object added to database New Object ID & Handle assigned 4. Object opened Object ID Pointer 3. Pointers ObjectDBX session 1. 3. Object IDs. Object saved to file Handles are written to disk . Object Open New . Object read from file Handle Object ID 2. 5. 1.Handles. adsName ). objId ).Object ID and Entity Name ads_name is a relic from days of ADS Virtually the same An ads_name Array of two longs An AcDbObjectId First element of ads_name Exchange one for another acdbGetAdsName( adsName. . acdbGetObjectId( objId. Open Modes Read 255 simultaneous readers Write Open/Close model 1 writer at a time read/write are mutually exclusive Transaction model multiple writers are allowed read/write are NOT exclusive Notify Used internally . Transactions Two models Open/Close acdbOpenObject AcDbObject::close. AcDbObject::cancel Transaction AcDbTransactionManager::startTransaction AcTransaction::getObject AcDbTransactionManager::end/abortTransaction Do not mix transaction models e.g. getObject. then close . Client commits Trans1 Trans1 changes are committed 4b. Client commits Trans2 Trans2 changes are committed 4a. Client starts Trans1 and gets Obj1 & Obj2 2. Client starts Trans2 and gets Obj2 & Obj3 3.Nesting AcTransactions 1 2 3 4 Transaction 2 obj2 obj3 Transaction 1 obj1 obj2 obj1 obj3 obj2 AcDbDatabase 1. Client aborts Trans1 instead Trans1 (and Trans2) changes are rolled back . Getting an AcDbDatabase Object Construct one In memory Get the one active in AutoCAD acdbHostApplicationServices()->workingDatabase() More on this in the AutoCAD: MDE section Access some other open document Open a new dwg file . AcDbDatabase Ownership Hierarchy . Object Model Overview classmap.dwg in ObjectARX distribution Important Classes AcRxObject AcGiDrawable AcDbObject AcDbEntity AcDbCurve AcDbDictionary AcDbLine AcDbSymbolTable AcDbBlockTable AcDbSymbolTableRecord Database resident objects Drawable objects Snoop Tools for the AutoCAD Database Tool Language Where to find ArxDbg C++ ObjectARX Samples MgdDbg C# ADN site Inspector C++ ADN site *PAPER_SPACE0 Only entities added to one of these is visible in AutoCAD editor Block table records only own entities AutoCAD’s “symbol tables” Named Objects Dictionary Dictionaries own any objects (but not entities) .Important Objects Block Table Three default records *MODEL_SPACE *PAPER_SPACE. Iterating Through Containers Objects that use iterators Symbol Tables Block Table Records Dictionaries Polylines PolyFaceMesh & PolygonMesh ACIS Solids Called traversers BlockReferences (Inserts) Only useful when attributes are present . i++ ) a = array[i].Iterator Pattern Abstract form of ‘i’ in the following construct: for( int i=0. Needs initialization. i<numElems. done condition and next operation Client1 Client2 iterator1 iterator1 Aggregate See ‘Design Patterns’ by Erich Gamma et al. (ISBN 0-201-63361-2) . ..h) cast down-cast pointer safely isA get class descriptor isKindOf is object derived from? AcDbEntity * ent. if( ent->isKindOf( AcDbLine::desc() ) ) { AcDbLine * line = AcDbLine::cast( ent ). // do something with line->startPoint() . } . RTTI – Runtime Type Identification Object containers provide generic pointers to AcDbObjects AcDbEntities We might prefer a pointer to an AcDbPolyline RTTI allows us to do this AcRxObject defines (in rxobject. AcRxClass I (Overview) Three roles: Runtime type identification Class factory Protocol extension Look for Protocol extension in developer’s guide. AcRxClass is usually set up for a custom object via macros in rxboiler.h ACRX_DECLARE_MEMBERS(CLASS_NAME) ACRX_DXF_DEFINE_MEMBERS … . ) AcRxObject-derived objects hold a pointer to an AcRxClass object (class descriptor object) static class variable AcRxClass objects hold a pointer to the ‘parent’ AcRxClass object forms a ‘run time class hierarchy’ . AcRxClass II (Cont. DBX/.ARX App constructor .AcRxClass III (Object Diagram) Runtime class An AcDbLine hierarchy An AcRxClass for AcDbCurve Another AcDbLine An AcRxClass for AcDbLine An AsdkCircle An AcRxClass for AcDbCircle A protocol extension An AcRxClass object for Pseudo AsdkCircle . AcRxClass IV (Roles) Class Factory During filing we look up the class identifier in the runtime class hierarchy AcRxClass provides a ‘constructor’ function Run time type identification Each AcRxObject provides a virtual member to look up the static member pointing to its AcRxClass object Protocol Extension AcRxClasses hold a list of ‘extension objects’ . Storing Data in the Database Create custom objects (more on this later) Without using custom objects Extended entity data (Xdata) Xrecords Extension dictionaries on individual objects Dictionaries e. under the Named Objects .g. Step 3 Accessing object containers Symbol tables .Lab . AcDbDatabase Ownership Hierarchy . Inter-Object References Ownership Dictates objects written to disk (DWG/DXF) A database object has exactly one owner Database is the ultimate owner Bi-directional Pointer reference Arbitrary references between object Multiple objects can point to the same object Uni-directional Use ArxDbg to discover them . AcDbDictionary AcDbBlockTableRecord AcDbLayerTableRecord Company Dictionary * AcDbLine AcDbObject' AcDbHardOwnershipId AcDbHardPointerId AcDbSoftOwnershipId AcDbSoftPointerId .Inter-Object References AcDbDatabase AcDbDictionary AcDbBlockTable AcDbLayerTable Named Object Dict. Inter-Object References Hard ownership examples Database Object Extension Dictionary Block Table Model Space BTR Extension Dictionaries Entries Hard pointer examples Entity Linetype Text Style . Inter-Object References Soft owner examples Dictionary Entries (can be made hard owner) Symbol Tables Entities (except model and paper space which are hard) Soft pointer example Entity Xdata Entity Handle Object Persistent Reactor . EXPLODE commands Follows only ownership links Purge Soft references do not protect the object from purge . MIRROR. Soft/Hard References Save Follows both types of ownership links Wblock Follows hard owner and hard pointer references. DeepClone COPY. Changing an Object’s Identity I AcDbObject::handOverTo Replaces an objects in the db with a new one Objects cannot be removed from the db You can only flag them as erased removed Open New AcDbObject AcDbObject ObjectDBX Session added . Changing an Object’s Identity II AcDbObject::swapIdWith Changes the object denoted by the object ID id id AcDbObject AcDbObject ObjectDBX Session . Lab .Step 4 Accessing object containers Dictionaries . Agenda Overview of APIs AutoCAD: Hello.arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System . ObjectDBX: Extend It! First step: create a new class Then: participate in desired mechanisms Filing ObjectDBX Undo ObjectDBX Graphics Display host application Whatever else the host application may define e.g. TRIM and BREAK in AutoCAD . Create a New Class Derive from AcRxObject RTTI protocol AcGiDrawable + Graphics protocol AcDbObject + Filing protocol AcDbEntity + Persistent graphics AcDbCurve + Curve entities … ObjectDBX and host applications interact with your object through these interfaces . and also: Copy kCopyFiler Undo kUndoFiler entmake/entget/entmod kBagFiler Copy/Wblock/Insert/Xref/RefeditkIdXlateFiler Paging kPageFiler Wblock kWBlockCloneFiler Purge kPurgeFiler .Filing Read/write object state to another object (filer) Visitor Pattern Filers implement AcDbDwgFiler or AcDbDxfFiler interface Used for DWG/DXF save/load. Filing Out An AcDbDwgFiler 3. 3. Database object calls back into the filer . Filer is passed to the database object 3. 1. 2. An AcDbObject 1. Another AcDbObject ObjectDBX 2. Object implementing filer protocol created 2. 4. An AcDbObject 2. 2. Another 3. Database object calls back into the filer .Filing In An AcDbDwgFiler 4. 1. Filer is passed to the newly created object 4. Class identifier is read from filer 2. 1. AcDbObject ObjectDBX 3. Class is instantiated by AcRxClass class factory 3. I AutoCAD calls the dwgIn which calls your dwgInFields function on: Open kFileFiler Undo kUndoFiler Insert. Xref kDeepCloneFiler + kIdXlateFiler Wblock kWblockCloneFiler + kIdXlateFiler Object paging kPageFiler . Filing Member Functions . Copy. Xref kDeepCloneFiler + kIdXlateFiler Copy same as Insert (files out object’s state and files it into another object) Purge kPurgeFiler Object paging kPageFiler Any Object modification kUndoFiler for undo recording .II AutoCAD calls the dwgOut which in turn calls your dwgOutFields function on: Save/SaveAs kFileFiler Wblock kWblockCloneFiler + kIdXlateFiler Insert. Filing Member Functions . acdbEntMakeX kBagFiler . Filing Member Functions .III AutoCAD calls dxfOut which calls your dxfOutFields function on: WBLOCK kFileFiler SAVE kFileFiler SAVEAS kFileFiler acdbEntGet kBagFiler AutoCAD calls dxfIn which calls your dxfInFields function on: OPEN kFileFiler INSERT kFileFiler acdbEntMod. acdbEntMake. +2. AcDbDxfFiler Data sent to a DXF filer is tagged with DXF group codes Group code ranges for each data type AcDb enum has first in each range use +1. etc to get others AcDb::DxfCode Groups may come in any sequence . Check You Have Access Rights Member functions should first call one of these: assertReadEnabled Every member function that reads data assertWriteEnabled Every member function that modifies data assertNotifyEnabled Used internally . Proxy A proxy object is created in memory when a defining application is not available Surrogate data holder for custom object Class ID Class ID Graphics data Object data Only inter-object references are interpreted Used to draw proxy graphics . Step 5 Creating a Custom Object .Lab . Graphics Display ObjectDBX does not display any graphics ObjectDBX defines a callback API that host applications may implement AcGi: interface between database objects and a display system Host applications must implement AcGi to display graphics AcGi Library defines the interface between database objects and a display system . AcGi Class Diagram AcGiContext AcGiContext AcGiCommonDraw AcGiSubentityTraits AcGiSubentityTraits AcGiGeometry AcGiGeometry AcGiWorldDraw AcGiWorldGeometry AcGiWorldGeometry AcGiViewportDraw AcGiViewportDraw AcGiViewportGeometry AcGiViewportGeometry AcGiViewport Legend: Inheritance Containment . Graphics Acquisition 4. An AcGiWorldDraw An AcGiDrawable 6. 1. 3. 5. Host Application An AcGiViewportDraw 2. 1. Host creates object implementing AcGiWorldDraw 2. Host creates object implementing AcGiViewportDraw 3. Host passes world-draw object to your drawable 4. Drawable draws viewport independent graphics 5. Host passes viewport-draw object to your drawable 6. Drawable draws viewport dependent graphics AcGiGeometry Responsible for inserting geometry into the graphics cache for later display Primitive geometry used: circle, circularArc, polyline, mesh, pline, polygon, shell, text, xline and ray Viewport-dependent and viewport-independent graphics AcGiSubEntityTraits Traits control current attributes for primitives: color, layer, linetype, filltype graphics system (GS) marker Allows identification of sub-entities Once set, a trait stays active until changed or out of scope Default attribute values: color, layer, linetype - Current for editor filltype - kAcGiFillNever if standard mode kAcGiFillAlways if hide, shade, render gsmarker - invalid, must be set by app Host-Defined Mechanisms ObjectDBX defines protocols for Grips Osnaps Intersection Transformations etc. Host applications use as appropriate e. Volo View does not use grips .g. default is to call subGetGripPoints subMoveStretchPointsAt .used by stretch.define grip points subMoveGripPointsAt .needed for moving entity . default is subTransformBy subTransformBy .define osnap points subGetGripPoints .default is to call AcDbEntity::subTransformBy subGetStretchPoints .provide stretch points other than the grippoints. AcDbEntity Protocol subGetOsnapPoints . return eExplodeAgain Hatch calls explode recursively until down to “native” entities (until eOk returned) .no default subGetGeomExtents . layer.no default subList .print specified data.no default. DXF name. space. AcDbEntity Protocol subIntersectWith . and handle by default subExplode . must be implemented for hatch to work If exploding to non-“native” objects. Lab .Step 6 Creating a Custom Entity . Agenda Overview of APIs AutoCAD: Hello.arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System . Active Documents .AutoCAD: Multi-Document Environment (MDE) Documents Per-document data Current vs. Documents State of the edit session AcApDocument class encapsulates AcDbDatabase viewed XRefed databases Selection sets Most system variables AcApDocManager holds the list of documents . Per-Document Data Applications may have per-doc data this is their concept of a document Data must be kept in sync with the active document (fiber) this is their concept of a document manager . Active Documents Current… for the user = ‘Active’ for the API = ‘Current’ Activating a document sets the current doc current document = active document Current doc can change (programmatically) current document may not be active .Current vs. arx ObjectDBX: Structure ObjectDBX: Extend it! AutoCAD: Multi-Document Environment Notification System .Agenda Overview of APIs AutoCAD: Hello. Notification System Observer Pattern Implementation Subjects & Observers ObjectDBX AutoCAD Acting as an Observer Acting as a Subject . Provides interface to Defines updating interface attach/detach observers Observer Subject observers Attach(Observer) Update() Detach(Observer) For all o in observers { SendNotification() o->Update() } ConcreteSubject ConcreteObserver Update() subjectState observerState . Knows its observers 2. Notification Observer pattern class diagram 1. Client creates observer 2. Observer learns details of state change . A ConcreteObserver 2. Client 1. Client attaches observer to subject 3. Subject changes state and fires notification to observer 4. 1. A ConcreteSubject 4.Notification Observer pattern interaction diagram 3. Client creates your custom object 2. Your custom object 2. 1. Client 1. An AcDbLine 4. Changing AcDbLine sends objectModified notification 4. Client calls addPersistentReactor on the AcDbLine 3. Your custom object looks at the line to find out what changed .Notification Example Interaction diagram 3. ObjectDBX Observers (reactors) Another AcDbObject An AcDbDatabaseReactor An AcDbDatabase An AcDbObject An AcDbObjectReactor Subjects The AcDbLayoutManager An AcDbLayoutManagerReactor The AcDbTransactionManager An AcTransactionReactor The AcRxEvent An AcRxEventReactor The AcRxDynamicLinker An AcRxDLinkerReactor ObjectDBX . AutoCAD Observers (reactors) The AcDbSummaryInfoManager An AcDbSummaryInfoReactor The AcGsManager An AcGsReactor The AcApProfileManager An AcApProfileManagerReactor Subjects An AcEdInputPointFilter The AcEdInputPointManager An AcEdInputPointMonitor An AcEdInputContextReactor The AcApLongTransactionManager An AcApLongTransactionReactor The AcApDocumentManager An AcApDocManagerReactor The AcEditor An AcEditorReactor AutoCAD . Acting as an Observer Derive a concrete observer class Override notification functions Instantiate it Attach it to subject Remove it when done At least when application is unloaded . Acting as a Subject Define your own observer (notification) interface Provide methods to attach/detach observers Send notifications when state changes If your observer (reactor) is database resident then open it for kForNotify . Step 7 Observing various subjects .Lab . download training labs http://www.More API Resources AutoCAD Developer Center .com/autocad/ Whitepapers and Training Videos – ADN members http://adn.com/apitraining .autodesk.NET) http://through-the-interface.com AutoCAD .typepad.autodesk.typepad.com/through_the_interface/ AutoCAD DevBlog http://adndevblog.autodesk.NET Training (classroom) http://www.com/developautocad Blogs Through the Interface (AutoCAD.com/adn/servlet/index?siteID=4814862&id=5475227&li nkID=4900509 Discussion Groups : http://discussion.autodesk. Thank You ! .