Académique Documents
Professionnel Documents
Culture Documents
Pour ceux qui viennent du lisp comme du VBA : programmer avec un diteur
compltement externe Autocad.
Ce dernier point entraine pas mal de complications et de lourdeurs, pour les tests, le
dbogage, et laccs la documentation.
Cet article est une rponse de dbutant pour les dbutants quelques points prcis, et ne
donne des exemples quen VB
Expriences .Net octobre 2012
Par o commencer avec .net?
Ou trouver de l'aide sur les classes et le modle dobjet ?
Dans Visual Studio
Autres sources de documentation
Dans le rpertoire du SDK : Contenu de C:\ObjectARX 2012\docs :
Aide pour la programmation de Map
Aide pour la programmation de Civil
Aide pour la programmation avec Com (Visual basic, Visual lisp)
Migration de projet VBA
Comparaison manag-non manag
Non manag :
Manag :
Pourquoi mes points d'arrt ne fonctionnent pas ?
Glossaire :
Liens divers et utiles :
Pour toutes les librairies Autocad, il n'y a rien, sauf les mots clefs, les types, etc.
Pour avoir l'aide du SDK Autocad avec Visual studio, il faut installer l'aide pour Visual studio :
Tlcharger ObjectARX 2012 Documentation sur la page ADN et l'installer d'abord sous Windows,
puis sous Visual Studio :
- Ouvrir le gestionnaire d'aide
- Installer du contenu partir du disque
- Parcourir... -> C:\Program Files (x86)\Autodesk\ObjectARX 201x Help Files - Visual Studio 2010
Integration\helpcontentsetup.msha
- Suivant
- ObjectARX (Native & Managed) AutoCAD 201x -> Ajouter
Mais ce n'est pas forcment vident, il y a quelques problmes voir Ici
arxdev.chm
ObjectARX Introductory Concepts, un genre de arx developper guide ressemble celui du lisp
arxiop.chm
ObjectARX for AutoCAD 2012 : Application Interoperability Guidelines
Des explications sur les conventions de noms, d'interface, d'installation, un guide de
bonne pratique.
arxmgd.chm
ObjectARX for AutoCAD 2011 : Managed Class Reference
The Managed Class library provides namespaces which wrap the ObjectARX C++ library. This
permits developers to program in the .NET environment.
L'quivalent de l'aide active X pour .net : toutes les classes, les mthodes et les
proprits.
Par exemple, pour les entits graphiques:
Autodesk.AutoCAD.DatabaseServices.Entity
This .NET class wraps the AcDbEntity ObjectARX class. It is the base class for
all database objects having a graphical representation.
Exemple : 3dsolid
Autodesk.AutoCAD.DatabaseServices.DBObject
Autodesk.AutoCAD.DatabaseServices.Entity
Autodesk.AutoCAD.DatabaseServices.Solid3d
Manag,
est quivalent :
AcRxObject
AcGiDrawable
AcHeapOperators
AcDbObject
AcDbEntity
AcDb3dSolid
Non Manag.
Managed methods
BooleanOperation
ChamferEdges
CheckInterference
CleanBody
ConvertToBrepAtSubentPaths
CopyEdge
CopyFace
CreateBox
CreateExtrudedSolid
CreateFrustum
CreateLoftedSolid
CreatePyramid
CreateRevolvedSolid
CreateSculptedSolid
CreateSphere
CreateSweptSolid
Arx methods
body
booleanOper
chamferEdges
checkInterference
cleanBody
convertToBrepAtSubentPaths
copyEdge
copyFace
createBox
createExtrudedSolid
createFrom
createFrustum
createLoftedSolid
createPyramid
createRevolvedSolid
createSculptedSolid
createSphere
createSweptSolid
CreateTorus
CreateWedge
Extrude
ExtrudeAlongPath
ExtrudeFaces
ExtrudeFacesAlongPath
FilletEdges
GetSection
GetSubentityColor
GetSubentityMaterial
GetSubentityMaterialMapper
ImprintEntity
OffsetBody
OffsetFaces
ProjectOnToSolid
RemoveFaces
Revolve
SeparateBody
SetSubentityColor
SetSubentityMaterial
SetSubentityMaterialMapper
ShellBody
createTorus
createWedge
enableObjectChangeGuid
extrude
extrudeAlongPath
extrudeFaces
extrudeFacesAlongPath
filletEdges
generateDifferentObjectChangeGuid
getArea
getMassProp
getObjectChangeGuid
getSection
getSlice
getSubentColor
getSubentMaterial
getSubentMaterialMapper
imprintEntity
internalSubentId
internalSubentPtr
isNull
isObjectChangeGuidEnabled
numChanges
offsetBody
offsetFaces
projectOnToSolid
recordHistory
removeFaces
revolve
separateBody
setBody
setRecordHistory
setShowHistory
setSubentColor
setSubentMaterial
setSubentMaterialMapper
shellBody
showHistory
Slice
StlOut
stlOut
subGetClassID
TaperFaces
taperFaces
TransformFaces
transformFaces
On voit que toutes les mthodes arx n'existent pas en manag, et qu'une seule mthode existe en
manag mais pas en arx : Slice
arxmgr.chm
ObjectARX 64-Bit Migration Guide
arxref.chm
ObjectARX for AutoCAD Ironman : Reference Guide
Documents the ObjectARX and RealDWG C++ classes, member functions, global
functions, namespaces, enumerations, structures, and macros.
Voir le comparatif ci dessus avec arxmgd.chm
Contient toutes les classes, les mthodes et les proprits en non manag
readarx.chm
ObjectARX for AutoCAD 2012: Readme
Describes changes and additions to this release of ObjectARX.
civil_api_activex_reference.chm
civil_api_developers_guide.chm
civil_api_draw_reference.chm
civil_api_net_reference.chm
arxref.chm
L'exemple que je connais bien : acedInvoke() / invoke () qui a t l'objet de ce sujet : Liaison
LISP/.NET
Non manag :
Import de acedInvoke
<System.Security.SuppressUnmanagedCodeSecurity()> _
<DllImport("acad.exe", EntryPoint:="acedInvoke", _
CharSet:=CharSet.Unicode, CallingConvention:=CallingConvention.Cdecl)> _
Private Shared Function acedInvoke(ByVal args As IntPtr, ByRef result As IntPtr) As
Integer
End Function
Le rsultat est pass par IP, qui est un IntPtr, et qui est transform en resultbuffer par la methode
create : ResultBuffer.Create(ip, True)
'ResultBuffer.Create
'This method creates a managed ResultBuffer object from an unmanaged resbuf pointer.
Exemple d'utilisation :
' call the 'foo' Lisp function which binds the reversed list to 'lst2'
' (defun foo () (setq lst2 (reverse lst1))) (vl-acad-defun 'foo)
AcadExtensions.LispExtensions.InvokeLisp(New ResultBuffer(New
TypedValue(CInt(LispDataType.Text), "foo")))
Manag :
Pas besoin d'import, on a une seule fonction :
Public Shared Function InvokeLispManaged(ByVal args As ResultBuffer) As ResultBuffer
Return Autodesk.AutoCAD.ApplicationServices.Application.Invoke(args)
End Function
Exemple d'utilisation :
' (defun foo () (setq lst2 (reverse lst1))) (vl-acad-defun 'foo)
'Appel lisp en manag:
retour = AcadExtensions.LispExtensions.InvokeLispManaged(New ResultBuffer(New
TypedValue(CInt(LispDataType.Text), "foo")))
Le code manag est donc plus simple, il faut d'abord chercher dans
arxmgd.chm
" + Chr(iObjCnt))
Glossaire :
Beaucoup de mots anglais nont t rencontrs que dans le contexte informatique. Il peut tre
intressant de connatre leur sens gnral :
En voici quelques un issus dun dico harraps, mais cette liste a vocation sagrandir
Class : leon, cours
Inherit : hriter
Overrule : Rejeter (jaurais jur passer par-dessus la rgle )
Override : Annuler, passer outre, prdominer
Void : Vide, nul, non valide
Wrap : Envelopper
Dumpbin :
Ouvrir en mode administrateur le rpertoire :
C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
Exemple dusage :
dumpbin /headers C:\Windows\System32\*.dll
ou
dumpbin.exe /EXPORTS acad.exe > acad.txt
g-eaux