Académique Documents
Professionnel Documents
Culture Documents
Introduction
Cette introduction décrit le concept d'exposition d'objets AutoCAD via une interface Automatisation ActiveX et leur programmation dans l'environnement Visual
Basic pour Applications (VBA).
Structure du manuel
Informations complémentaires
Exemple de code
Introduction
ActiveX® d'AutoCAD® vous permet de manipuler AutoCAD par programmation depuis AutoCAD ou depuis l'extérieur d'AutoCAD. Pour ce faire, le programme
affiche les objets AutoCAD dans un “environnement extérieur”.Une fois exposés, ces objets sont accessibles par différents langages et environnements de
programmation, ainsi que par d'autres programmes comme Microsoft® Word VBA ou Excel VBA.
La mise en œuvre d'une interface ActiveX pour AutoCAD présente deux avantages :
L'accès par programmation aux dessins AutoCAD est possible sous de nombreux autres environnements de programmation. Avant Automatisation ActiveX,
les développeurs ne disposaient que d'une interface AutoLISP® ou C++.
Le partage de données avec d'autres applications Windows®, telles que Microsoft Excel et Word, s'en trouve grandement facilité.
Un objet constitue le noyau de toute application ActiveX. Chaque objet exposé représente une partie spécifique d'AutoCAD. L'interface ActiveX d'AutoCAD est
constituée de différents types d'objets. Par exemple :
Les objets graphiques comme des lignes, des arcs, du texte et des cotes sont des objets.
Les paramètres de style comme des types de ligne et des styles de cotes sont des objets.
Les éléments de structure comme des calques, d es groupes et des blocs sont des objets.
Les éléments d'affichage graphique comme les vues et les fenêtres sont des objets.
Même le dessin et l'application AutoCAD sont considérés comme des objets.
Introduction
Microsoft VBA est un environnement de programmation orienté objet conçu pour fournir des fonctions de développement étendues semblables à celles de
Visual Basic 6 (VB). La principale différence entre VBA et VB est que VBA est exécuté dans l e même espace de traitement qu'AutoCAD et constitue ainsi un
environnement de programmation très rapide, capable d'interpréter des commandes AutoCAD.
VBA permet également l'intégration à d'autres applications utilisant VBA. Ainsi, en association avec d'autres bibliothèques d'objets d'application, AutoCAD peut
constituer un contrôleur d'automatisation pour d'autres applications comme Microsoft Word ou Excel.
Les modules de développement autonome de Visual Basic 6, qui sont vendus séparément, complètent AutoCAD VBA en proposant des composants
supplémentaires tels qu'un moteur de base de données externe ou un module de génération de rapports.
Introduction
VBA transmet les messages à AutoCAD via l 'interface ActiveX Automation. AutoCAD VBA permet d'exécuter l'environnement VBA et AutoCAD simultanément.
Elle offre également la possibilité d'un contrôle d'AutoCAD par programmation, grâce à l'interface Automatisation ActiveX. Le regroupement d'AutoCAD,
d'ActiveX Automation et de VBA constitue une interface extrêmement puissante, non seulement pour le traitement d'objets AutoCAD mais aussi pour l'envoi et
l'extraction de données vers et depuis d' autres applications.
Trois éléments fondamentaux définissent la programmation ActiveX et VBA dans AutoCAD. Le premier est le logiciel AutoCAD proprement dit, qui dispose d'un
riche ensemble d'objets encapsulant les entités, données et commandes AutoCAD. AutoCAD ayant été conçu en tant qu' application d'architecture ouverte avec
plusieurs niveaux d'interface, vous devez vous familiariser avec les possibilités de programmation de ce logiciel pour pouvoir exploiter VBA au mieux. Si vous
avez déjà utilisé AutoLISP pour contrôler AutoCAD par programmation, vous devez déjà avoir une bonne compréhension des fonctions d'AutoCAD. Toutefois,
l'approche VBA qui est fondée sur les objets est assez différente de celle d'AutoLISP.
Le second élément est l'interface Automatisation ActiveX d'AutoCAD, qui établit des messages (communication) avec les objets AutoCAD. La programmation
dans VBA nécessite une compréhension générale d'Automatisation ActiveX. Vous trouverez une description de l'interface Automatisation ActiveX d'AutoCAD
dans le manuel ActiveX and VBA Reference . Même les programmeurs VB expérimentés trouvent cette interface essentielle pour la compréhension et le
développement d'applications AutoCAD VBA.
Le troisième élément est l'environnement de programmation VBA ; il dispose de son propre ensemble d'objets, de mots clés, de constantes, etc., qui permettent
l'exécution, le débogage, le contrôle et le flux du programme. L'aide en ligne étendue Microsoft de VBA est fournie avec l'aide d'AutoCAD VBA ; vous pouvez y
accéder à partir de l'environnement VBA IDE de l'une des façons suivantes :
Contraintes et limitations
Introduction
Pour accéder pleinement aux objets d'automatisation d'AutoCAD à partir de Microsoft Visual Studio® .NET, créez des références aux fichiers suivants :
La bibliothèque de type AutoCAD 2007 acax17enu.tlb , placée sous c:\program files\common files\autodesk shared.
La bibliothèque de type AutoCAD/ObjectDBX Common 17.0, axdb17enu.tlb , placée sous c:\program files\common files\autodesk shared.
Ces références mettront à disposition les assemblys avec i nteropérabilité principaux suivants : Autodesk.AutoCAD.Interop.dll (pour les types spécifiques à
AutoCAD) et Autodesk.AutoCAD.Interop.Common.dll (pour les types partagés par les applications hôtes ObjectDBXTM). Les assemblys avec interopérabilité
sont placés dans le cache d'assembly global ; ils établissent la correspondance des objets d'automatisation avec les équivalents .NET.
Après avoir référencé les bibliothèques de type, vous pouvez déclarer les variables basées sur AutoCAD dans Microsoft Visual Studio .NET, comme dans les
exemples suivants :
Vous pouvez charger une application .NET à l'aide de la commande NETLOAD dans AutoCAD.
Pour de plus amples informations sur l'utilisation d'une application .NET avec AutoCAD, visitez la section Developer Center (Centre des développeurs) du site
Web Autodesk.
Introduction
Contraintes et limitations
Si vous installez, réinstallez ou désinstallez Microsoft Office ou d'autres applications VBA après avoir installé AutoCAD, réinstallez AutoCAD et redémarrez
votre ordinateur.
Introduction
Comparée aux autres environnements API d'AutoCAD, l'interface AutoCAD ActiveX/VBA présente plusieurs avantages :
Vitesse. Exécutées dans le même processus que VBA, les applications ActiveX sont plus rapides que les applications AutoLISP.
Facilité d'utilisation. Le langage de programmation ainsi que l'environnement de développement sont simples à utiliser et sont fournis, prêts à l'emploi, avec
AutoCAD.
Interaction avec Windows. Les applications ActiveX et VBA sont conçues pour être utilisées avec d'autres programmes Windows et constituent ainsi un bon
outil d'échange d'informations entre différentes applications.
Prototypage rapide. L'interface de développement rapide de VBA est parfaite pour la création de prototypes d'application, ceci même si l'application en
question doit être développée dans un a utre langage.
Accessibilité aux programmeurs. Les technologies ActiveX et VBA d'AutoCAD permettent aux programmeurs Visual Basic 6 de personnaliser AutoCAD et
de développer des applications dédiées.
Introduction
Structure du manuel
Le présent manuel fournit des informations sur le développement d'applications ActiveX et VBA en vue de leur utilisation avec AutoCAD. Vous trouverez des
informations propres au développement d'applications à l'aide de VBA dans les chapitres “Démarrage avec VBA” et “Développement d'applications avec
VBA”.Les programmeurs utilisant ActiveX à partir d'un environnement de développement autre q ue VBA peuvent ignorer ces deux chapitres. N'oubliez pas que
tous les exemples de code donnés d ans ce manuel sont exécutés dans l' environnement VBA.
Introduction
Informations complémentaires
Ce guide suppose que vous disposez d' un savoir de niveau professionnel du langage de programmation Visual Basic 6 et que vous ne tenterez pas de
dupliquer ou de remplacer l'abondante documentation proposée sur Visual Basic 6. Pour de plus amples informations sur le langage ou l'utilisation de
l'environnement de développement Visual Basic 6, consultez le fichier d'aide Visual Basic pour Applications développé par Microsoft, disponible dans le menu
d'aide de l'environnement de développement interactif (IDE).
Introduction
Exemple de code
Ce guide et le manuel ActiveX and VBA Reference contiennent à eux deux plus de 800 exemples de sous-programmes VBA qui montrent comment utiliser des
méthodes, des propriétés et des événements ActiveX.
De nombreuses applications sont également disponibles dans le répertoire Sample d'AutoCAD. Ces applications présentent de nombreuses fonctionnalités qui
vont de l'extraction de données de dessin d'AutoCAD dans des feuilles Microsoft Excel jusqu'au tracé et à l'exécution d'analyses de contrainte sur un pylône
électrique.
Ces exemples vous montrent comment allier la polyvalence de l'environnement de programmation de Visual Basic pour Applications à la puissance de
l'interface ActiveX d'AutoCAD afin de créer des applications personnalisées.
De plus, il est possible de copier le code d'exemple du Guide de programmation ActiveX et VBA et du manuel ActiveX and VBA Reference depuis les fichiers
d'aide, de le coller directement dans l'environnement AutoCAD VBA, puis de l'exécuter à la seule condition suivante : le dessin courant actif dans AutoCAD doit
être un dessin vide ouvert dans l'espace objet.
Introduction
Vous pouvez utiliser les fonctionnalités d'AutoCAD avec les o bjets et les méthodes ajoutés à l'interface Automatisation ActiveX. Cette section inclut les
modifications applicables aux projets d'automatisation créés avec Visual Basic pour Applications (VBA), Vi sual Basic 6 (VB) et d'autres environnements
compatibles avec l'automatisation.
Pour plus d'informations sur l'utilisation des fonctions dans AutoCAD, reportez-vous à la section correspondante.
Nouveaux objets
Eléments modifiés
Introduction
Nouveaux objets
Les objets suivants sont nouveaux dans AutoCAD 2007. Pour de plus amples informations sur ces objets, reportez-vous au manuel ActiveX and VBA Reference
et à l'Explorateur d'objets dans l'environnement VBA IDE.
Par ailleurs, AutoCAD 2007 contient des objets pour l'automatisation du Gestionnaire du jeu de feuilles. Pour de plus amples informations sur ces objets,
reportez-vous au manuel Sheet Set Objects Reference .
Introduction
Eléments modifiés
Eléments modifiés
Elément AutoCAD Elément AutoCAD Description du changement
2004 2007
BeginClose, Evénement Vous pouvez utiliser l'événement BeginDocClose pour empêcher la fermeture d'un dessin.
événement BeginDocClose
Layer, objet Layer, objet Ajout de la propriété Description et de la propriété Used
Layers, collection Layers, collection Ajout de la méthode GenerateUsageData
Collection Collection Ajout de la méthode AddTable à toutes les collections et à l'objet ; ajout de la propriété Path dans l'objet Block.
ModelSpace ModelSpace
Collection Collection
PaperSpace PaperSpace
Block, objet Block, objet
Objet MText, objet Objet MText, objet Ajout de la propriété BackgroundFill à l'objet MText ; ajout de la méthode FieldCode à l'objet MText et à l'objet Text.
Text Text
Plot, objet Plot, objet La propriété BatchPlotProgress et la propriété StartBatchMode sont obsolètes. Il est recommandé d'utiliser les applications
Microsoft .NET pour le traçage en différé. La méthode DisplayPlotPreview ne prend plus en charge l'aperçu partiel.
Objet Objet Ajout de la propriété PlotLogFilePath, de la propriété PageSetupOverridesTemplateFile et de la propriété
PreferencesFiles PreferencesFiles QNewTemplateFile.
Objet Objet Ajout de la propriété AutomaticPlotLog, de la propriété DefaultPlotToFilePath et de la propriété ContinuousPlotLog.
PreferencesOutput PreferencesOutput
Viewport, objet Viewport, objet Ajout de la propriété ModelView, de la propriété SheetView, de la propriété LabelBlockId, de la propriété HasSheetView et
de la méthode SyncModelView.
Objet View Objet View Ajout de la propriété CategoryName, de la propriété LayoutId, de la propriété LayerState et de la propriété
HasVpAssociation.
Introduction
En règle générale, un projet d'automatisation AutoCAD créé dans l'environnement VBA IDE ou avec Visual Basic 6 fonctionne avec AutoCAD 2007.
Les projets d'automatisation AutoCAD 2007 utilisent la même bibliothèque de type (acax17enu.tlb) que les projets d'automatisation AutoCAD. La bibliothèque
de type est placée sous C:\Program Files\Common Files\Autodesk Shared .
Les projets d'automatisation AutoCAD 2007 utilisent également le même ProgID dépendant d'une version pour les méthodes CreateObject, GetObject et
GetInterfaceObject. Par exemple, si vous utilisez la fonction CreateObject dans u n projet d'automatisation AutoCAD, vous utilisez CreateObject
("AutoCAD.Application.17"). Si un projet d'automatisation utilise des ProgID indépendants d'une version, changez le projet pour utiliser des ProgID dépendants
d'une version.
Ce chapitre présente les projets AutoCAD Visual Basic pour Applications (VBA) et l'environnement VBA IDE (environnement de d éveloppement interactif). Bien
que la plupart des environnements VBA se comportent de la même façon, l'environnement VBA IDE pour AutoCAD présente des caractéristiques uniques.
Certaines commandes AutoCAD peuvent par ailleurs être utilisées pour charger et exécuter des projets, ou ouvrir l'environnement VBA IDE. Ce chapitre définit
l'utilisation de projets et de commandes VBA, et de l'environnement VBA IDE en général.
Gestion de macros
Exercice préparatoire
Informations complémentaires
Un projet AutoCAD ® VBA est une collection de modules de code, de modules de classe et de feuilles qui, ensemble, exécutent une fonction donnée. Des projets
peuvent être enregistrés dans un dessin AutoCAD ou en tant que fichier distinct.
Les projets intégrés sont enregistrés dans un dessin AutoCAD. Ils sont chargés automatiquement lorsque le dessin dans lequel ils se trouvent est ouvert dans
AutoCAD, ce qui facilite la distribution des projets. Ces projets sont limités et ne permettent pas d'ouvrir ni de fermer des dessins AutoCAD, car ils ne
fonctionnent que dans le document dans lequel ils résident. Les utilisateurs de projets intégrés n'ont ainsi pas à rechercher et à charger des fichiers de projet
avant d'exécuter un programme. Un rapport horaire activé lorsque le dessin est ouvert constitue un exemple de projet intégré à un dessin. Cette macro permet
à l'utilisateur d'ouvrir une session et d'enregistrer la durée passée à la réalisation du dessin. Il n'a ainsi pas besoin de charger le projet avant d'ouvrir le dessin,
car cette opération est effectuée automatiquement.
Les projets globaux sont enregistrés dans des fichiers distincts et sont d'utilisation plus souple, car ils permettent d'ouvrir, de fermer et d'utiliser des dessins
AutoCAD ; ils ne sont toutefois pas chargés automatiquement lorsqu'un dessin est ouvert. L'utilisateur doit savoir quel fichier de projet contient la macro requise,
puis charger ce fichier avant d'exécuter la macro. Les projets globaux n'en restent pas moins plus faciles à p artager avec d'autres utilisateurs et constituent de
parfaites bibliothèques de macros communes. Une macro qui recueille la nomenclature de nombreux dessins est un exemple de projet que vous pouvez
enregistrer dans un fichier de projet. Cette macro peut être exécutée par un administrateur à la fin du cycle de travail et recueillir des informations de nombreux
dessins.
A un moment donné, l'utilisateur peut a voir à la fois des projets intégrés et globaux dans sa session AutoCAD.
Les projets AutoCAD VBA ne sont pas "binairement" compatibles avec des projets Visual Basic 6 autonomes. Toutefois, vous pouvez échanger des feuilles,
des modules et des classes entre des projets à l'aide des commandes IMPORTER et EXPORTER dans l'environnement VBA IDE. Pour de plus amples
informations sur l'environnement VBA IDE, reportez-vous à la section Modification de projets avec VBA IDE .
L'utilisation de Visual Studio .NET pour conduire et personnaliser AutoCAD via l'automatisation COM est prise en charge.
Vous pouvez afficher tous les projets VBA chargés dans la session AutoCAD active en utilisant le Gestionnaire VBA. Il s'agit d'un outil AutoCAD qui vous
permet de charger, décharger, enregistrer, créer, incorporer et extraire des projets VBA.
Vous pouvez ouvrir le Gestionnaire VBA à partir du menu Outils ou, dans AutoCAD, en appelant la commande GESTVBA
Enregistrement de projet
Lorsque vous chargez un projet dans AutoCAD, tous les sous-programmes publics, également appelés macros, deviennent disponibles. Les projets intégrés à
un dessin sont chargés lors de l'ouverture du dessin. Les projets enregistrés dans d es fichiers DVB doivent être chargés explicitement.
Dès que vous chargez un projet, tous les autres projets référencés par le premier sont chargés automatiquement. AutoCAD charge automatiquement au
démarrage tout fichier de projet portant le nom acad.dvb .
2. Dans cette boîte de dialogue, sélectionnez le fichier de projet à ouvrir. Vous ne pouvez ouvrir que des fichiers DVB corrects. Si vous essayez d'ouvrir un
autre type de fichier, un message d'erreur s'affiche.
3. Cliquez sur Ouvrir.
Vous pouvez charger un fichier projet en utilisant l'une des méthodes suivantes :
Entrez la commande CHARGVBA pour ouvrir la boîte de dialogue Ouvrir un projet VBA.
Faites glisser un fichier DVB depuis l 'Explorateur Windows et déposez-le sur un dessin ouvert dans la fenêtre AutoCAD.
Signalisation de virus
Signalisation de virus
Chaque fois que vous chargez un projet, vous pouvez activer ou désactiver le code de protection antivirus contenu dans ce projet. Si vous l'activez, l'exécution
des virus dans le code peut commencer. Si vous le désactivez, le projet est toujours chargé, mais le code qu'il contient n'est pas exécuté. La signalisation de
virus n'est pas activée lorsque vous faites glisser un fichier DVB depuis l'Explorateur Windows et le déposez dans un dessin ouvert de la fenêtre AutoCAD.
Pour plus d'informations sur la signalisation de virus, reportez-vous à la section Définition des options de projet .
Le déchargement d'un projet libère de l a mémoire et conserve la liste des projets chargés à une taille raisonnable, ce qui facilite nettement la g estion.
Vous ne pouvez pas décharger des projets intégrés ou référencés par d'autres projets chargés.
Vous pouvez décharger le projet VBA de votre choix en le sélectionnant et en cliquant sur Décharger, ou à l'aide de la commande DECHARGVBA, qui vous
demande de spécifier le projet à décharger.
Lorsque vous incorporez un projet, vous placez une copie de ce projet dans la base de données du dessin. Ce projet est ensuite chargé et déchargé lorsque le
dessin qui le contient est ouvert ou fermé.
Un dessin ne peut contenir qu'un seul projet intégré à la fois. Si un dessin contient déjà un projet intégré, vous devez d'abord l'extraire avant d'incorporer un
autre projet au dessin.
Lorsque vous extrayez un projet, vous le supprimez de la base de données du dessin et vous pouvez l'enregistrer dans un fichier de projet externe. Si vous
n'enregistrez pas le fichier dans un fichier de projet externe, les données de ce projet sont supprimées.
Les nouveaux projets sont créés sous forme de projets globaux non enregistrés. Une fois un projet créé, vous pouvez l'incorporer à un dessin ou l'enregistrer
dans un fichier de projet.
Enregistrement de projet
Les projets intégrés sont enregistrés avec le dessin. Les projets globaux doivent être enregistrés dans le Gestionnaire VBA ou l'environnement VBA IDE.
Gestion de macros
Une macro est un sous-programme public (exécutable). Chaque projet contient généralement au moins une macro.
Cette boîte de dialogue permet d'exécuter, de modifier, de supprimer, de créer des macros et de définir les options du projet VBA. Pour ouvrir la boîte de
dialogue Macros depuis le menu Outils d'AutoCAD, choisissez Macro » Macros ou exécutez EXECVBA à l'invite de commande AutoCAD.
Les noms de toutes les macros situées dans l'intervalle correspondant apparaissent dans la boîte de dialogue. Vous pouvez changer d'intervalle dans la zone
de liste déroulante Emplacement. Cette zone donne la liste des projets ou des dessins dont les macros sont affichées. Vous pouvez afficher les macros dans :
En limitant l'intervalle de sélection, vous pouvez contrôler le nombre de noms de macros affichés dans la liste. Ceci est utile lorsque de nombreuses macros
sont disponibles dans les dessins et les projets chargés.
Si une macro existante porte déjà ce nom, AutoCAD vous demande si vous souhaitez l a remplacer.
Si vous choisissez Oui, le code de la macro existante est supprimé et une nouvelle macro vide est créée sous le nom spécifié.
Si vous répondez Non, vous retournez alors à la boîte de dialogue Macros pour saisir un nouveau nom.
Si vous cliquez sur Annuler, la boîte de dialogue Macros disparaît et aucune macro n'est créée.
Lors de l'exécution d'une macro, son code est exécuté dans le contexte de la session AutoCAD active. Le dessin actif est le dessin ouvert qui est sélectionné au
moment de l'exécution de la macro. Pour des macros contenues dans des projets globaux, toutes les références VBA à l'objet ThisDrawing sont dirigées vers
le dessin actif. Pour des macros contenues dans des projets intégrés, l'objet ThisDrawing se rapporte toujours au dessin dans lequel la macro est incorporée.
Lorsque vous modifiez une macro, l'environnement VBA IDE s'ouvre et la macro choisie apparaît dans la fenêtre Code. Pour de plus amples informations sur la
modification de macros dans l'environnement VBA IDE, reportez-vous à la section Modification de projets avec VBA IDE .
L'entrée dans une macro lance son exécution puis l'interrompt sur la première ligne d u code. L'environnement VBA IDE s'ouvre avec la macro choisie affichée
dans la fenêtre Code à la ligne d'exécution.
Trois options peuvent être définies pour des projets AutoCAD VBA :
La fonction d'incorporation automatique crée automatiquement un projet VBA intégré pour tous les dessins lorsque le dessin est ouvert.
Permet à VBA de passer en mode Arrêt lorsqu'une erreur est rencontrée. Ce mode interrompt provisoirement l'exécution du programme dans l'environnement
de développement interactif. Dans ce mode, vous pouvez examiner le programme, le déboguer, le réinitialiser, l'exécuter pas à pas ou poursuivre son
exécution.
Lorsque cette option est activée, les erreurs non gérées rencontrées pendant l'exécution d'une macro VBA interrompent l'exécution de cette macro et affichent
l'environnement VBA IDE à l'endroit où l' erreur s'est produite dans la macro.
Lorsque cette option est désactivée, le système affiche une boîte de message pour vous signaler des erreurs non capturées rencontrées pendant l'exécution
d'une macro VBA, puis termine l'exécution de cette macro.
Le mécanisme de protection antivirus affiche un message d 'avertissement intégré lorsque vous ouvrez un dessin qui risque de contenir des virus de macro.
1. Dans le menu Outils, sélectionnez Macro » Macros pour ouvrir la boîte de dialogue Macro VBA.
2. Dans cette boîte de dialogue, cliquez sur Options pour ouvrir la boîte de dialogue Options.
3. Sélectionnez alors les options à activer.
4. Cliquez sur OK.
Une fois le projet chargé dans AutoCAD, vous pouvez modifier le code, les feuilles et les références le concernant à l'aide de l'environnement de
développement interactif VBA. Vous pouvez également déboguer et exécuter des projets depuis cet environnement. Une fois ouvert, l'environnement VBA IDE
permet d'accéder à tous les projets chargés.
Vous pouvez ouvrir l'environnement VBA IDE depuis la ligne de commande ou la barre de menus.
Depuis la ligne de commande, tapez VBAIDE ou, dans le menu Outils, choisissez Macro » Editeur Visual Basic.
Modification de composants
Enregistrement de projet
L'environnement VBA IDE contient un Explorateur de projet q ui affiche la liste de tous les projets VBA chargés. Il affiche également les modules de code, de
classe et de feuille contenus dans un projet, le document associé au projet, tous les autres projets VBA auxquels il est fait référence dans le projet et
l'emplacement physique (chemin) du projet.
L'Explorateur de projet possède sa propre barre d'outils que vous pouvez utiliser pour ouvrir divers composants de projet et les modifier. Cliquez sur le bouton
Afficher le code pour ouvrir le code du module sélectionné. Cliquez sur le bouton Afficher l'objet pour afficher les objets sélectionnés, par exemple les feuilles.
L'Explorateur de projet apparaît par défaut. S'il n'est pas visible, choisissez Explorateur de projet dans le menu Affichage, ou appuyez sur les touches CTRL+R.
Chaque projet peut contenir différents composants. Il peut s' agir d'objets, de feuilles, de modules standard, de modules de classe et de références.
Objets
Feuilles
Modules standard
Modules de classe
Références
Objets
Ce composant correspond au type d'objet ou au document auquel le code VBA va accéder. Pour des projets AutoCAD VBA, cet objet représente le dessin
AutoCAD actif.
Feuilles
Ce composant contient les boîtes de dialogue p ersonnalisées construites pour être utilisées avec votre projet.
Modules standard
Le module de code contient des procédures et fonctions génériques. Un module standard est également appelé module de code, ou tout simplement module.
Modules de classe
Références
Lorsque vous ajoutez un nouveau composant, un composant vierge est créé dans votre projet. Vous pouvez ajouter de nouveaux modules, feuilles et modules
de classe à un projet. Vous devez mettre à jour toutes les propriétés du composant (notamment son nom) et spécifier le code approprié. Lorsque vous nommez
de nouveaux composants, n'oubliez pas que d'autres développeurs voudront sans doute les utiliser dans de futures applications. C'est pourquoi, vous devez
suivre les conventions de désignation utilisées par votre équipe de développement.
L'importation vous permet d'ajouter un composant existant à un projet. Vous pouvez importer des feuilles, des modules ou des modules de classe. Les feuilles
sont importées en tant que fichiers FRM, les modules en tant que fichiers BAS et les modules de classe en tant que fichiers CLS.
Lorsque vous importez un fichier composant, une copie de ce fichier est ajoutée a u projet. Le fichier d'origine est laissé intact. Ainsi, les modifications apportées
au composant importé ne modifient pas le fichier composant d'origine.
Si vous importez un composant portant le même nom qu'un composant existant, le fichier est ajouté au projet avec un numéro supplémentaire.
Le composant importé est ajouté au projet et apparaît dans l'Explorateur de projet. Pour modifier les propriétés du composant, sélectionnez-le dans
l'Explorateur de projet. Les propriétés du composant sélectionné apparaissent et peuvent être modifiées dans la fenêtre Propriétés.
Modification de composants
Vous pouvez modifier des modules standard, des modules de classe et des feuilles dans l'environnement VBA I DE. Les modules standard et de cl asse sont
modifiés dans la fenêtre Code. Les feuilles sont modifiées dans la fenêtre UserForm à l'aide d'une boîte à outils spéciale.
Vous pouvez ouvrir autant de fenêtres Code que vous avez de modules afin de visualiser facilement le code dans les différentes feuilles ou modules, et
d'effectuer des copier-coller entre eux.
La fenêtre Code contient deux listes déroulantes, une barre de fractionnement, un indicateur de marge et les icônes Affichage complet et Affichage de
procédure.
Les deux zones de listes déroulantes en haut de la fenêtre affichent l'objet et la procédure actifs. Vous pouvez changer le projet en modifiant l'objet ou la
procédure figurant dans ces zones de liste.
La barre de fractionnement, à droite de la fenêtre, vous permet de fractionner la fenêtre horizontalement. Il vous suffit de la faire glisser vers le bas pour créer
un nouveau panneau. Vous pouvez ainsi afficher simultanément deux p arties du code d'un même module. Pour refermer le panneau, remettez la barre de
fractionnement à sa place initiale.
L'indicateur de marge est situé en bas à gauche de la fenêtre Code. Il sert à afficher les marges utilisées pendant la modification et le débogage du code.
Les icônes Affichage complet et Affichage de procédure sont situées en bas à gauche de la fenêtre Code ; elles permettent d'afficher une seule procédure à la
fois ou le module entier.
La fenêtre UserForm vous permet de créer des boîtes de dialogue personnalisées dans un projet.
Pour ajouter un contrôle, faites-le glisser de la boîte à outils et placez-le sur la feuille. Dans l'onglet Général de la boîte de dialogue Options, vous pouvez définir
vos contrôles de façon à ce qu'ils soient alignés sur la grille de la feuille. Vous pouvez afficher la grille afin de déterminer la taille de ses lignes. (Reportez-vous
à la section Définition des options VBA IDE pour de plus amples i nformations sur la boîte de dialogue Options.)
Chaque feuille conçue affiche automatiquement les boutons Agrandissement, Réduction et Fermeture. Le système les configure pour vous.
Pour ajouter du code au contrôle, cliquez deux fois sur ce contrôle après l'avoir placé sur la feuille. Une fenêtre Code correspondant au contrôle s'ouvre alors.
Le nom du projet et le nom du fichier .dvb dans lequel le projet est enregistré constituent deux valeurs différentes. Vous définissez le nom du fichier . dvb au
moment de l'enregistrement du projet. Le nom du projet, quant à lui, est attribué dans la fenêtre Propriétés de l'environnement VBA IDE.
Si vous ne définissez pas de noms de projet et de fichier, AutoCAD assigne automatiquement les noms par défaut suivants :
1. Dans l'Explorateur de projet de l'environnement VBA IDE, sélectionnez le projet dont vous souhaitez changer le nom.
2. Dans la fenêtre Propriétés, modifiez la propriété Name du projet.
Enregistrement de projet
Aucune commande SAUVEGRD explicite n'est disponible dans AutoCAD pour des projets VBA. Toutefois, une commande SAUVEGRD est disponible dans le
menu Fichier de l'environnement VBA IDE et dans le Gestionnaire VBA. Toute modification apportée à un projet VBA ouvre la boîte de dialogue standard
Enregistrer sous dès que l'un des événements suivants se produit :
Remarque Avant d'enregistrer un projet, le nom par défaut project.dvb lui est assigné. Toutefois, vous devez lui attribuer un nouveau nom lorsque vous
l'enregistrez. En effet, si vous enregistrez un projet avec le nom de fichier par défaut project.dvb , vous ne pourrez plus créer de projets vides. Chaque fois que
vous créez un projet, vous chargez le projet enregistré appelé project.dvb .
Lorsqu'un projet VBA est référencé par un autre projet VBA, les développeurs peuvent partager du code plus facilement. Ils peuvent créer des bibliothèques de
macros utilisées fréquemment et faire référence à cette bibliothèque selon leurs besoins. Ainsi, le code partagé reste centralisé et un grand nombre de
développeurs peuvent l'utiliser.
Lorsqu'un projet est correctement référencé, un nouveau dossier apparaît dans l'Explorateur de projet de l'environnement VBA IDE. Ce dossier est intitulé
References et contient le nom du projet auquel il est fait référence.
Une fois le projet référencé, vous pouvez utiliser un code public ou un composant de feuille dans ce projet.
Lorsque vous chargez dans AutoCAD un projet faisant référence à un autre projet, ce dernier est également chargé automatiquement. Il ne peut être refermé
que si les projets y faisant référence sont aussi fermés.
Vous ne pouvez pas effectuer de références circulaires. En d'autres termes, vous ne pouvez pas faire référence à un projet contenant une référence au premier
projet. Si vous créez par mégarde une référence circulaire, VBA vous le signale.
La fonction de référence à des projets est une fonction standard de Microsoft VBA. Elle n'a pas été étendue dans AutoCAD. Vous trouverez de plus amples
informations sur les références à des projets dans l'aide de Microsoft VBA. Vous pouvez ouvrir l'aide de Microsoft VBA à partir du menu Aide de
l'environnement VBA IDE.
Remarque Vous ne pouvez pas faire référence à des projets intégrés ou à des projets VBA à partir d'autres applications.
Vous pouvez changer les caractéristiques de l'environnement VBA IDE dans la boîte de dialogue Options. Pour ouvrir cette boîte de dialogue, dans le menu
Outils, choisissez Options.
La boîte de dialogue Options comporte quatre onglets : Editeur, Format de l'éditeur, Général et Ancrage.
Editeur
Format de l'éditeur
Général
Ancrage
Editeur
Format de l'éditeur
Vous pouvez
Général
Cet onglet spécifie les paramètres, la gestion des erreurs et les paramètres de compilation du projet VBA actif .
Vous pouvez
Ancrage
Cet onglet vous permet de choisir q uelles fenêtres vous souhaitez pouvoir ancrer.
Exercice préparatoire
Maintenant que vous connaissez les bases de la programmation dans VBA AutoCAD, essayez de créer un exercice simple intitulé “Hello World”. Dans cet
exercice, nous allons créer un dessin AutoCAD, y ajouter une ligne de texte et l'enregistrer depuis l'environnement VBA.
7. Entrez le code suivant (qui crée la chaîne de texte et définit à quel endroit elle doit être insérée) immédiatement après le code saisi à l'étape 6.
Dim insPoint(0 To 2) As Double 'Declare insertion point
Dim textHeight As Double 'Declare text height
Dim textStr As String 'Declare text string
Dim textObj As AcadText 'Declare text object
insPoint(0) = 2 'Set insertion point x coordinate
insPoint(1) = 4 'Set insertion point y coordinate
insPoint(2) = 0 'Set insertion point z coordinate
textHeight = 1 'Set text height to 1.0
textStr = "Hello World!" 'Set the text string
'Create the Text object
Set textObj = ThisDrawing.ModelSpace.AddText _
(textStr, insPoint, textHeight)
8. Entrez le code (qui enregistre le dessin) immédiatement après le code saisi à l'étape 7.
ThisDrawing.SaveAs("Hello.dwg")
9. Exécutez le programme en choisissant l'option Exécuter Sub/UserForm du menu Exécution dans l'environnement VBA IDE.
Une fois le programme exécuté, faites passer l'a pplication AutoCAD au premier plan. Le texte “Hello World!” doit apparaître sur le dessin. Par ailleurs,
votre dessin doit s'appeler Hello.dwg .
Informations complémentaires
Vous trouverez de plus amples informations sur le langage de programmation VBA et VBA IDE dans les fichiers d'aide fournis par Microsoft. Pour accéder à ces
fichiers, sélectionnez Aide de Microsoft Visual Basic dans le menu d'aide de l'environnement VBA IDE.
Projet global
Projet VBA enregistré dans un fichier .dvb .
Projet intégré
Projet VBA enregistré dans un dessin AutoCAD.
Document normal
Dessin AutoCAD ne contenant pas de projets VBA intégrés.
Document intelligent
Dessin AutoCAD contenant un ou plusieurs projets VBA intégrés.
Projet actif
Projet actuellement sélectionné dans l'environnement VBA IDE.
ThisDrawing
Terme de programmation VBA utilisé pour désigner le dessin actif. Pour les projets globaux, ThisDrawing désigne toujours le document actif dans AutoCAD.
Pour les projets intégrés, ThisDrawing désigne toujours le document contenant le projet.
VBA IDE
VBA IDE (Interactive Development Environment - Environnement de développement interactif VBA). Cette application vous permet de modifier le code et les
feuilles d'un projet, ou de copier le code et les feuilles d'autres projets. Elle vous permet également de définir des références à d'autres modèles d'objet
d'application.
Gestionnaire VBA
Le Gestionnaire VBA vous permet de gérer des projets. Vous pouvez notamment créer, supprimer, incorporer ou extraire des projets. Vous pouvez
également afficher les projets intégrés, le cas échéant, à un dessin ouvert.
Boîte de dialogue Macros
Cette boîte de dialogue permet d'exécuter, de supprimer et de créer des macros. Elle permet également d'accéder aux options de p rojet VBA.
VBAIDE
Ouvre l'environnement VBA IDE
Il vous permet de modifier, d'exécuter et de déboguer des programmes en interactif. Cet environnement ne peut être appelé que si AutoCAD est exécuté.
Vous pouvez toutefois le réduire, l'ouvrir et le fermer indépendamment de la fenêtre de l'application AutoCAD.
CHARGVBA
Charge un projet VBA dans la session AutoCAD active.
EXECVBA
Exécute une macro VBA depuis la boîte de dialogue Macros ou la ligne de commande AutoCAD.
DECHARGVBA
Décharge un projet VBA de la session AutoCAD active.
Si le projet VBA est modifié mais pas enregistré, le système vous demande de l'enregistrer dans la boîte de dialogue Enregistrer le projet (ou sur la ligne de
commande équivalente).
GESTVBA
Affiche le Gestionnaire VBA qui vous permet d'afficher, de créer, de charger, de fermer, d'incorporer et d'extraire des projets.
VBAINSTR
Exécute une instruction VBA depuis la ligne de commande AutoCAD.
Pour utiliser efficacement l'Automatisation ActiveX d'AutoCAD, vous devez connaître les entités, les objets et les fonctions AutoCAD relatifs au type
d'application développée. En effet, mieux vous connaissez les propriétés graphiques et non graphiques d'un objet, plus vous pouvez les manipuler facilement
via l'Automatisation ActiveX d'AutoCAD.
N'oubliez pas que pour accéder au fichier d'aide de l'Automatisation ActiveX d'AutoCAD, il vous suffit d'appuyer sur la touche F1. Si un objet, une méthode ou
une propriété vous pose problème, sélectionnez-la (le) dans l 'environnement VBA IDE et appuyez sur la touche F1.
Objets Collection
Propriétés et méthodes
Objets parent
Un objet constitue le noyau de l'interface ActiveX ® d'AutoCAD ® . Chaque objet exposé représente une partie spécifique d'AutoCAD. L'interface ActiveX
d'AutoCAD est constituée de différents types d'objets. Par exemple :
Les objets graphiques comme des lignes, des arcs, du texte et des cotes sont des objets.
Les paramètres de style comme des types de ligne et des styles de cotes sont des objets.
Les éléments de structure comme des calques, d es groupes et des blocs sont des objets.
Les éléments d'affichage graphique comme les vues et les fenêtres sont des objets.
Même le dessin et l'application AutoCAD sont considérés comme des objets.
Les objets sont structurés de façon hiérarchique, l'objet Application se trouvant à la racine. La vue de cette structure hiérarchique est appelée modèle d'objet. Le
modèle d'objet indique quel objet permet d'accéder au niveau d'objets suivant.
Objet Application
Objet Document
Objets Collection
Objet Application
L'objet Application est l'objet Root du modèle d'objet de l'Automatisation ActiveX d'AutoCAD. Il permet d'accéder aux autres objets ou aux propriétés et
méthodes assignées à un objet.
Ainsi, l'objet Application a une propriété Preferences qui renvoie l'objet Preferences Cet objet permet d'accéder aux paramètres de la boîte de dialogue Options
enregistrés dans la base de registre. (Les paramètres enregistrés dans le dessin sont placés dans l'objet DatabasePreferences qui est décrit plus loin.) D'autres
propriétés de l'objet Application vous permettent d'accéder à des données propres à l'application comme son nom et sa version, la taille, l'emplacement et la
visibilité d'AutoCAD. Les méthodes de l'objet Application exécutent des actions propres à l'application comme l'établissement de la liste des applications ADS et
ARX, leur chargement et leur déchargement ainsi que la sortie d'AutoCAD.
L'objet Application établit également des liens vers les dessins AutoCAD via la collection Documents, vers les menus et barres d'outils AutoCAD via les
collections MenuBar et MenuGroups et vers l'environnement VBA IDE via une propriété appelée VBE.
L'objet Application est également l'objet Global de l'interface ActiveX. Cela signifie que toutes les méthodes et propriétés de cet objet sont disponibles dans
l'espace global.
Objet Document
L'objet Document, qui est en fait un dessin AutoCAD, se trouve dans la collection Documents et permet d'accéder à tous les objets graphiques et à la plupart
des objets non graphiques d'AutoCAD. Les collections ModelSpace et PaperSpace permettent d'accéder à des objets graphiques (lignes, arcs, cercles, etc.) et
des collections de noms similaires comme Layers, Linetypes et TextStyles permettent d'accéder à des objets non graphiques. L'objet Document permet
également d'accéder aux objets Plot et Utility
Pour accéder aux propriétés des dessins, utilisez la propriété SummaryInfo de l'objet Document.
Objets Collection
AutoCAD regroupe la plupart des objets dans des collections. Bien qu'elles contiennent des types de données différents, ces collections peuvent être traitées à
partir de techniques semblables. Chaque collection possède sa propre méthode d'ajout d'objets. La plupart d'entre elles utilisant la méthode Add Toutefois, les
objets entité sont généralement ajoutés via une méthode d'ajout intitulée Add<Entityname>. Par exemple, pour ajouter une ligne, vous devez utiliser la méthode
AddLine
Les collections ont d'autres méthodes et propriétés en commun. Ainsi, la propriété Count sert à effectuer un calcul d'origine zéro du nombre d'objets figurant
dans une collection. La méthode Item sert à extraire un objet d'une collection.
Les objets graphiques, également appelés entités, sont des objets visibles (lignes, cercles, images tramées, etc.) qui constituent le dessin. Pour les créer, vous
devez utiliser la méthode Add<Entityname> appropriée. Pour modifier ou rechercher ces objets, utilisez les méthodes ou propriétés de l'objet lui-même. Chaque
objet graphique possède des méthodes qui permettent à une application d'exécuter la plupart des commandes d'édition AutoCAD comme la copie, la
suppression, le déplacement, la mise en miroir, etc. Les objets disposent par ailleurs de méthodes pour définir et extraire des données étendues (xdata), pour
mettre en surbrillance, mettre à jour et extraire la zone de délimitation de l'objet. Les objets graphiques ont des p ropriétés types comme Layer, Linetype, Color
et Handle. En fonction de leur type, ils possèdent en outre des propriétés spécifiques, comme Center, Radius et Area.
Les objets non graphiques sont des objets invisibles (pour information) qui font partie d'un dessin comme Layers, Linetypes, DimStyles, SelectionSets, etc. Pour
créer ces objets, utilisez la méthode Add de l'objet Collection parent. Pour modifier ou rechercher ces objets, utilisez les méthodes ou propriétés de l'objet lui-
même. Chaque objet non graphique possède des méthodes et des propriétés qui lui sont propres, notamment pour définir et extraire des données étendues
(xdata) et pour se supprimer.
Sous l'objet Preferences se trouve un ensemble d'objets, chacun correspondant à un onglet de la boîte de dialogue Options. Ces objets permettent d'accéder à
tous les paramètres de la boîte de dialogue Options enregistrés dans la base de registre. Les paramètres enregistrés dans le dessin se trouvent dans l'objet
DatabasePreferences Vous pouvez également définir et modifier des options (et des variables système qui ne font pas partie de la boîte de dialogue Options) à
l'aide des méthodes SetVariable et GetVariable Pour de plus amples informations sur la définition d'options, voir Définir les préférences AutoCAD .
L'objet Plot permet d'accéder aux paramètres de la boîte de dialogue Tracer et offre aux applications la possibilité de tracer le dessin en appliquant des
méthodes différentes. Pour de plus amples informations sur le traçage, voir Traçage du dessin.
L'objet Utility fournit des fonctions d'entrée utilisateur et de conversion. Les fonctions d'entrée utilisateur sont des méthodes qui invitent l'utilisateur à entrer
différents types de données comme des chaînes, des entiers, des réels, des points, etc., sur la ligne de commande AutoCAD. Les fonctions de conversion,
quant à elles, sont des méthodes qui opèrent sur des types de données propres à AutoCAD comme des points et des angles, et qui traitent des chaînes et des
nombres. Pour de plus amples informations sur les fonctions d'entrée utilisateur, voir Demande d'entrée utilisateur.
Si votre projet d'automatisation utilise une fonctionnalité qui n'existait pas dans une version précédente d'AutoCAD, vous devez déclarer explicitement l'interface
AutoCAD utilisée dans le projet.
Si un projet d'automatisation contient des déclarations explicites des nouvelles interfaces dans une version spécifique d'AutoCAD, n'utilisez pas ce projet avec
des versions antérieures d'AutoCAD.
Vous pouvez accéder facilement à la hiérarchie de l'objet depuis VBA. VBA est exécuté parallèlement à la session AutoCAD courante et il n'y a, par
conséquent, pas besoin de le connecter à l'application.
VBA établit un lien vers le dessin actif dans la session AutoCAD courante vi a l'objet ThisDrawing. Lorsque vous utilisez l'objet ThisDrawing, vous accédez
immédiatement à l'objet Document courant ainsi qu'à toutes ses méthodes et propriétés et à tous les autres objets de la hiérarchie.
Pour les projets globaux, ThisDrawing désigne toujours le document actif dans AutoCAD. Pour les projets intégrés, ThisDrawing désigne toujours le
document contenant le projet. Par exemple, la l igne de code suivante d'un projet global enregistre le dessin actuellement actif dans AutoCAD :
ThisDrawing.Save
Vous pouvez faire référence à des o bjets directement ou via une variable définie par l'utilisateur. Pour référencer les objets directement, incluez l'objet dans la
hiérarchie appelante. Par exemple, l'instruction suivante ajoute une ligne dans modelspace. Notez que la hiérarchie commence à l'objet ThisDrawing, passe
par l'objet ModelSpace, puis appelle la méthode AddLine
Pour faire référence aux objets via u ne variable définie par l'utilisateur, définissez le type souhaité pour cette variable, puis attribuez-la à l' objet approprié. Par
exemple, le code suivant définit une variable ( moSpace) de type AcadModelSpace, puis la rend égale à l'espace objet courant :
L'instruction suivante ajoute ensuite une ligne à l'espace objet en utilisant la variable définie par l'utilisateur :
L'exemple suivant renvoie le premier objet entité de l'espace objet. Un code similaire peut effectuer la même opération pour des entités de l'espace papier.
Notez que tous les objets d'un dessin peuvent être définis comme des objets AcadEntity :
Sub Ch2_FindFirstEntity()
' This example returns the first entity in model space
On Error Resume Next
Dim entity As AcadEntity
If ThisDrawing.ModelSpace.count <> 0 Then
Set entity = ThisDrawing.ModelSpace.Item(0)
MsgBox entity.ObjectName + _
" is the first entity in model space."
Else
MsgBox "There are no objects in model space."
End If
End Sub
La propriété Application de l'objet Document permet d'accéder à l'objet Application. L'objet Application est au-dessus de l'objet Document dans la hiérarchie
d'objets.
L'objet ThisDrawing permet d'accéder à l'objet Document. Par exemple, la ligne de code suivante met à jour l'application :
ThisDrawing.Application.Update
Objets Collection
Un objet Collection est un objet prédéfini qui contient (est un objet parent pour) toutes les instances d'un objet similaire. Voici une liste d'objets Collection :
Collection
Contient tous les documents ouverts dans la session AutoCAD active.
Collection ModelSpace
Contient tous les objets graphiques (entités) de l'espace objet.
Collection PaperSpace
Contient tous les objets graphiques (entités) de l'espace papier actif.
Objet Block
Contient toutes les entités d'une définition de bloc donnée
Collection Blocks
Contient tous les blocs du dessin.
Collection Dictionaries
Contient tous les dictionnaires du dessin.
Collection DimStyles
Contient tous les styles de cotes du dessin.
Collection FileDependencies
Contient tous les éléments de la liste des dépendances de fichier.
Collection Groups
Contient tous les groupes du dessin.
Collection Hyperlinks
Contient tous les hyperliens d'une entité donnée.
Collection Layers
Contient tous les calques du dessin.
Collection Layouts
Contient toutes les présentations du dessin.
Collection Linetypes
Contient tous les types de ligne du dessin.
Collection MenuBar
Contient tous les menus actuellement affichés dans AutoCAD.
Collection MenuGroups
Contient tous les menus et barres d'outils actuellement chargés dans AutoCAD.
Collection PlotConfigurations
Contient les configurations de tracé nommées du dessin.
Collection RegisteredApplications
Contient toutes les applications enregistrées dans le dessin.
Collection SelectionSets
Contient tous les jeux de sélection du dessin.
Collection TextStyles
Contient tous les styles de texte du dessin.
Collection UCSs
Contient tous les systèmes de coordonnées utilisateur (SCU) du dessin.
Collection Views
Contient toutes les vues du dessin.
Collection Viewports
Contient toutes les fenêtres du dessin.
Vous accédez à la plupart des objets Collection à partir de l'objet Document Cet objet contient une propriété pour chaque objet Collection. Par exemple, le code
suivant définit une variable et l'attribue à la collection Layers du dessin courant :
Vous accédez aux collections Documents, MenuBar et MenuGroups via l'objet Application. Cet objet contient une propriété pour chaque objet Collection. Par
exemple, le code suivant définit une variable et l'attribue à la collection MenuGroups de l'application :
Pour ajouter un membre à la collection, utilisez la méthode Add. Par exemple, le code suivant crée un calque et l'ajoute à la collection Layers :
Pour sélectionner un membre donné d'un objet Collection, utilisez la méthode Item Cette méthode requiert un identificateur sous la forme d'un numéro d'index
désignant l'emplacement de l'élément au sein de la collection ou d'une chaîne représentant le nom de l'élément.
Il s'agit de la méthode par défaut pour une collection. Si vous ne spécifiez pas le nom de la méthode lorsque vous faites référence à une collection, c'est la
méthode Item qui est activée par défaut. Les instructions suivantes sont équivalentes :
ThisDrawing.Layers.Item("ABC")
ThisDrawing.Layers("ABC")
Remarque N'utilisez pas les méthodes de modification d'entités (copie, tableau, miroir, etc.) sur un objet pendant que vous procédez à une itération via une
collection à l'aide de la variable de contrôle For Each. Terminez l'itération avant d'essayer de modifier un objet de la collection ou de créer un tableau provisoire
et de le rendre égal à la collection. Vous pouvez alors itérer via le tableau copié et effectuer les modifications souhaitées.
L'exemple suivant procède à une itération à partir d'une collection et affiche les noms de tous les calques de cette collection :
Sub Ch2_IterateLayer()
' Iterate through the collection
On Error Resume Next
Dim I As Integer
Dim msg As String
msg = ""
For I = 0 To ThisDrawing.Layers.count - 1
msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf
Suivant
MsgBox msg
End Sub
L'exemple suivant fait référence à un calque appelé MyLayer, et affiche un message d'erreur si ce calque n'existe pas :
Sub Ch2_FindLayer()
' Use the Item method to find a layer named MyLayer
On Error Resume Next
Dim ABCLayer As AcadLayer
Set ABCLayer = ThisDrawing.Layers("MyLayer")
If Err <> 0 Then
MsgBox "The layer 'MyLayer' does not exist."
End If
End Sub
Pour supprimer un style de cote donné, utilisez la méthode Delete de l'objet membre. Par exemple, le code suivant supprime le calque ABC :
Une fois un objet supprimé, vous ne devez pas essayer d'y accéder à nouveau dans le programme.
Propriétés et méthodes
Des propriétés et des méthodes sont associées à chaque objet. Les propriétés décrivent des aspects d'un objet individuel, alors que les méthodes sont des
actions qui peuvent être exécutées sur cet objet. Une fois un objet créé, vous pouvez le rechercher et le modifier via ses propriétés et ses méthodes.
Par exemple, un objet Circle a la propriété Center Cette propriété représente la coordonnée du système de coordonnées général 3D au centre de ce cercle.
Pour changer le centre du cercle, a ttribuez la nouvelle coordonnée à cette propriété. Par exemple, l'objet Circle a une méthode Offset. Cette méthode crée un
nouvel objet à la distance de décalage spécifiée du cercle existant. Pour afficher la liste de toutes les propriétés et méthodes de l'objet Circle, reportez-vous à la
section sur l'objet Circle du manuel ActiveX and VBA Reference d'AutoCAD.
Objets parent
Chaque objet a un objet parent auquel il est lié de façon permanente. Tous les objets proviennent d'un objet parent unique appelé objet Root. Vous p ouvez
accéder à tous les objets de l'interface en suivant les liens de l'objet racine à l'objet enfant. Par ailleurs, les objets ont une propriété Application qui renvoie
directement à l'objet Root.
Les objets, propriétés et méthodes exposés par des objets Automation sont enregistrés dans une bibliothèque de type. Il s'agit d'un fichier ou d'une partie d'un
fichier qui décrit le type d'un ou de plusieurs objets.
Les bibliothèques de type n'enregistrent pas des objets, mais des informations. En y accédant, l es applications et les navigateurs peuvent déterminer les
caractéristiques d'un objet comme les interfaces prises en ch arge par l'objet, et les noms et adresses des membres de chaque interface.
Avant d'utiliser l'objet Automation exposé par une application, vous devez faire référence à sa bibliothèque de type. La référence est définie automatiquement
dans VBA IDE. Si vous utilisez un autre environnement de développement interactif, vous devez créer une référence au fichier de bibliothèque de type
AutoCAD, acax17enu.tlb , placé sous c:\program files\common files\autodesk shared . Pour accéder aux objets de Gestionnaire de jeu de feuilles dans
l'environnement VBA IDE ou dans d'autres environnements, vous devez créer une référence au fichier de bibliothèque de type AcSmComponents17 1.0,
AcSmComponents17.tlb , placé sous c:\program files\common files\autodesk shared .
Vous pouvez utiliser les objets d'une a pplication sans faire référence à la bibliothèque de type de cette application. Toutefois, il est préférable d'ajouter la
référence de la bibliothèque de type pour les raisons suivantes :
Vous pouvez accéder directement à des fonctions accessibles globalement sans qualification.
L'adéquation des appels de fonctions, de propriétés et de méthodes peut être contrôlée au moment de la compilation et ces appels peuvent être, par
conséquent, exécutés plus rapidement.
Vous pouvez déclarer des variables avec les types définis dans la bibliothèque, ce qui permet d'obtenir une fiabilité et une lisibilité accrues au moment de
l'exécution.
L'Automatisation ActiveX utilise des variants pour transmettre des tableaux de données. Bien que cela paraisse déroutant pour un utilisateur inexpérimenté,
cette pratique est simple une fois les bases assimilées. Par ailleurs, l'Automatisation ActiveX d'AutoCAD fournit des utilitaires qui vous aident à convertir vos
types de données.
Un variant est un type d e données spécial qui peut contenir t oute sorte de données sauf des d onnées de type chaîne de longueur fixe et des données définies
par l'utilisateur. Il peut également contenir les valeurs spéciales Empty, Error, Nothing et NULL. Vous pouvez déterminer de quelle façon les données d'un
variant sont traitées en utilisant la fonction VBA VarType ou TypeName.
Pour plus de souplesse dans le traitement des données, le type de données Variant peut être utilisé à la place de la plupart des types de données.
Des variants sont utilisés pour échanger des données de tableau avec l'Automatisation ActiveX d'AutoCAD. Pour être acceptés par les méthodes et propriétés
d'Automatisation ActiveX d'AutoCAD, le tableau doit être un variant. Les données de tableau doivent être traitées par l'Automatisation ActiveX d'AutoCAD sous
forme de variant.
Remarque Dans AutoCAD, les tableaux d'entrée VBA sont convertis automatiquement en variants. Ainsi, vous n'avez pas à fournir un tableau d e type Variant
en tant qu'entrée des méthodes et propriétés de l'Automatisation ActiveX lorsque vous les utilisez à partir de VBA. Toutefois, tous les tableaux de sortie seront
sous forme de Variants et vous devez les traiter en conséquence.
L'Automatisation ActiveX d'AutoCAD fournit un utilitaire qui permet de convertir un tableau de données en variant. Il s'agit de la méthode CreateTypedArray, qui
crée un variant contenant un tableau de nombres entiers, de nombres à virgule flottante, de doubles, etc. Vous pouvez transmettre le variant ainsi obtenu dans
une méthode ou propriété AutoCAD qui accepte un tableau de nombres en tant que variant.
La méthode CreateTypedArray prend comme entrée le type de valeurs figurant dans le tableau et le tableau de données à convertir. Elle renvoie le tableau de
valeurs en tant que variant.
Le code suivant convertit trois tableaux à l'aide de CreateTypedArray : les coordonnées des points de lissage d'une spline, ainsi que la tangente de début et de
fin de la spline. Il transmet ensuite le variant à la méthode AddSpline pour créer la courbe.
Sub Ch2_CreateSplineUsingTypedArray()
' This example creates a spline object in model space
' using the CreateTypedArray method.
Dim splineObj As AcadSpline
Dim startTan As Variant
Dim endTan As Variant
Dim fitPoints As Variant
Dim utilObj As Object ' late bind the Utility object
Set utilObj = ThisDrawing.Utility
' Define the Spline Object
utilObj.CreateTypedArray _
startTan, vbDouble, 0.5, 0.5, 0
utilObj.CreateTypedArray _
endTan, vbDouble, 0.5, 0.5, 0
utilObj.CreateTypedArray _
fitPoints, vbDouble, 0, 0, 0, 5, 5, 0, 10, 0, 0
Set splineObj = ThisDrawing.ModelSpace.AddSpline _
(fitPoints, startTan, endTan)
' Zoom in on the newly created spline
ZoomAll
End Sub
Les données de tableau sont renvoyées par l'Automatisation ActiveX d'AutoCAD sous forme de variant. Si vous connaissez le type de données du tableau, il
vous suffit d'accéder au variant en tant que tableau. Mais si vous ne connaissez pas le type de données contenu dans le variant, utilisez les fonctions VBA
VarType ou Typename. Elles renvoient le type de données dans le variant Pour itérer via le tableau, vous pouvez utiliser l'instruction VBA For Each
Le code suivant montre comment calculer la d istance entre deux points définis par l'utilisateur. Dans cet exemple, le type de données est connu parce que
toutes les coordonnées sont des doubles. Les coordonnées 3D représentent un tableau de doubles à trois éléments et les coordonnées 2D un tableau de
doubles à deux éléments.
Sub Ch2_CalculateDistance()
Dim point1 As Variant
Dim point2 As Variant
' Get the points from the user
point1 = ThisDrawing.Utility.GetPoint _
(, vbCrLf & "First point: ")
point2 = ThisDrawing.Utility.GetPoint _
(point1, vbCrLf & "Second point: ")
' Calculate the distance between point1 and point2
Dim x As Double, y As Double, z As Double
Dim dist As Double
x = point1(0) - point2(0)
y = point1(1) - point2(1)
z = point1(2) - point2(2)
dist = Sqr((Sqr((x ^ 2) + (y ^ 2)) ^ 2) + (z ^ 2))
'Display the resulting distance
MsgBox "The distance between the points is: " _
& dist, , "Calculate Distance"
End Sub
Ce manuel a été rédigé p our le langage de programmation VBA. Ainsi, les exemples de programmation et d'application sont écrits en langage VBA. Pour
appliquer le même code dans d'autres environnements de programmation, vous devez le mettre à jour en fonction de cet environnement.
Reportez-vous à la documentation de votre environnement de développement pour vous aider à convertir les exemples de code.
Remarque La clé de registre pour l'accès à l'application COM pour AutoCAD 2007 est AutoCAD.Application.17.
Pour mettre à jour un exemple de code afin de l 'utiliser dans VB, vous devez faire référence à la bibliothèque de type d 'AutoCAD. Pour effectuer cette opération
dans VB, choisissez l'option Références du menu Outils pour ouvrir la boîte de dialogue Références. Dans cette boîte de dialogue, sélectionnez la bibliothèque
de type pour AutoCAD, puis cliquez sur OK.
Dans l'exemple de code, remplacez toutes les références à ThisDrawing par une variable définie par l'utilisateur faisant référence au document actif. Pour
cela, définissez une variable pour l'application AutoCAD (acadApp) et pour le document actif (acadDoc). Définissez ensuite la variable d'application sur
l'application AutoCAD courante.
Si AutoCAD est exécuté, la fonction GetObject extrait l'objet Application AutoCAD lorsque vous indiquez le numéro de version d'AutoCAD. Sinon, une erreur se
produit (dans cet exemple) ; elle est récupérée et supprimée. La fonction CreateObject essaie ensuite de créer un objet Application AutoCAD. Si elle y parvient,
AutoCAD est démarré ; sinon, une boîte de message s'affiche avec une description de l'erreur.
Lorsque vous exécutez plusieurs sessions d'AutoCAD, la fonction GetObject renvoie la première instance d'AutoCAD dans la Table des objets en cours
d'exécution de Windows. Reportez-vous au paragraphe sur la Table des objets en cours d'exécution et la fonction GetObject dans la documentation de
Microsoft VBA pour savoir comment vérifier la session renvoyée par GetObject.
Vous devez paramétrer la propriété Visible d'AutoCAD sur TRUE afin d'afficher la fenêtre de dessin d'&PRODNAME.
Si GetObject crée une nouvelle occurrence d'AutoCAD (autrement dit, AutoCAD n'était pas encore lancé lorsque vous avez exécuté la fonction GetObject), il
n'est pas possible de définir Visible sur TRUE. Par conséquent, l'application AutoCAD est invisible et n'apparaît même pas dans la barre des tâches de
Windows.
Remarque Utilisez des identificateurs ProgID dépendants d'une version. Si une fonction CreateObject ou GetObject utilise un identificateur ProgID indépendant
d'une version, changez de fonction pour en utiliser un qui soit dépendant d'une version. Par exemple, si vous utilisez CreateObject, remplacez CreateObject
("AutoCAD.Application") par CreateObject ("AutoCAD.Application.17"). De plus, si une méthode GetInterfaceObject utilise un identificateur ProgID indépendant
d'une version, vous devez changer de méthode afin d'en utiliser un qui soit dépendant d'une version.
L'exemple de code suivant utilise les propriétés Clear et Description de Err. Si votre environnement de développement ne prend pas en charge ces propriétés,
vous devez modifier l'exemple en conséquence.
Sub Ch2_ConnectToAcad()
Dim acadApp As AcadApplication
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application.17")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application.17")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
MsgBox "Now running " + acadApp.Name + _
" version " + acadApp.Version
End Sub
Définissez ensuite la variable de document sur l' objet Document dans l'application AutoCAD. Cet objet est renvoyé par la propriété ActiveDocument de l'objet
Application.
A ce stade, vous devez utiliser la variable acadDoc pour faire référence au dessin AutoCAD courant.
L'exemple de code suivant montre comment créer une ligne dans VBA et VB :
Sub Ch2_AddLineVBA()
' This example adds a line
' in model space
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
' Define the start and end
' points for the line
startPoint(0) = 1
startPoint(1) = 1
startPoint(2) = 0
endPoint(0) = 5
endPoint(1) = 5
endPoint(2) = 0
' Create the line in model space
Set lineObj = ThisDrawing. _
ModelSpace.AddLine _
(startPoint, endPoint)
' Zoom in on the newly created line
ZoomAll
End Sub
Sub Ch2_AddLineVB()
On Error Resume Next
' Connect to the AutoCAD application
Dim acadApp As AcadApplication
Set acadApp = GetObject _
(, "AutoCAD.Application.17")
If Err Then
Err.Clear
Set acadApp = CreateObject _
("AutoCAD.Application0.17")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
' Connect to the AutoCAD drawing
Dim acadDoc As AcadDocument
Set acadDoc = acadApp.ActiveDocument
' Establish the endpoints of the line
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 1
startPoint(1) = 1
startPoint(2) = 0
endPoint(0) = 5
endPoint(1) = 5
endPoint(2) = 0
' Create a Line object in model space
Set lineObj = acadDoc.ModelSpace.AddLine _
(startPoint, endPoint)
ZoomAll
acadApp.visible = True
End Sub
Ce chapitre présente les fondements du développement d'une application dans AutoCAD. Il explique comment contrôler et utiliser efficacement l'environnement
AutoCAD.
Pour créer un dessin ou ouvrir un dessin existant, utilisez les méthodes de la collection Documents La méthode Add crée un dessin et l'ajoute à la collection
Documents. La méthode Open ouvre un dessin existant. Il existe également une méthode Close dans la collection Documents qui ferme tous les dessins
ouverts dans la session AutoCAD.
Utilisez la méthode Save ou SaveAs pour enregistrer un dessin. Vous souhaiterez parfois vérifier que le dessin active ne comporte pas de modifications non
enregistrées. Cette vérification est conseillée avant de quitter la session AutoCAD ou de commencer un nouveau dessin. Utilisez la propriété Saved pour vérifier
que le dessin actif ne contient pas de modifications non enregistrées.
Pour importer ou exporter un dessin, appliquez les méthodes Import et Export à l'objet Document.
Cet exemple utilise la méthode Open pour ouvrir un dessin existant. La fonction VBA Dir sert à vérifier que le fichier existe avant d'essayer de l'ouvrir. Vous
devez renommer le fichier de dessin ou modifier son chemin pour désigner un fichier AutoCAD existant sur votre système.
Sub Ch3_OpenDrawing()
Dim dwgName As String
dwgName = "c:\campus.dwg"
If Dir(dwgName) <> "" Then
ThisDrawing.Application.Documents.Open dwgName
Else
MsgBox "File " & dwgName & " does not exist."
End If
End Sub
L'exemple suivant utilise la méthode Add pour créer un dessin à partir du gabarit par défaut.
Sub Ch3_NewDrawing()
Dim docObj As AcadDocument
Set docObj = ThisDrawing.Application.Documents.Add
End Sub
Cet exemple enregistre le dessin actif sous son nom actuel, puis sous un nouveau nom.
Sub Ch3_SaveActiveDrawing()
' Save the active drawing under the current name
ThisDrawing.Save
' Save the active drawing under a new name
ThisDrawing.SaveAs "MyDrawing.dwg"
End Sub
L'exemple ci-après vérifie si des modifications n'ont pas été enregistrées, puis demande à l'utilisateur si le dessin peut être enregistré. S'il ne peut pas l'être,
passez directement à la fin; s'il peut l'être, utilisez la méthode Save pour l'enregistrer comme indiqué ci-après:
Sub Ch3_TestIfSaved()
If Not (ThisDrawing.Saved) Then
If MsgBox("Do you wish to save this drawing?", _
vbYesNo) = vbYes Then
ThisDrawing.Save
End If
End If
End Sub
Neuf objets se rapportent à des options, chacun d'eux représentant un onglet de la boîte de dialogue Options. Ces objets permettent d'accéder à toutes les
options de la boîte de dialogue Options enregistrées dans la base de registre. Vous pouvez personnaliser de nombreux paramètres d'AutoCAD à l'aide des
propriétés trouvées sous ces objets. Il s'agit des objets suivants :
PreferencesDisplay
PreferencesDrafting
PreferencesFiles
PreferencesOpenSave
PreferencesOutput
PreferencesProfiles
PreferencesSelection
PreferencesSystem
PreferencesUser
Ces objets sont accessibles par l'objet Preferences Pour accéder à l'objet Preferences, utilisez la propriété Preferences de l'objet Application :
Vous pouvez ensuite accéder à l'un des objets Preferences en faisant appel aux propriétés Display, Drafting, Files, OpenSave, Output, Profile, Selection,
System et User.
Outre les neuf objets Preferences, il existe un objet DatabasePreferences qui contient toutes les options enregistrées dans le dessin. Cet objet distinct a pour
rôle de rendre les options enregistrées dans le dessin disponibles pour les applications qui accèdent aux dessins AutoCAD, sans lancer au préalable
l'application AutoCAD (applications ObjectDBX).
La possibilité de contrôler la fenêtre d'application permet aux développeurs de créer des applications intelligentes et performantes. Il faudra parfois, pour votre
application, réduire la fenêtre AutoCAD, notamment lorsque le code exécute des tâches dans une autre application comme Excel. Vous devrez, en outre,
vérifier fréquemment l'état de la fenêtre AutoCAD avant d'exécuter des tâches comme l'appel de saisie par l'utilisateur.
A l'aide des méthodes et des propriétés trouvées sous l'objet Application, vous pouvez modifier la position, la taille et la visibilité de la fenêtre d'application.
Vous pouvez également utiliser la propriété WindowState pour réduire ou agrandir la fenêtre d'application ou encore, vérifier son état courant.
Cet exemple utilise les propriétés WindowTop, WindowLeft, Width et Height pour placer la fenêtre d'application AutoCAD dans l'angle supérieur gauche de
l'écran et lui donner une largeur et une hauteur de 400 pixels.
Sub Ch3_PositionApplicationWindow()
ThisDrawing.Application.WindowTop = 0
ThisDrawing.Application.WindowLeft = 0
ThisDrawing.Application.width = 400
ThisDrawing.Application.height = 400
End Sub
Le code suivant vérifie l'état de la fenêtre d'application et l'indique à l'utilisateur dans une boîte de message.
Sub Ch3_CurrentWindowState()
Dim CurrWindowState As Integer
Dim msg As String
CurrWindowState = ThisDrawing.Application.WindowState
msg = Choose(CurrWindowState, "normal", _
"minimized", "maximized")
MsgBox "The application window is " + msg
End Sub
Le code suivant utilise la propriété Visible pour rendre l'application AutoCAD invisible pour l'utilisateur final.
Sub Ch3_HideWindowState()
ThisDrawing.Application.Visible = False
End Sub
A l'instar de la fenêtre d'application d'AutoCAD, vous pouvez réduire, agrandir, repositionner, redimensionner et contrôler l'état d'une fenêtre de document. Vous
pouvez aussi changer l'affichage du dessin dans u ne fenêtre en utilisant des vues, des fenêtres et des méthodes de zoom.
ActiveX d'AutoCAD propose de nombreuses méthodes permettant d'afficher des vues du dessin. Vous pouvez ainsi contrôler l'affichage du dessin pour passer
rapidement d'une zone à l'autre et visualiser le résultat des modifications sur la totalité du dessin. Vous pouvez effectuer un zoom pour modifier
l'agrandissement ou un panoramique pour réorganiser l'affichage dans la zone graphique ; de même, vous pouvez enregistrer une vue puis la restaurer pour
effectuer le tracé ou afficher des détails spécifiques. Enfin, vous pouvez afficher plusieurs vues simultanément dans des fenêtres en mosaïque.
Utilisation du zoom
Utilisez l'objet Document pour changer la position et la taille d'une fenêtre de document. La fenêtre de document peut être réduite ou agrandie à l'aide de la
propriété WindowState; son état courant peut être lu à l'aide de cette même propriété.
Par exemple, à l'aide des propriétés Width et Height, le code suivant attribue à la fenêtre Document active une largeur et une hauteur de 400 pixels.
Sub Ch3_SizeDocumentWindow()
ThisDrawing.Width = 400
ThisDrawing.Height = 400
End Sub
Utilisation du zoom
Une vue correspond à un agrandissement, à une position et à une orientation spécifiques d'un dessin. La méthode la plus simple pour changer de vue consiste
à agrandir ou réduire la taille de l'image affichée dans la zone graphique à l'aide de l'une des nombreuses options de zoom proposées par AutoCAD. Pour de
plus amples informations sur les options de zoom dans AutoCAD, reportez-vous à la section “Agrandissement d'une vue (zoom)” du Manuel d'utilisation .
Pour effectuer rapidement un zoom avant sur u ne zone, il suffit d'indiquer les coins qui définissent cette zone. Pour effectuer un zoom avant sur une zone en
spécifiant ses contours, utilisez la méthode ZoomWindow ou ZoomPickWindow La méthode ZoomWindow vous permet de définir, par programmation, deux
points représentant la fenêtre de zoom. La méthode ZoomPickWindow a besoin de deux points, choisis p ar l'utilisateur. Ces deux points deviennent la fenêtre
de zoom.
Zoom du dessin actif dans une fenêtre définie par deux points
Sub Ch3_ZoomWindow()
' ZoomWindow
MsgBox "Perform a ZoomWindow with:" & vbCrLf & _
"1.3, 7.8, 0" & vbCrLf & _
"13.7, -2.6, 0", , "ZoomWindow"
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 1.3: point1(1) = 7.8: point1(2) = 0
point2(0) = 13.7: point2(1) = -2.6: point2(2) = 0
ThisDrawing.Application.ZoomWindow point1, point2
' ZoomPickWindow
MsgBox "Perform a ZoomPickWindow", , "ZoomPickWindow"
ThisDrawing.Application.ZoomPickWindow
End Sub
AutoCAD permet d'agrandir ou de réduire la taille de l'image en fonction d 'une échelle déterminée. Il suffit d'indiquer un facteur de zoom, que vous pouvez
définir de trois façons:
Pour mettre une vue à l 'échelle, utilisez la méthode ZoomScaled Cette méthode requiert la saisie de deux paramètres : l'échelle et le type d'échelle. L'échelle
est représentée par un simple nombre. Il est interprété par AutoCAD selon le type d'échelle choisi.
Le type d'échelle indique si la valeur d'échelle est déterminée en fonction des limites du dessin, de la vue courante ou des unités de l'espace papier. Pour
effectuer une mise à l'échelle en fonction des limites du dessin, utilisez la constante acZoomScaledAbsolute. Pour effectuer une mise à l'échelle en fonction
de la vue courante, utilisez la constante acZoomScaledRelative. Pour effectuer une mise à l'échelle en fonction des unités de l'espace papier, utilisez la
constante acZoomScaledRelativePSpace.
Zoom avant sur le dessin actif vers le centre spécifié Vous pouvez déplacer un point spécifique de votre dessin au centre de la zone graphique. La méthode
ZoomCenter s'avère très utile pour redimensionner un objet et le placer au centre d e la fenêtre. Elle vous permet de spécifier une taille d'échelle en entrant un
facteur d'agrandissement relatif à la vue courante.
L'exemple suivant montre le résultat obtenu après utilisation de la méthode ZoomCenter pour afficher une vue de la même taille, puis d eux fois plus grande :
Sub Ch3_ZoomCenter()
MsgBox "Perform a ZoomCenter using:" & vbCrLf & _
"Center 3, 3, 0" & vbCrLf & _
"Magnification: 10", , "ZoomCenter"
Dim Center(0 To 2) As Double
Dim magnification As Double
Center(0) = 3: Center(1) = 3: Center(2) = 0
magnification = 10
ThisDrawing.Application.ZoomCenter Center, magnification
End Sub
Utilisez la méthode ZoomAll, ZoomExtents ou ZoomPrevious pour afficher une vue en fonction des limites du dessin ou de l'étendue des objets.
La méthode ZoomAll affiche le dessin entier. Si les objets s'étendent au-delà des limites d e ce dessin, elle affiche l'étendue des objets. En revanche, elle affiche
les limites du dessin si vous avez créé les objets à l'intérieur de ces limites.
La méthode ZoomExtents calcule les facteurs de zoom en fonction de l'étendue de la fenêtre active et non de la vue courante. La fenêtre active étant en
général entièrement visible, vous pouvez percevoir les résultats aisément et intuitivement. Néanmoins, si vous utilisez les méthodes Zoom dans l'espace objet
tout en travaillant dans une fenêtre de l'espace papier et que vous effectuez un zoom avant au-delà des contours de cette fenêtre, une partie de la zone sur
laquelle vous avez effectué le zoom peut ne pas être visible.
La méthode ZoomExtents modifie la vue afin d'englober l'étendue du dessin courant. Dans certains cas (pour les méthodes ZoomAll et ZoomExtents), cela peut
entraîner une régénération. Or, la commande de régénération ne s'effectue pas sur les calques gelés ou désactivés. Si le dessin ne contient pas d'objet,
ZoomExtents en affiche les limites.
Dans les vues en 3D, les méthodes ZoomAll et ZoomExtents aboutissent au même résultat. Les lignes de construction infinies (droites) et les demi-droites n'ont
aucune incidence sur le mode de fonctionnement de ces options.
Reportez-vous à la section “Agrandissement d'une vue (zoom)” du Manuel d'utilisation pour voir des illustrations montrant le fonctionnement des options de
zoom.
Zoom avant sur le dessin actif pour affichage de l'intégralité du contenu et de l'étendue du dessin
Sub Ch3_ZoomAll()
' ZoomAll
MsgBox "Perform a ZoomAll", , "ZoomAll"
ThisDrawing.Application.ZoomAll
' ZoomExtents
MsgBox "Perform a ZoomExtents", , "ZoomExtents"
ThisDrawing.Application.ZoomExtents
End Sub
AutoCAD permet de nommer et d'enregistrer les vues que vous souhaitez réutiliser. Vous pouvez supprimer toute vue dont vous n'avez plus besoin.
Pour créer une vue, utilisez la méthode Add, qui ajoute une nouvelle vue à la collection Views Lorsque vous enregistrez le dessin, la position de vi sualisation et
l'échelle de la vue sont enregistrées.
Une vue est nommée lors de sa création. Les noms de vues peuvent contenir jusqu'à 255 caractères, notamment des lettres, des chiffres, le signe dollar ($), le
trait d'union (–) et le caractère de soulignement (_).
Pour supprimer une vue nommée, utilisez la méthode Delete. Pour l'objet View, cette méthode repose sur l'objet et non sur son parent.
Sub Ch3_AddView()
' Add a named view to the views collection
Dim viewObj As AcadView
Sub Ch3_DeleteView()
Dim viewObj As AcadView
Set viewObj = ThisDrawing.Views("View1")
' Delete the view
viewObj.Delete
End Sub
Sub Ch3_DeleteViewFromCollection()
ThisDrawing.Views("View1").Delete
End Sub
Lorsque vous commencez un nouveau dessin, AutoCAD utilise en principe une seule fenêtre, qui occupe toute la zone graphique. Vous pouvez diviser la zone
de dessin pour afficher simultanément plusieurs fenêtres. Par exemple, si la vue générale et la vue détaillée sont toutes deux visibles à l'écran, vous pouvez
vérifier l'aspect général du dessin au fur et à mesure que vous modifiez certains de ses détails. Dans chaque fenêtre de la mosaïque, vous avez la possibilité
d'effectuer les opérations suivantes :
Zoom ou panoramique, activation des modes d'affichage de la grille, d'accrochage à la grille et d'icône SCU et restauration des vues nommées dans chaque
fenêtre
Bascule d'une fenêtre à l'autre au cours de l'exécution d'une commande
Désignation d'une configuration de fenêtres afin de pouvoir la réutiliser
AutoCAD permet de disposer les fenêtres en mosaïque selon diverses configurations. La disposition des fenêtres est fonction d u nombre et de la taille des vues
que vous souhaitez afficher.
Pour de plus amples informations et des illustrations sur les fenêtres, reportez-vous à la section “Définition des fenêtres de l'espace objet” du Manuel
d'utilisation .
Pour fractionner la fenêtre active, utilisez la méthode Split Cette méthode requiert un paramètre, à savoir le type de configuration choisi pour le fractionnement.
Pour spécifier la configuration de la fenêtre, utilisez l'une des constantes suivantes qui correspondent aux configurations par défaut illustrées précédemment :
acViewport2Horizontal, acViewport2Vertical, acViewport3Left, acViewport3Right, acViewport3Horizontal, acViewport3Vertical,
acViewport3Above, acViewport3Below ou acViewport4.
Pour de plus amples informations sur la modification de la configuration des fenêtres, reportez-vous à la section “Définition des fenêtres de l'espace objet” du
Manuel d'utilisation .
Sub Ch3_SplitAViewport()
' Create a new viewport
Dim vportObj As AcadViewport
Set vportObj = ThisDrawing.Viewports.Add("TEST_VIEWPORT")
' Split vportObj into 2 horizontal windows
vportObj.Split acViewport2Horizontal
' Now set vportObj to be the active viewport
ThisDrawing.ActiveViewport = vportObj
End Sub
La fenêtre courante est celle dans l aquelle vous spécifiez des points et sélectionnez des objets. Pour rendre une fenêtre active, utilisez la propriété
ActiveViewport
Vous pouvez effectuer une itération via des fenêtres existantes afin de retrouver une fenêtre spécifique. Pour cela, spécifiez le nom de la configuration de
fenêtre dans laquelle se trouve la fenêtre voulue à l'aide de la propriété Name. S'il s'agit d' une configuration fractionnée, chaque fenêtre de cette configuration
peut être identifiée via les propriétés LowerLeftCorner et U pperRightCorner
Les propriétés LowerLeftCorner et UpperRightCorner représentent la position graphique de la fenêtre à l'écran. Ces propriétés sont définies d e la façon
suivante (en prenant un fractionnement en quatre fenêtres comme exemple) :
Fractionnement d'une fenêtre, puis lancement d'une itération sur les fenêtres
Dans cet exemple, une fenêtre est fractionnée en quatre panneaux. Une itération est ensuite effectuée sur toutes les fenêtres du dessin, puis le nom et l es
coins inférieur gauche et supérieur droit de chaque fenêtre sont affichés.
Sub Ch3_IteratingViewportWindows()
' Create a new viewport and make it active
Dim vportObj As AcadViewport
Set vportObj = ThisDrawing.Viewports.Add("TEST_VIEWPORT")
ThisDrawing.ActiveViewport = vportObj
' Split vport into 4 windows
vportObj.Split acViewport4
' Iterate through the viewports,
' highlighting each viewport and displaying
' the upper right and lower left corners
' for each.
Dim vport As AcadViewport
Dim LLCorner As Variant
Dim URCorner As Variant
For Each vport In ThisDrawing.Viewports
ThisDrawing.ActiveViewport = vport
LLCorner = vport.LowerLeftCorner
URCorner = vport.UpperRightCorner
MsgBox "Viewport: " & vport.Name & " is now active." & _
vbCrLf & "Lower left corner: " & _
LLCorner(0) & ", " & LLCorner(1) & vbCrLf & _
"Upper right corner: " & _
URCorner(0) & ", " & URCorner(1)
Next vport
End Sub
La plupart des actions réalisées par l'intermédiaire de l'Automatisation ActiveX d'AutoCAD modifient les éléments affichés dans le dessin AutoCAD. Or, toutes
ces actions ne mettent pas immédiatement à jour l'affichage du dessin. Vous pouvez en effet apporter plusieurs modifications au dessin sans devoir attendre
qu'il soit mis à jour après chacune d'elles. Vous pouvez aussi regrouper vos actions et effectuer un seul appel pour mettre à jour l'affichage lorsque vous avez
terminé.
La méthode Update permet de mettre à jour l'affichage d'un seul objet à la fois. La méthode Regen régénère tout le dessin et recalcule les coordonnées de
l'écran et la résolution d'affichage de tous les objets. De plus, cette commande réindexe la base de données de dessins pour optimiser l'affichage et la sélection
des objets.
Dans cet exemple, l'utilisateur crée un cercle. Il est ensuite mis à jour à l'aide de la méthode Update de façon à être visible dans AutoCAD.
Sub Ch3_UpdateDisplay()
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 1: center(1) = 1: center(2) = 0
radius = 1
' Create the circle
Set circleObj = ThisDrawing.ModelSpace.AddCircle(center, radius)
' Update the circle
circleObj.Update
End Sub
Les modifications apportées aux objets actifs comme le calque et le type de ligne actifs apparaissent immédiatement. Toutefois, certains objets actifs doivent
être réinitialisés pour que les modifications soient visibles. Il s'agit notamment de la fenêtre, du style de texte, du système de coordonnées utilisateur (SCU)
actifs. Si des modifications sont apportées à l'un de ces objets, il doit être réinitialisé et la méthode Regen appliquée pour que les modifications prennent effet.
Pour réinitialiser ce type d'objet, définissez la propriété ActiveTextStyle, ActiveUCS ou ActiveViewport, en utilisant l'objet mis à jour.
Dans l'exemple suivant, l'affichage de la grille est modifié dans la fenêtre active et la fenêtre est redéfinie en tant que fenêtre active pour faire apparaître le
changement.
Sub Ch3_ResetActiveViewport()
' Toggle the setting of the grid display
' for the active viewport
ThisDrawing.ActiveViewport.GridOn = _
Not (ThisDrawing.ActiveViewport.GridOn)
' Reset the active viewport
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
End Sub
L'objet Document fournit les méthodes SetVariable et GetVariable pour définir et extraire des variables système AutoCAD. Par exemple, pour assigner un entier
à la variable système MAXSORT, utilisez le code suivant :
Dans AutoCAD, vous pouvez créer des dessins comportant des figures géométriques exactes sans effectuer de calculs complexes. D'autre part, dans de
nombreux cas, vous pouvez spécifier des points précis sans même connaître leurs coordonnées. Sans quitter l'écran graphique, vous pouvez effectuer des
calculs sur votre dessin et afficher divers types d'informations d'état.
Actuellement, l'Automatisation ActiveX d'AutoCAD ne fournit pas de méthode pour les fonctions AutoCAD suivantes :
Traçage de droites
Calcul d'aires
Vous pouvez utiliser la grille comme repère visuel et activer le mode résolution pour limiter les mouvements du curseur. Outre le réglage de l'espacement, vous
pouvez orienter la grille d'accrochage et la grille normale. Vous pouvez faire pivoter l'alignement ou le définir afin de pouvoir l 'utiliser avec des dessins
isométriques.
Lorsque vous devez tracer des éléments en respectant un alignement ou un angle spécifique, vous pouvez changer l'orientation de la grille d'accrochage.
Lorsque vous réorientez la grille d'accrochage, le centre de l'axe de rotation devient l e point de base. Si vous devez aligner un motif de hachures, vous pouvez
changer ce point de base (généralement le point de coordonnées 0,0).
Pour faire pivoter l'angle d'accrochage, utilisez la p ropriété SnapRotationAngle Pour changer le point de base de l'axe de rotation, utilisez la propriété
SnapBasePoint
Remarque Ces deux propriétés requièrent l'utilisation de la méthode Update pour mettre à jour la fenêtre AutoCAD.
Pour de plus amples informations sur l'utilisation et la configuration des grilles, et de la résolution, reportez-vous à la section “Réglage de la grille et de la
résolution” du Manuel d'utilisation .
Dans cet exemple, le point de base d'accrochage est défini sur (1,1) et l'angle de rotation de la grille d'accrochage sur 30 degrés. La grille est activée de façon à
faire apparaître les changements.
Sub Ch3_ChangeSnapBasePoint()
' Turn on the grid for the active viewport
ThisDrawing.ActiveViewport.GridOn = True
' Change the snap base point to 1, 1
Dim newBasePoint(0 To 1) As Double
newBasePoint(0) = 1: newBasePoint(1) = 1
ThisDrawing.ActiveViewport.SnapBasePoint = newBasePoint
' Change the snap rotation angle to 30 degrees (0.575 radians)
Dim rotationAngle As Double
rotationAngle = 0,575
ThisDrawing.ActiveViewport.SnapRotationAngle = rotationAngle
' reset the viewport
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
End Sub
Lorsque vous tracez des lignes ou déplacez des objets, le mode orthogonal permet de limiter les mouvements du curseur aux axes horizontal et vertical.
(L'alignement orthogonal dépend de l'angle appliqué à la grille d'accrochage ou du SCU courant.) Le mode orthogonal est utile pour effectuer des opérations
exigeant la sélection d'un deuxième point. Il sert non seulement à définir un alignement vertical ou horizontal, mais aussi à créer des éléments parallèles ou
placés à intervalles réguliers.
Le mode orthogonal d'AutoCAD permet de gagner du temps. Si, par exemple, vous souhaitez tracer u n ensemble de lignes perpendiculaires, il suffit d'activer ce
mode avant de commencer à dessiner. Vous pourrez ensuite dessiner les lignes très rapidement : elles seront nécessairement perpendiculaires, les seules
directions possibles étant celles des axes.
Pendant que vous déplacez le curseur, la ligne élastique qui matérialise les déplacements s'oriente selon la direction de l'axe le plus proche du curseur.
AutoCAD ignore le mode orthogonal dans les vues en perspective ou lorsque vous tapez des coordonnées sur la ligne de commande ou activez un mode
d'accrochage aux objets.
Pour activer ou désactiver le mode orthogonal, utilisez la propriété OrthoOn Cette propriété requiert une valeur booléenne en entrée. Entrez TRUE pour activer
le mode orthogonal et FALSE pour le désactiver. Par exemple, l'instruction suivante active le mode orthogonal pour la fenêtre active :
ThisDrawing.ActiveViewport.OrthoOn = True
Traçage de droites
AutoCAD permet de créer des lignes de construction s'étendant à l'infini dans une ou deux directions. Les lignes de construction qui s'étendent dans une
direction sont appelées des demi-droites. Les lignes de construction qui s'étendent dans les deux directions sont appelées des demi-droites. Ces droites
peuvent servir de référence pour créer d'autres o bjets. Elles sont, par exemple, utiles pour déterminer le centre d'un triangle, créer plusieurs vues d'un même
élément ou définir des intersections temporaires destinées aux opérations d'accrochage.
Construction de droites
Requête de droites
Création de demi-droites
Requête de demi-droites
Construction de droites
Une droite peut se situer n'importe où dans un espace 3D et s'étendre à l'infini dans les deux directions. Pour construire une droite, utilisez la méthode
AddXLine Cette méthode définit une ligne suivant une méthode à deux points ; vous entrez ou spécifiez deux points pour définir l'orientation de la ligne. Le
premier de ces points, l'origine, est considéré comme le milieu de la droite.
L'exemple de code suivant crée un objet XLine à partir des deux points (5, 0, 0) et (1,1,0).
Sub Ch3_AddXLine()
Dim xlineObj As AcadXline
Dim basePoint(0 To 2) As Double
Dim directionVec(0 To 2) As Double
' Define the xline
basePoint(0) = 2#: basePoint(1) = 2#: basePoint(2) = 0#
directionVec(0) = 1#: directionVec(1) = 1#: directionVec(2) = 0#
' Create the xline in model space
Set xlineObj = ThisDrawing.ModelSpace.AddXLine _
(basePoint, directionVec)
ThisDrawing.Application.ZoomAll
End Sub
Requête de droites
Une fois la droite construite, vous pouvez rechercher son premier point à l'aide de la propriété BasePoint Le second point utilisé pour construire la droite n' est
pas enregistré avec l'objet. C'est pourquoi vous devez utiliser la propriété DirectionVector pour obtenir le vecteur de direction de la l igne.
Dans cet exemple, le point de base et le vecteur de direction de la ligne créée précédemment sont recherchés dans Ajout d'une ligne de construction
Vector = xlineObj.DirectionVector
Création de demi-droites
Une demi-droite est une ligne de l'espace 3D commençant au niveau d'un point donné et s'étendant à l' infini. Contrairement aux droites qui partent dans deux
directions, les demi-droites s'étendent dans une seule direction. De ce fait, la création de demi-droites évite d'encombrer inutilement le dessin.
Les commandes qui affichent l'étendue du dessin ne tiennent pas compte des demi-droites, tout comme elles ne tiennent pas compte des droites.
Requête de demi-droites
Une fois la demi-droite construite, vous pouvez rechercher son premier point à l'aide de la propriété BasePoint Le second point u tilisé pour construire la demi-
droite n'est pas enregistré avec l'objet. C'est pourquoi vous devez utiliser la propriété DirectionVector pour obtenir le vecteur de direction de la demi-droite.
L'exemple de code suivant crée un objet Ray à partir des deux points (5, 0, 0) et (1, 1, 0). Il recherche ensuite le point de base et le vecteur de direction
courants et affiche les résultats dans une boîte de message. Le vecteur de direction est modifié, et le point de base et le nouveau vecteur de direction sont
recherchés et affichés.
Sub Ch3_EditRay()
Dim rayObj As AcadRay
Dim basePoint(0 To 2) As Double
Dim secondPoint(0 To 2) As Double
' Define the ray
basePoint(0) = 3#: basePoint(1) = 3#: basePoint(2) = 0#
secondPoint(0) = 4#: secondPoint(1) = 4#: secondPoint(2) = 0#
' Creates a Ray object in model space
Set rayObj = ThisDrawing.ModelSpace.AddRay _
(basePoint, secondPoint)
ThisDrawing.Application.ZoomAll
' Find the current status of the Ray
MsgBox "The base point of the ray is: " & _
rayObj.basePoint(0) & ", " & _
rayObj.basePoint(1) & ", " & _
rayObj.basePoint(2) & vbCrLf & _
"The directional vector for the ray is: " & _
rayObj.DirectionVector(0) & ", " & _
rayObj.DirectionVector(1) & ", " & _
rayObj.DirectionVector(2), , "Edit Ray"
' Change the directional vector for the ray
Dim newVector(0 To 2) As Double
newVector(0) = -1
newVector(1) = 1
newVector(2) = 0
rayObj.DirectionVector = newVector
ThisDrawing.Regen False
MsgBox "The base point of the ray is: " & _
rayObj.basePoint(0) & ", " & _
rayObj.basePoint(1) & ", " & _
rayObj.basePoint(2) & vbCrLf & _
"The directional vector for the ray is: " & _
rayObj.DirectionVector(0) & ", " & _
rayObj.DirectionVector(1) & ", " & _
rayObj.DirectionVector(2), , "Edit Ray"
End Sub
L'utilisation des méthodes fournies par l'objet Utility permet de résoudre rapidement un problème mathématique ou de localiser des points sur le dessin. Elles
Retrouver l'angle d'une ligne à partir de l'axe X à l'aide de la méthode AngleFromXAxis
Convertir un angle d'une chaîne en valeur réelle (double) à l'aide de la méthode AngleToReal
Convertir un angle d'une valeur réelle (double) en chaîne à l'aide de la méthode AngleToString
Convertir une distance d'une chaîne en valeur réelle (double) à l'aide de la méthode DistanceToReal
Créer un variant contenant un tableau de nombres entiers, de nombres à virgule flottante, de doubles, etc., à l'aide de la méthode CreateTypedArray
Retrouver le point à un angle et une distance spécifiques d'un point donné à l'aide de la méthode PolarPoint
Convertir un point d'un système de coordonnées dans un autre système de coordonnées à l'aide de la méthode TranslateCoordinates
Retrouver la distance entre deux points saisis par l'utilisateur à l'aide de la méthode GetDistance
Cet exemple utilise la méthode GetDistance pour obtenir les coordonnées, et la fonction MsgBox pour afficher la distance calculée.
Sub Ch3_GetDistanceBetweenTwoPoints()
Dim returnDist As Double
' Return the value entered by user. A prompt is provided.
returnDist = ThisDrawing.Utility.GetDistance _
(, "Pick two points.")
MsgBox "The distance between the two points is: " & returnDist
End Sub
Calcul d'aires
Calcul de l'aire définie par des points entrés par l'utilisateur Vous pouvez déterminer l'aire d'un arc, cercle, ellipse, polyligne optimisée, polyligne, région ou
spline planaire fermée à l'aie de la propriété Area.
Pour calculer l'aire combinée de plusieurs objets, vous pouvez conserver un total cumulé au fur et à mesure que vous ajoutez ou utilisez la méthode Boolean
sur une série de régions pour obtenir une seule région représentant l'aire voulue. A partir de cette région unique, vous pouvez utiliser la propriété Area pour
obtenir cette aire.
L'aire calculée dépend du type d'objet recherché. Pour savoir comment est calculée l'aire de chaque type d'objet, reportez-vous à la section “Lecture
d'informations d'aire” du Manuel d'utilisation .
Calcul de l'aire définie par des points entrés par l'utilisateur Pour obtenir l'aire spécifiée par des points entrés par l'utilisateur Vous pouvez mesurer une région
fermée arbitraire définie par les points 2D ou 3D spécifiés par l'utilisateur. Il doit s'agir de points coplanaires.
Pour obtenir l'aire spécifiée par des points entrés par l'utilisateur
1. Utilisez la méthode GetPoint dans une boucle pour obtenir les points de l'utilisateur.
2. Créez une polyligne fine à partir des points entrés par l'utilisateur. Utilisez la méthode AddLightweightPolyline pour créer cette polyligne.
3. Utilisez la propriété Area pour obtenir l'aire de la nouvelle polyligne créée.
4. Effacez la polyligne à l'aide de la méthode Erase.
L'exemple suivant invite l'utilisateur à saisir cinq points. Une polyligne est ensuite créée à partir des points saisis. La polyligne est fermée et son aire est affichée
dans une boîte de message.
Sub Ch3_CalculateDefinedArea()
Dim p1 As Variant
Dim p2 As Variant
Dim p3 As Variant
Dim p4 As Variant
Dim p5 As Variant
' Get the points from the user
p1 = ThisDrawing.Utility.GetPoint(, vbCrLf & "First point: ")
p2 = ThisDrawing.Utility.GetPoint(p1, vbCrLf & "Second point: ")
p3 = ThisDrawing.Utility.GetPoint(p2, vbCrLf & "Third point: ")
p4 = ThisDrawing.Utility.GetPoint(p3, vbCrLf & "Fourth point: ")
L'objet Utility, qui est l'enfant de l'objet Document, définit les méthodes d'entrée utilisateur. Ces méthodes a ffichent un message sur la ligne de commande
d'AutoCAD pour demander différents types d'entrées. Ce type d' entrée utilisateur est particulièrement utile pour la saisie interactive de coordonnées d'affichage,
de sélection d'entités et de valeurs numériques et de type chaîne courte. Si votre application requiert l'entrée de nombreuses options et valeurs, une boîte de
dialogue sera sans doute plus appropriée que des messages individuels.
Chaque méthode d'entrée utilisateur affiche un message sur la ligne de commande d'AutoCAD et renvoie une valeur en fonction du type d'entrée requis. Par
exemple, GetString renvoie une chaîne, GetPoint renvoie un variant (contenant un tableau de doubles à trois éléments) et GetInteger renvoie un nombre entier.
Vous pouvez contrôler encore davantage les entrées de l'utilisateur grâce à la méthode InitializeUserInput Elle vous permet de contrôler des éléments comme
l'entrée de la valeur NULL (en appuyant sur ENTREE), de zéro ou de nombres négatifs et de valeurs de texte arbitraires.
Pour que le message soit affiché seul sur une ligne, entrez la constante retour chariot/interligne (vbCrLf) au début des chaînes de message.
Méthode GetString
Méthode GetPoint
Méthode GetKeyword
Méthode GetString
La méthode GestString demande à l'utilisateur d'entrer une chaîne sur la ligne de commande d'AutoCAD. Elle accepte deux paramètres. Le premier contrôle
l'entrée d'espaces dans la chaîne d'entrée. S'il a la valeur 0, aucun espace n'est autorisé (ESPACE termine l'entrée) et s'il a la valeur 1, la chaîne peut contenir
des espaces (ENTREE doit être utilisé pour terminer l'entrée). Le second paramètre est la chaîne du message.
Saisie d'une valeur de chaîne par l'utilisateur dans la ligne de commande AutoCAD
L'exemple suivant montre l'invite à saisir un nom ; l'entrée doit ê tre validée par la touche ENTREE (les espaces sont autorisés dans la chaîne d'entrée). La
valeur de chaîne est enregistrée dans la variable retVal et affichée dans une boîte de message.
Sub Ch3_GetStringFromUser()
Dim retVal As String
retVal = ThisDrawing.Utility.GetString _
(1, vbCrLf & "Enter your name: ")
MsgBox "The name entered was: " & retVal
End Sub
Méthode GetPoint
La méthode GetPoint demande à l'utilisateur de spécifier un point sur la l igne de commande d'AutoCAD. Elle accepte deux paramètres: un point de départ
facultatif et la chaîne du message. Si le point de départ est spécifié, AutoCAD trace une ligne élastique depuis ce point. Pour contrôler l'entrée utilisateur, cette
méthode peut être précédée d'un appel de la méthode InitializeUserInput
L'exemple suivant invite l'utilisateur à spécifier deux points, puis trace une ligne en utilisant ces points pour la délimiter.
Sub Ch3_GetPointsFromUser()
Dim startPnt As Variant
Dim endPnt As Variant
Dim prompt1 As String
Dim prompt2 As String
prompt1 = vbCrLf & "Enter the start point of the line: "
prompt2 = vbCrLf & "Enter the end point of the line: "
' Get the first point without entering a base point
startPnt = ThisDrawing.Utility.GetPoint(, prompt1)
' Use the point entered above as the base point
endPnt = ThisDrawing.Utility.GetPoint(startPnt, prompt2)
' Create a line using the two points entered
ThisDrawing.ModelSpace.AddLine startPnt, endPnt
ThisDrawing.Application.ZoomAll
End Sub
Méthode GetKeyword
La méthode GetKeyword demande à l'utilisateur de taper un mot clé sur la ligne de commande d'AutoCAD. Elle accepte un seul paramètre, à savoir la chaîne
du message. Les mots clés et paramètres d'entrée sont définis par un appel de la méthode InitializeUserInput
Entrée d'un mot clé par l'utilisateur sur la ligne de commande d'AutoCAD
L'exemple suivant demande à l'utilisateur de taper un mot clé en attribuant la valeur 1 au premier paramètre de InitializeUserInput, ce qui interdit l'entrée de
valeurs NULL (en appuyant sur la touche ENTREE). Le second paramètre dresse la l iste des mots clés autorisés.
Sub Ch3_KeyWord()
Dim keyWord As String
ThisDrawing.Utility.InitializeUserInput 1, "Line Circle Arc"
keyWord = ThisDrawing.Utility.GetKeyword _
(vbCrLf & "Enter an option (Line/Circle/Arc): ")
MsgBox keyWord, , "GetKeyword Example"
End Sub
Une invite de saisie de mot clé plus conviviale fournit une valeur par défaut lorsque l'utilisateur appuie sur la touche ENTREE (entrée NULL). Notez les
modifications mineures apportées à l'exemple suivant :
Sub Ch3_KeyWord2()
Dim keyWord As String
ThisDrawing.Utility.InitializeUserInput 0, "Line Circle Arc"
keyWord = ThisDrawing.Utility.GetKeyword _
(vbCrLf & "Enter an option (Line/Circle/<Arc>): ")
If keyWord = "" Then keyWord = "Arc"
MsgBox keyWord, , "GetKeyword Example"
End Sub
Vous pouvez faire appel à la méthode InitializeUserInput pour définir des mots clés ou limiter le type d'entrée à la méthode d'entrée utilisateur choisie.
L'utilisation de cette méthode et les valeurs de paramètres appliquées sont semblables à celles de la fonction AutoLISP initget . InitializeUserInput peut être
utilisé avec les méthodes suivantes : GetAngle, GetCorner, GetDistance, GetInteger, GetKeyword, GetOrientation, GetPoint et GetReal. La méthode
InitializeUserInput ne peut pas être utilisée avec la méthode GetString. Utilisez la méthode GetInput pour extraire la valeur de chaîne (mot clé ou entrée
arbitraire) lorsque la méthode d'entrée utilisateur ne renvoie pas une valeur de chaîne.
La méthode InitializeUserInput accepte deux paramètres. Le premier est un entier binaire qui détermine les options d 'entrée de la méthode d'entrée utilisateur.
Le second paramètre est une chaîne qui définit les mots clés autorisés.
Entrée d'un entier ou d'un mot clé par l'utilisateur sur la ligne de commande d'AutoCAD
L'exemple suivant demande à l'utilisateur d'entrer un entier positif, un entier non négatif ou un mot clé.
Sub Ch3_UserInput()
' The first parameter of InitializeUserInput (6)
' restricts input to positive and non-negative
' values. The second parameter is the list of
' valid keywords.
ThisDrawing.Utility.InitializeUserInput 6, "Big Small Regular"
' Set the prompt string variable
Dim promptStr As String
promptStr = vbCrLf & "Enter the size or (Big/Small/<Regular>):"
' At the GetInteger prompt, entering a keyword or pressing
' ENTREE without entering a value results in an error. To allow
' your application to continue and check for the error
' description, you must set the error handler to resume on error.
On Error Resume Next
' Get the value entered by the user
Dim returnInteger As Integer
returnInteger = ThisDrawing.Utility.GetInteger(promptStr)
' Check for an error. If the error number matches the
' one shown below, then use GetInput to get the returned
' string; otherwise, use the value of returnInteger.
If Err.Number = -2145320928 Then
Dim returnString As String
Debug.Print Err.Description
returnString = ThisDrawing.Utility.GetInput()
If returnString = "" Then 'ENTREE returns null string
returnString = "Regular" 'Set to default
End If
Err.Clear
Else 'Otherwise,
returnString = returnInteger 'Use the value entered
End If
' Display the result
MsgBox returnString, , "InitializeUserInput Example"
End Sub
Vous pouvez émettre des commandes directement sur la ligne de commande d'AutoCAD en utilisant la méthode SendCommand. Cette méthode envoie une
chaîne spécifique directement sur la ligne de commande d'AutoCAD. Cette chaîne doit contenir les arguments de la commande mentionnée dans l'ordre prévu
par la séquence de la commande exécutée. Un espace ou l'équivalent ASCII d'un retour chariot dans la chaîne équivaut à appuyer sur la touche ENTREE du
clavier. Contrairement à l'environnement AutoLISP, la méthode SendCommand prend obligatoirement un argument.
Dans l'exemple suivant, un cercle est créé avec un centre de (2,2,0) et un rayon de 4. Un zoom est ensuite effectué sur tous les objets géométriques du dessin.
Notez l'espace à la fin de la chaîne : il correspond à l'activation finale de la touche ENTREE, qui lance l'exécution de la commande.
Sub Ch3_SendACommandToAutoCAD()
ThisDrawing.SendCommand "_Circle 2,2,0 4 "
ThisDrawing.SendCommand "_zoom a "
End Sub
Lorsque vous lancez AutoCAD, un document nouveau ou existant est systématiquement ouvert. Toutefois, vous pouvez refermer tous les documents au cours
de la session active.
Lorsque vous refermez tous les documents dans l'interface utilisateur d'AutoCAD, la fenêtre d'application apparaît un peu différemment. Seuls les menus
Fichier, Affichage, Fenêtre et Aide sont présents. Ces menus comportent un nombre d'options moins important. Par a illeurs, aucune ligne de commande
n'apparaît.
De même, vous ne pouvez exécuter que les opérations suivantes dans l'interface ActiveX lorsque aucun d ocument n'est ouvert :
Ouvrir un document.
Créer un document.
Importer un document.
Quitter AutoCAD.
Ces opérations peuvent être exécutées depuis la collection Documents. Outre un jeu limité de méthodes et de propriétés de l'objet Application, les méthodes et
propriétés de la collection Documents sont les seules options d'interface disponibles lorsque aucun document n'est ouvert. Si vous exécutez une autre opération
et que vous essayez, par exemple, d'accéder à des options utilisateur, vous obtiendrez une erreur.
Utilisez la propriété Count de la collection Documents pour déterminer si AutoCAD est à l'état sans document ouvert. Si Documents.Count = 0, AutoCAD est
à l'état sans document. Si Documents.Count > 0, alors au moins un document est ouvert.
Notez que dans VBA, l'objet ThisDrawing n'est pas défini lorsque AutoCAD est à l'état sans document ouvert. Ce qui est logique car ThisDrawing fait
normalement référence au dessin actif et qu'aucun dessin ne peut être ouvert à l'état sans document ouvert. C'est pourquoi, si vous essayez d'exécuter une
macro utilisant l'objet ThisDrawing, vous obtiendrez une erreur d'exécution. Pour éviter ce problème, utilisez la fonction VBA GetObject et indiquez la
version d'AutoCAD afin d'obtenir une connexion à AutoCAD lorsque aucun document n'est ouvert.
Vous pouvez utiliser des dessins ou des images provenant d'autres applications, en les ouvrant sous un format approprié. AutoCAD traite certaines formes de
conversion pour les fichiers DXF TM (Drawing Interchange Format), SAT et WMF. Dans toutes les versions d'AutoCAD, vous pouvez importer un fichier à l'aide
de la méthode Import. Cette méthode requiert la saisie de trois valeurs : le nom du fichier à importer, le point d'insertion du fichier dans le dessin et le facteur
d'échelle à utiliser pour placer le dessin importé.
Vous pouvez convertir les dessins AutoCAD dans divers formats, afin de les utiliser dans d'autres applications, en faisant appel à l a méthode Export. Celle-ci
permet d'exporter un dessin AutoCAD au format WMF, SAT, EPS, DXF ou BMP. La méthode Export requiert la saisie de trois valeurs : le nom du nouveau
fichier à créer, l'extension du nouveau fichier et le jeu de sélection des objets à exporter.
Lors de l'exportation au format WMF, SAT ou BMP, vous devez indiquer un jeu de sélection non vide. Ce jeu spécifie les objets du dessin à exporter. Si vous
n'indiquez pas de jeu de sélection, aucun objet n'est exporté : il en résulte une erreur d'argument piégeable incorrect.
Lors de l'exportation aux formats EPS ou DXF, le jeu de sélection, bien qu'ignoré par la commande, doit être précisé. L'ensemble du dessin est
automatiquement exporté lorsque vous choisissez ces formats.
Dans cet exemple, un cercle est créé dans le dessin actif. L e dessin est ensuite exporté vers un fichier DXFExprt.DXF , un nouveau dessin est ouvert et le fichier
est importé. Notez qu'un jeu de sélection vide est transmis comme argument lors de l'exportation. Bien que la méthode Export ignore les informations relatives
au jeu de sélection lors de la création d'un fichier DXF, une erreur de syntaxe est signalée si cet argument est omis.
Sub Ch3_ImportingAndExporting()
' Create the circle for visual representation
Dim circleObj As AcadCircle
Dim centerPt(0 To 2) As Double
Dim radius As Double
centerPt(0) = 2: centerPt(1) = 2: centerPt(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace.AddCircle _
(centerPt, radius)
ThisDrawing.Application.ZoomAll
' Create an empty selection set
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("NEWSSET")
'Export the current drawing to a DXF file in the
' AutoCAD temporary file directory
Dim tempPath As String
Dim exportFile As String
Const dxfname As String = "DXFExprt"
tempPath = _
ThisDrawing.Application.preferences.Files.TempFilePath
exportFile = tempPath & dxfname
ThisDrawing.Export exportFile, "DXF", sset
' Delete the empty selection set
ThisDrawing.SelectionSets.Item("NEWSSET").Delete
' Open a new drawing
ThisDrawing.Application.Documents.Add "acad.dwt"
' Define the import
Dim importFile As String
Dim insertPoint(0 To 2) As Double
Vous pouvez créer une gamme d'objets, allant de simples lignes et cercles à des courbes splines, des ellipses et des aires hachurées associatives.
Généralement, vous ajoutez les objets à l'espace objet à l'aide de l'une des méthodes Add. Vous pouvez également créer des objets dans l'espace papier ou
dans un bloc.
Une fois un objet créé, vous pouvez modifier son calque, sa couleur et son type de ligne. Vous pouvez également ajouter du texte afin d'annoter le dessin.
Création d'objets
Modification d'objets
Création d'objets
Bien qu'il existe souvent plusieurs méthodes pour créer le même objet graphique dans AutoCAD ® , l'automatisation ActiveX ne propose qu'une seule méthode
de création par objet. Par exemple, dans AutoCAD, il existe quatre manières différentes de créer un cercle : (1) en spécifiant le centre et le rayon, (2) à l'aide de
deux points définissant le diamètre, (3) à l'aide de trois points définissant la circonférence ou (4) à l'aide de deux tangentes et d'un rayon. Toutefois,
l'automatisation ActiveX n'offre qu'une méthode de création de cercle, qui consiste à utiliser le centre et le rayon.
Remarque Les méthodes VB et VBA de création d'objets à l'aide de CreateObject ou Dim et du mot-clé New peuvent uniquement être utilisées pour créer
l'objet Application AutoCAD. Tous les autres objets AutoCAD doivent être créés à l'aide de la méthode Add ou Add< nom_objet > fournie par l'interface AutoCAD.
Création de lignes
Création de hachures
Les objets graphiques sont créés dans la collection ModelSpace, la collection PaperSpace ou un objet Block
La collection ModelSpace est renvoyée par la propriété ModelSpace et la collection PaperSpace par la propriété PaperSpace
Vous pouvez référencer ces objets directement ou via une variable définie par l'utilisateur. Pour référencer les objets directement, incluez l'objet dans la
hiérarchie appelante. Par exemple, l'instruction suivante ajoute une ligne à l'espace objet :
Pour référencer les objets via une variable définie par l'utilisateur, attribuez le type AcadModelSpace ou AcadPaperSpace à cette variable, puis a ssignez-lui
la propriété appropriée en dehors du document actif. L'exemple suivant définit deux variables et les rend égales à l'espace objet et à l'espace papier,
respectivement:
L'instruction suivante ajoute une ligne à l'espace objet en utilisant la variable définie par l'utilisateur :
Création de lignes
La ligne est l'élément de base du dessin dans AutoCAD. Vous pouvez créer une grande variété de lignes : lignes uniques, segments de ligne multiples avec ou
sans arcs. En général, il suffit de spécifier des points de coordonnées pour tracer des lignes. Le type de ligne utilisé par défaut correspond à une ligne continue
(CONTINUOUS) mais divers types de lignes utilisant des points et des tirets sont disponibles.
AddLine
Crée une ligne passant par deux points.
AddLightweightPolyline
Crée une polyligne fine 2D à partir d'une liste de sommets.
AddMLine
Crée une multiligne.
AddPolyline
Crée une polyligne 2D ou 3D.
Les lignes et les multilignes standard sont créées sur le plan XY du système de coordonnées général. Les polylignes et les polylignes fines sont créées dans le
système de coordonnées de l'objet (SCO). Pour plus d'informations sur la conversion des coordonnées SCO, reportez-vous à la section Conversion de
coordonnées.
L'exemple suivant utilise la méthode AddLightweightPolyline pour créer une polyligne simple à deux segments en utilisant les coordonnées 2D (2,4), (4,2) et
(6,4).
Sub Ch4_AddLightWeightPolyline()
Dim plineObj As AcadLWPolyline
Dim points(0 To 5) As Double
' Define the 2D polyline points
points(0) = 2: points(1) = 4
points(2) = 4: points(3) = 2
points(4) = 6: points(5) = 4
' Create a light weight Polyline object in model space
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
ThisDrawing.Application.ZoomAll
End Sub
AutoCAD permet de créer différents types d'objets incurvés, y compris des courbes splines, des cercles, des arcs et des ellipses. Toutes les courbes sont
créées sur le plan XY du SCG courant.
AddArc
Crée un arc suivant un centre, un rayon et des angles de départ et de fin.
AddCircle
L'exemple suivant crée une spline dans l'espace objet à l'aide des coordonnées (0, 0, 0), (5, 5, 0) et (10, 0, 0). La courbe spline possède des tangentes de
départ et de fin (0.5, 0.5, 0.0).
Sub Ch4_CreateSpline()
' This example creates a spline object in model space
' Declare the variables needed
Dim splineObj As AcadSpline
Dim startTan(0 To 2) As Double
Dim endTan(0 To 2) As Double
Dim fitPoints(0 To 8) As Double
' Define the variables
startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0
endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0
fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0
fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0
fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0
' Create the spline
Set splineObj = ThisDrawing.ModelSpace.AddSpline _
(fitPoints, startTan, endTan)
ZoomAll
End Sub
Pour de plus amples informations sur les splines, reportez-vous à la documentation relative à l'objet Spline et à la méthode AddSpline dans le manuel ActiveX
and VBA Reference d'AutoCAD.
Vous pouvez utiliser ce type d'objet comme points d'ancrage du curseur ou pour décaler des objets. AutoCAD permet non seulement de définir le style du point
mais aussi sa taille (exprimée par rapport aux dimensions de l'écran ou en unités absolues).
Les variables système PDMODE et PDSIZE contrôlent l'aspect des objets Point. Les valeurs PDMODE 0, 2, 3 et 4 spécifient une figure à dessiner à l'aide du
point. La valeur 1 ne sélectionne rien à afficher.
L'ajout de 32, 64 ou 96 à la valeur précédente sélectionne une forme à dessiner autour du point en plus de la figure dessinée au travers de celui-ci :
La variable système PDSIZE détermine la taille de la figure représentant un point, sauf pour les valeurs 0 et 1 de la variable PDMODE. Si PDSIZE est à 0, le
point à 5% de la hauteur du graphique est généré. Une valeur PDSIZE positive spécifie une taille absolue. Une valeur négative est interprétée comme un
pourcentage de la taille de la fenêtre. La taille de tous les points est recalculée au moment de la régénération du dessin.
Ainsi, quand vous modifiez la valeur de PDMODE et de PDSIZE, l'apparence des points existants change lors de la régénération suivante du dessin.
L'exemple de code suivant crée un objet Point dans l'espace objet à la coordonnée (5, 5, 0). Les variables système PDMODE et PDSIZE sont ensuite mises à
jour.
Sub Ch4_CreatePoint()
Dim pointObj As AcadPoint
Dim location(0 To 2) As Double
' Define the location of the point
location(0) = 5#: location(1) = 5#: location(2) = 0#
' Create the point
Set pointObj = ThisDrawing.ModelSpace.AddPoint(location)
ThisDrawing.SetVariable "PDMODE", 34
ThisDrawing.SetVariable "PDSIZE", 1
ZoomAll
End Sub
Il est possible d'appliquer une couleur de remplissage à des zones fermées (en forme de triangle ou de quadrilatère). Pour obtenir des résultats plus
rapidement, créez ces zones en désactivant la variable système FILLMODE, puis activez FILLMODE pour remplir la zone finie.
Lorsque vous définissez une zone quadrilatérale remplie, l'ordre dans lequel vous désignez le troisième et le quatrième points détermine l'aspect final de la
zone. Comparez les deux illustrations suivantes :
Les deux premiers points définissent un côté du polygone. Le troisième point est défini diagonalement par rapport au second. Si le quatrième point est défini
comme étant égal au troisième point, un triangle rempli est créé.
Pour de plus amples informations sur le remplissage de solides, reportez-vous à la section “Création de zones pleines” du Manuel d'utilisation .
L'exemple de code suivant crée une zone remplie ayant la forme d'un quadrilatère dans l'espace objet à l'aide des coordonnées (0, 0, 0), (5, 0, 0), (5, 8, 0) et (0,
8, 0).
Sub Ch4_CreateSolid()
Dim solidObj As AcadSolid
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Dim point3(0 To 2) As Double
Dim point4(0 To 2) As Double
' Define the solid
point1(0) = 0#: point1(1) = 0#: point1(2) = 0#
point2(0) = 5#: point2(1) = 0#: point2(2) = 0#
point3(0) = 5#: point3(1) = 8#: point3(2) = 0#
point4(0) = 0#: point4(1) = 8#: point4(2) = 0#
' Create the solid object in model space
Set solidObj = ThisDrawing.ModelSpace.AddSolid _
(point1, point2, point3, point4)
ZoomAll
End Sub
Les régions sont des zones délimitées par des contours en deux dimensions, définis à partir d'objets fermés appelés boucles. Une boucle est une courbe ou
une séquence de courbes reliées qui définit une aire plane dont le contour ne comporte pas d'auto-intersection. Les boucles peuvent être des combinaisons de
lignes, de polylignes fines, de cercles, d'arcs, d'ellipses, d'arcs elliptiques, de splines, de faces 3D, de traces et de solides. Les objets composant une boucle
doivent être fermés ou former une zone délimitée avec d'autres objets dont ils partagent l es extrémités. Ils doivent également être coplanaires (sur un même
plan). Les boucles constituant une région doivent être définies sous forme de réseau d'objets.
Pour de plus amples informations sur l'utilisation de régions, reportez-vous à la section “Création et combinaison d'aires (régions)” du Manuel d'utilisation .
Création de régions
Union de régions
Création de régions
Pour créer une région, utilisez la méthode AddRegion Cette méthode crée une région à partir de chaque boucle fermée, formée par le réseau d'entrées des
courbes. AutoCAD convertit les polylignes 2D fermées et 3 D planaires afin de séparer les régions puis convertit les polylignes, lignes et courbes qui forment les
boucles planaires fermées. Si plus de deux courbes partagent une extrémité, la région résultante peut être arbitraire. Pour cette raison, plusieurs régions
peuvent en fait être créées lors de l'utilisation de la méthode AddRegion. Utilisez un variant pour contenir le réseau de régions créé.
Pour calculer le nombre total d'objets Region créés, utilisez les fonctions UBound et LBound de VBA, comme dans l'e xemple suivant :
UBound(objRegions) - LBound(objRegions) + 1
où objRegions est un variant contenant la variable renvoyée par la méthode AddRegion. Cette instruction permet de calculer le nombre total d e régions
créées.
Sub Ch4_CreateRegion()
' Define an array to hold the
' boundaries of the region.
Dim curves(0 To 0) As AcadCircle
' Create a circle to become a
' boundary for the region.
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2
center(1) = 2
center(2) = 0
radius = 5#
Set curves(0) = ThisDrawing.ModelSpace.AddCircle _
(center, radius)
' Create the region
Dim regionObj As Variant
regionObj = ThisDrawing.ModelSpace.AddRegion(curves)
ZoomAll
End Sub
Vous pouvez créer des régions composées en soustrayant, combinant ou recherchant l'intersection de régions ou solides 3D. Vous pouvez ensuite appliquer
une extrusion ou une révolution aux régions composées afin de créer des solides complexes. Pour créer une région composée, utilisez la méthode Boolean
Lorsque vous soustrayez une région à une autre, vous appelez la méthode Boolean à partir de la première région. Il s'agit de la région depuis laquelle effectuer
la soustraction. Par exemple, pour calculer la taille de moquette requise pour un p lancher, appelez la méthode Boolean à partir du contour externe de l'espace
au sol et utilisez les zones sans moquette, tels que les colonnes et les comptoirs, en tant qu'objet dans la liste des paramètres booléens.
Union de régions
Pour unir des régions, appelez la méthode Boolean et entrez la constante acUnion pour l'opération au lieu de acSubtraction. Vous pouvez combiner les
régions comme vous l'entendez afin de les unir.
Pour rechercher l'intersection de deux régions, utilisez la constante acIntersection. Vous pouvez combiner les régions comme vous l'entendez afin de créer
une intersection entre elles.
Création de hachures
Lors de la création d'une hachure, vous ne spécifiez pas initialement la zone à remplir. Vous devez d'abord créer l 'objet Hatch. Une fois cette opération
effectuée, vous pouvez spécifier la boucle externe, qui est le contour externe de la hachure. Vous pouvez ensuite spécifier des b oucles internes qui peuvent
exister dans la hachure.
Pour de plus amples informations sur l'utilisation de hachures, reportez-vous à la section “Présentation des motifs de hachures et des remplissages” du Manuel
d'utilisation .
Lors de la création de l'objet Hatch, vous devez spécifier le type de motif de hachure, le nom du motif de hachure et l'associativité. Une fois l'objet Hatch créé,
vous ne pouvez plus modifier l'associativité de la hachure.
Vous pouvez créer des hachures associatives ou non associatives. Les hachures associatives sont liées à leurs contours et mises à jour lorsque les contours
sont modifiés. Les hachures non associatives sont indépendantes de leurs contours.
L'associativité peut uniquement être définie lors de la création d'une hachure. Une fois une hachure créée, vous pouvez la dissocier mais vous ne pouvez pas
l'associer de nouveau.
Pour rendre une hachure associative, attribuez la valeur TRUE au paramètre Associativité de la méthode AddHatch. Pour rendre une hachure non
associative, attribuez la valeur FALSE au paramètre Associativité de la méthode AddHatch.
AutoCAD comporte un remplissage plein et plus de cinquante motifs de hachure de norme industrielle. Les motifs de hachure servent à distinguer différentes
parties ou caractéristiques d'un dessin. Ils permettent, par exemple, de différencier les parties d'un objet en trois dimensions ou de représenter les matières
utilisées pour créer un objet.
Vous pouvez utiliser les motifs de hachures fournis avec AutoCAD ou ceux d'une b ibliothèque externe. Pour obtenir un tableau des motifs de hachures fournis
avec AutoCAD, reportez-vous au manuel Présentation des commandes d'AutoCAD.
Pour spécifier un motif unique, vous devez entrer un type et un nom de motif lors de la création de l'objet Hatch. Le type de motif spécifie l'emplacement du nom
du motif. Lors de la saisie du type de motif, utilisez l'une des constantes suivantes :
acHatchPatternTypePredefined
Sélectionne le nom du motif parmi ceux définis dans le fichier acad.pat .
acHatchPatternTypeUserDefined
Définit un motif de lignes en utilisant le type de ligne courant.
acHatchPatternTypeCustomDefined
Sélectionne le nom du motif à partir d'un fichier PAT autre que le fichier acad.pat .
Lors de la saisie du nom de motif, utilisez un nom de fichier autorisé pour le fichier spécifié par le type de motif.
Une fois l'objet Hatch créé, vous pouvez ajouter les contours de hachure. Il peut s'agir d'une combinaison de lignes, d'arcs, de cercles, de polylignes 2D,
d'ellipses, de splines et de régions.
Le premier contour hachuré doit être le contour externe qui définit les limites externes à remplir par la hachure. Pour ajouter le contour externe, utilisez la
méthode AppendOuterLoop
Une fois le contour externe défini, vous pouvez ajouter des contours internes. Ajoutez les contours internes avec la méthode AppendInnerLoop
Les contours internes définissent les îlots au sein de la hachure. La gestion de ces îlots par l'objet Hatch est fonction de la définition de la propriété HatchStyle
La propriété HatchStyle peut être définie sur l'une des conditions suivantes :
Extérieur Remplit uniquement les zones les plus éloignées. Il s'effectue également vers l'intérieur à partir du contour, mais il est définitivement désactivé
lorsqu'un contour interne est rencontré.
Ignorer La structure interne est ignorée. Cette option hachure tous les objets internes.
Une fois la définition de l a hachure terminée, elle doit être é valuée avant de pouvoir être affichée. Pour ce faire, utilisez la méthode Evaluate.
Dans cet exemple, une hachure associée est créée dans l'espace objet. Une fois la hachure créée, vous pouvez modifier la taille du cercle auquel elle est
associée. La hachure s'adapte alors à l a taille du cercle sélectionné.
Sub Ch4_CreateHatch()
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Define the hatch
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
' Create the associative Hatch object
Set hatchObj = ThisDrawing.ModelSpace.AddHatch _
(PatternType, patternName, bAssociativity)
' Create the outer boundary for the hatch. (a circle)
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 3: center(1) = 3: center(2) = 0
radius = 1
Set outerLoop(0) = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
' Append the outerboundary to the hatch
' object, and display the hatch
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
ThisDrawing.Regen True
End Sub
Un jeu de sélection peut être composé d'un seul objet ou d'un groupement plus complexe : par exemple, le jeu d'objets d'un certain calque.
La définition d'un jeu de sélection se fait en deux étapes. Tout d'abord, vous devez créer un jeu de sélection et l'ajouter à la collection SelectionSets Une fois ce
jeu créé, vous pouvez le remplir avec les objets à traiter.
Pour créer un jeu de sélection nommé, utilisez la méthode Add Cette méthode ne requiert qu'un paramètre : le nom du jeu de sélection.
Si un jeu de sélection porte déjà ce nom, AutoCAD affiche un message d'erreur. Nous vous conseillons de supprimer les jeux de sélection dont que vous
n'utilisez plus. Utilisez la méthode Delete pour supprimer un jeu de sélection :
ThisDrawing.SelectionSets.Item("NewSelectionSet").Delete
Sub Ch4_CreateSelectionSet()
Dim selectionSet1 As AcadSelectionSet
Set selectionSet1 = ThisDrawing.SelectionSets. _
Add("NewSelectionSet")
End Sub
Vous pouvez ajouter des objets au jeu de sélection actif en utilisant l'une des méthodes suivantes :
AddItems
Ajoute un ou plusieurs objets au jeu de sélection spécifié.
Select
Sélectionne des objets et les place dans le jeu de sélection actif. Vous pouvez sélectionner tous les objets, des objets au sein ou croisant une zone
rectangulaire, des objets au sein ou croisant une zone polygone, tous les objets croisant un trajet, l'objet créé le plus récent, les objets du jeu de sélection le
plus récent, les objets au sein d'une fenêtre ou les objets au sein d'un polygone de fenêtre.
SelectAtPoint
Sélectionne des objets passant par un point donné et les place dans le jeu de sélection actif.
SelectByPolygon
Sélectionne des objets au sein d'un trajet et les ajoute au jeu de sélection actif.
SelectOnScreen
Invite l'utilisateur à sélectionner des objets à l'écran et les ajoute au jeu de sélection actif.
Dans cet exemple, l'utilisateur doit sélectionner des objets, puis les ajouter au jeu de sélection.
Sub Ch4_AddToASelectionSet()
' Create a new selection set
Dim sset As AcadSelectionSet
Set sset = ThisDrawing.SelectionSets.Add("SS1")
' Prompt the user to select objects
' and add them to the selection set.
' To finish selecting, press ENTREE.
sset.SelectOnScreen
End Sub
Vous pouvez limiter les jeux de sélection par propriété ou par type d'objet à l'aide de listes de filtre. Vous pouvez, par exemple, copier uniquement les objets
bleus d'un circuit imprimé ou uniquement les objets faisant partie du même calque. Vous pouvez également combiner les critères de sélection dans vos filtres.
Ainsi, vous pouvez demander à AutoCAD de n'inclure un objet dans un jeu de sélection que s'il s'agit d'un cercle bleu situé sur un calque spécifique. Les listes
de filtre peuvent être utilisées avec l es méthodes Select, SelectAtPoint, SelectByPolygon et SelectOnScreen.
Remarque Le filtrage reconnaît uniquement les types de ligne explicitement assignés aux objets, et non ceux hérités par le calque.
Utilisation de listes de filtre pour définir les règles des jeux de sélection
Utilisation de listes de filtre pour définir les règles des jeux de sélection
Les listes de filtre se composent de deux arguments. Le premier identifie le type du filtre (un objet, par exemple), le second spécifie la valeur sur laquelle vous
souhaitez effectuer le filtrage (les cercles, par exemple). Le type de filtre est un code de groupe DXF qui spécifie le filtre à utiliser. Certains types de filtres
courants sont répertoriés ici.
Pour connaître les codes de groupe DXF, reportez-vous à la section relative aux types de valeur de code de groupe dans le manuel Référence DXF .
Les arguments de filtres sont déclarés en tant que tableaux ("arrays"). Le type du filtre est déclaré comme entier, sa valeur comme variant. Tout type d e filtre
doit être combiné à une valeur. Par exemple :
Dans l'exemple suivant, l'utilisateur choisit les objets devant être inclus dans un jeu de sélection, mais seuls les cercles sont effectivement ajoutés :
Sub Ch4_FilterMtext()
Dim sstext As AcadSelectionSet
Dim FilterType(0) As Integer
Dim FilterData(0) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS2")
FilterType(0) = 0
FilterData(0) = "Circle"
sstext.SelectOnScreen FilterType, FilterData
End Sub
Pour spécifier plusieurs critères de sélection, déclarez un tableau composé de suffisamment d'éléments pour représenter tous les critères, p uis affectez chaque
critère à un élément.
Le code suivant spécifie deux critères : l'objet doit être un cercle et il doit résider sur le calque 0. Le code déclare FilterType et FilterData comme tableaux de
deux éléments et affecte chaque critère à un élément :
Sub Ch4_FilterBlueCircleOnLayer0()
Dim sstext As AcadSelectionSet
Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS4")
FilterType(0) = 0
FilterData(0) = "Circle"
FilterType(1) = 8
FilterData(1) = "0"
sstext.SelectOnScreen FilterType, FilterData
End Sub
Lorsque vous spécifiez plusieurs critères de sélection, AutoCAD suppose que l'objet sélectionné répond à chacun des critères. Il est cependant possible de
qualifier vos critères d'une autre façon. Dans le cas d'éléments numériques, vous pouvez spécifier des opérations relationnelles (par exemple, le rayon d'un
cercle devant être supérieur ou égal à 5). En outre, pour tous les éléments, vous pouvez utiliser des opérations logiques (par exemple, Text ou Mtext).
Utilisez un code -4 DXF pour placer un opérateur relationnel dans votre filtre. Cet opérateur est spécifié sous forme de chaîne. Le tableau qui suit indique q uels
sont les opérateurs relationnels autorisés.
Opérateurs relationnels utilisables dans les listes de filtre des jeux de sélection
Opérateur Description
"*" Tout est sélectionné (toujours vrai)
"=" Egal à
"!=" Différent de
"/=" Différent de
"<>" Différent de
"<" Inférieur à
">" Supérieur à
Les opérateurs logiques dans les listes de filtre sont également indiqués par un code de groupe –4, et l'opérateur est une chaîne, mais les opérateurs doivent
être groupés par paires. Le premier opérateur e st précédé du symbole d'infériorité (<), le second par le symbole de supériorité (> ). Le tableau qui suit dresse la
liste des opérateurs logiques que vous pouvez u tiliser pour filtrer les jeux de sélection.
de début final
"<AND" Un ou plusieurs opérandes "AND>"
"<OR" Un ou plusieurs opérandes "OR>"
"<XOR" Deux opérandes "XOR>"
"<NOT" Un opérande "NOT>"
L'exemple ci-dessous spécifie que l'objet sélectionné doit être un cercle de rayon au moins égal à 5 :
Sub Ch4_FilterRelational()
Dim sstext As AcadSelectionSet
Dim FilterType(2) As Integer
Dim FilterData(2) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS5")
FilterType(0) = 0
FilterData(0) = "Circle"
FilterType(1) = -4
FilterData(1) = ">="
FilterType(2) = 40
FilterData(2) = 5#
sstext.SelectOnScreen FilterType, FilterData
End Sub
Dans l'exemple suivant, seuls les objets Text ou Mtext peuvent être sélectionnés :
Sub Ch4_FilterOrTest()
Dim sstext As AcadSelectionSet
Dim FilterType(3) As Integer
Dim FilterData(3) As Variant
Set sstext = ThisDrawing.SelectionSets.Add("SS6")
FilterType(0) = -4
FilterData(0) = "<or"
FilterType(1) = 0
FilterData(1) = "TEXT"
FilterType(2) = 0
FilterData(2) = "MTEXT"
FilterType(3) = -4
FilterData(3) = "or>"
sstext.SelectOnScreen FilterType, FilterData
End Sub
Dans les listes de filtre, les noms de symboles et les chaînes peuvent contenir des caractères génériques.
Le tableau qui suit recense les caractères génériques reconnus par AutoCAD, ainsi que leur signification en contexte de chaîne :
Caractères génériques
Caractère Fonction
# (dièse) Représente un chiffre.
* (astérisque) Représente tout groupe de caractères, y compris un groupe vide, et peut être utilisé n'importe où dans la séquence de recherche : au début, au
milieu ou à la fin
? (point Représente tout caractère unique
d'interrogation)
~ (tilde) S'il s'agit du premier caractère de la séquence, représente tout SAUF la séquence.
[~...] Représente tout caractère unique non encadré par les crochets.
- (trait d'union) Placé entre crochets, représente une plage de valeurs pour un caractère unique.
` (guillemet inversé) Annule les caractères spéciaux (le caractère suivant est lu littéralement).
Utilisez l'apostrophe (`) lorsque vous souhaitez indiquer que l e caractère suivant n'est pas un caractère générique. Par exemple, pour indiquer que seul un bloc
anonyme appelé “*U2” doit être inclus dans la sélection, utilisez les arguments suivants :
FilterType(0) = 2
FilterData(0) = "`*U2"
Dans l'exemple suivant, les critères permettent de sélectionner tous les objets Mtext contenant le mot “Les”. En outre, la méthode de sélection SelectByPolygon
est utilisée.
Sub Ch4_FilterPolygonWildcard()
Dim sstext As AcadSelectionSet
Dim FilterType(1) As Integer
Dim FilterData(1) As Variant
Dim pointsArray(0 To 11) As Double
Dim mode As Integer
mode = acSelectionSetWindowPolygon
pointsArray(0) = -12#: pointsArray(1) = -7#: pointsArray(2) = 0
pointsArray(3) = -12#: pointsArray(4) = 10#: pointsArray(5) = 0
pointsArray(6) = 10#: pointsArray(7) = 10#: pointsArray(8) = 0
pointsArray(9) = 10#: pointsArray(10) = -7#: pointsArray(11) = 0
Set sstext = ThisDrawing.SelectionSets.Add("SS10")
FilterType(0) = 0
FilterData(0) = "MTEXT"
FilterType(1) = 1
FilterData(1) = "*Les*"
sstext.SelectByPolygon mode, pointsArray, FilterType, FilterData
End Sub
Les applications externes peuvent associer aux objets AutoCAD des données telles que des chaînes de t exte, des valeurs numériques, des points 3D, des
distances et des noms de calques. Ces données sont appelées "données étendues" (xdata). Il est possible de filtrer les entités contenant ces données étendues
pour une application précise.
Reportez-vous à la section Filtrage des données étendues pour de plus amples informations sur ce type de données.
L'exemple suivant permet de filtrer les cercles contenant des données étendues ajoutées par l'application “MY_APP” :
Sub Ch4_FilterXdata()
Dim sstext As AcadSelectionSet
Dim mode As Integer
Dim pointsArray(0 To 11) As Double
mode = acSelectionSetWindowPolygon
pointsArray(0) = -12#: pointsArray(1) = -7#: pointsArray(2) = 0
pointsArray(3) = -12#: pointsArray(4) = 10#: pointsArray(5) = 0
pointsArray(6) = 10#: pointsArray(7) = 10#: pointsArray(8) = 0
pointsArray(9) = 10#: pointsArray(10) = -7#: pointsArray(11) = 0
Si vous devez faire référence à un jeu de sélection dont vous connaissez le nom, vous pouvez le faire en utilisant ce nom. L'exemple suivant fait référence au
jeu de sélection “SS10”
Sub GetObjInSet()
Dim selset As AcadSelectionSet
Set selset = ThisDrawing.SelectionSets("SS10")
MsgBox ("Selection set " & selset.Name & " contains " & _
selset.Count & " items")
End Sub
Tous les jeux de sélection d'un dessin sont des membres de la collection SelectionSets Vous pouvez utiliser l'instruction For Each pour parcourir la collection
SelectionSets d'un dessin afin de recueillir des informations sur tous les jeux de sélection.
L'exemple suivant affiche le nom de tous les jeux de sélection d'un dessin et indique le type des objets contenus dans chacun :
Sub ListSelectionSets()
Dim selsetCollection As AcadSelectionSets
Dim selset As AcadSelectionSet
Dim ent As Object
Dim i, j As Integer
Set selsetCollection = ThisDrawing.SelectionSets
' Find each selection set in the drawing
i = 0
For Each selset In selsetCollection
MsgBox "Selection set " & CStr(i) & " is: " & selset.Name
' Now find each object in the selection set, and say what it is
j = 0
For Each ent In selset
MsgBox "Item " & CStr(j + 1) & " in " & selset.Name _
& "is: " & ent.EntityName
j = j + 1
Suivant
i = i + 1
Suivant
End Sub
Une fois un jeu de sélection créé, vous pouvez décider de supprimer des objets individuels ou l'ensemble des objets de ce jeu. Par exemple, vous p ouvez
sélectionner un groupe entier d'objets groupés par densité et supprimer des objets spécifiques au sein du groupe, en conservant uniquement les objets
souhaités dans le jeu.
Pour supprimer des éléments d'un jeu de sélection, utilisez l'une des méthodes suivantes :
RemoveItems
La méthode RemoveItems supprime un ou plusieurs éléments d'un jeu de sélection. Les éléments supprimés existent toujours mais ne résident plus dans le
jeu de sélection.
Clear
La méthode Clear vide le jeu de sélection. Le jeu de sélection existe toujours mais ne contient aucun élément. Les éléments qui résidaient précédemment
dans le jeu de sélection existent toujours mais sont désormais absents de ce dernier.
Erase
La méthode Erase supprime tous les éléments dans le jeu de sélection. Le jeu de sélection existe toujours mais ne contient aucun élément. Les éléments qui
résidaient précédemment dans le jeu de sélection n'existent p lus.
Delete
La méthode Delete supprime un jeu d e sélection et tous les éléments qu'il contient. Une fois la méthode Delete appelée, le jeu de sélection et les éléments
qu'il contenait précédemment n'existent plus.
Modification d'objets
Pour modifier un objet existant, utilisez les méthodes et propriétés qui lui sont associées. Si vous modifiez une propriété visible d'u n objet graphique, utilisez la
méthode Update pour redessiner l'objet à l'écran.
Copie d'objets
Déplacement d'objets
Suppression d'objets
Transformation d'objets
Modification de hachures
En plus des objets graphiques utilisés par AutoCAD, il existe plusieurs types d'objets non graphiques stockés dans les fichiers dessin. Ces objets possèdent
une désignation descriptive associée tels que des blocs, calques, groupes et styles de cote. Dans la plupart des cas, vous nommez les objets lorsque vous les
créez, puis vous les renommez ultérieurement. Les noms sont stockés dans des tables de symboles. Lorsque vous spécifiez un objet nommé, vous faites
référence au nom et aux données associées de l'objet dans la table de symboles.
Au cours d'une session de modification, vous pouvez supprimer d'un dessin les objets nommés auxquels aucun autre objet ne fait ré férence. Cette opération
offre l'avantage de réduire la taille du fichier dessin. Il est impossible de supprimer des objets référencés par d'autres. Par exemple, un fichier police peut être lié
à un style de texte. De même, un calque est référencé par les objets du calque.
ThisDrawing.PurgeAll
Lorsque le dessin devient plus complexe, vous pouvez modifier le nom des objets pour qu'il soit plus explicite ou pour éviter tout conflit avec les noms contenus
dans d'autres dessins que vous avez insérés dans le dessin principal.
Vous pouvez renommer tout objet nommé à l'exception de ceux nommés par défaut par AutoCAD (par exemple, le calque 0 ou le type de ligne CONTINUOUS).
Les noms peuvent contenir 255 caractères. Outre les lettres et les chiffres, vous pouvez insérer des espaces (bien qu'AutoCAD supprime les espaces q ui
apparaissent directement avant et après un nom) et des caractères spéciaux non utilisés à d'autres fins par Microsoft Windows ou AutoCAD. Vous ne pouvez
pas utiliser les symboles de supériorité et d'infériorité (< >), les barres obliques et les barres obliques inversées (/ \), les guillemets ("), les deux-points (:), les
points-virgule (;), les points d'interrogation (?), les virgules (,), les astérisques (*), les barres verticales (| ), les signes d'égalité (=) et les apostrophes ('). Il n'est
pas possible non plus d'utiliser des caractères spéciaux créés avec les polices Unicode.
Sub Ch4_RenamingLayer()
' Create a layer
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("NewLayer")
' Change the name of the layer
layerObj.Name = "MyLayer"
End Sub
Copie d'objets
Vous pouvez copier un ou plusieurs objets au sein du dessin courant. La fonction de décalage permet de créer des objets à une distance et dans une direction
données des objets sélectionnés, ou par rapport à un point donné. La fonction de copie-miroir permet de reproduire le même objet en fonction d'un axe de
symétrie. La fonction de copie en réseau permet de disposer les différents exemplaires en forme de cercle ou de rectangle.
Pour de plus amples informations sur la copie des objets, reportez-vous à la section “Copie, décalage et reproduction en miroir des o bjets” du Manuel
d'utilisation .
Remarque Aucune des méthodes de copie suivantes n'est disponible lors de l'itération simultanée dans une collection. Une itération ouvre l'espace de travail
pour une opération en lecture seule, alors que ces méthodes tentent d'effectuer une opération de type écriture-lecture. Terminez toute itération d'une collection
avant d'appeler ces méthodes.
Pour copier un seul objet, utilisez la méthode Copy fournie pour cet objet. Cette méthode crée un nouvel objet qui est un duplicata de l'objet source. Le nouvel
objet est placé à la même position que l'original et est renvoyé par la méthode.
Pour copier plusieurs objets, faites appel à la méthode CopyObjects ou créez un réseau des objets à utiliser avec la méthode Copy (Pour copier les objets dans
un jeu de sélection, itérez via le jeu de sélection et enregistrez les objets dans un réseau.) Itérez via le réseau en copiant chaque objet individuellement et
placez les objets créés dans un deuxième réseau.
Pour copier plusieurs objets dans un autre dessin, utilisez la méthode CopyObjects et définissez le paramètre Propriétaire sur l'espace objet du dessin.
Dans cet exemple, l'utilisateur crée deux cercles et fait appel à la méthode CopyObjets pour en faire une copie.
Sub Ch4_CopyCircleObjects()
Dim DOC1 As AcadDocument
Dim circleObj1 As AcadCircle
Dim circleObj2 As AcadCircle
Dim circleObj1Copy As AcadCircle
Dim circleObj2Copy As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius1 As Double
Dim radius2 As Double
Dim radius1Copy As Double
Dim radius2Copy As Double
Dim objCollection(0 To 1) As Object
Dim retObjects As Variant
' Define the Circle object
centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
radius1 = 5#: radius2 = 7#
radius1Copy = 1#: radius2Copy = 2#
' Create a new drawing
Set DOC1 = ThisDrawing.Application.Documents.Add
' Add two circles to the drawing
Set circleObj1 = DOC1.ModelSpace.AddCircle _
(centerPoint, radius1)
Set circleObj2 = DOC1.ModelSpace.AddCircle _
(centerPoint, radius2)
ZoomAll
' Put the objects to be copied into a form
' compatible with CopyObjects
Set objCollection(0) = circleObj1
Set objCollection(1) = circleObj2
' Copy object and get back a collection of
' the new objects (copies)
retObjects = DOC1.CopyObjects(objCollection)
' Get newly created object and apply
' new properties to the copies
Set circleObj1Copy = retObjects(0)
Set circleObj2Copy = retObjects(1)
circleObj1Copy.radius = radius1Copy
circleObj1Copy.Color = acRed
circleObj2Copy.radius = radius2Copy
circleObj2Copy.Color = acRed
ZoomAll
End Sub
Dans cet exemple, l'utilisateur crée des cercles, puis fait appel à la méthode CopyObjects pour les copier dans un nouveau dessin.
Sub Ch4_Copy_to_New_Drawing()
Dim DOC0 As AcadDocument
Dim circleObj1 As AcadCircle, circleObj2 As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius1 As Double, radius2 As Double
Dim radius1Copy As Double, radius2Copy As Double
Dim objCollection(0 To 1) As Object
Dim retObjects As Variant
' Define the Circle object
centerPoint(0) = 0: centerPoint(1) = 0: centerPoint(2) = 0
radius1 = 5#: radius2 = 7#
radius1Copy = 1#: radius2Copy = 2#
' Add two circles to the current drawing
Set circleObj1 = ThisDrawing.ModelSpace.AddCircle _
(centerPoint, radius1)
Set circleObj2 = ThisDrawing.ModelSpace.AddCircle _
(centerPoint, radius2)
ThisDrawing.Application.ZoomAll
' Save pointer to the current drawing
Set DOC0 = ThisDrawing.Application.ActiveDocument
' Copy objects
'
' First put the objects to be copied into a form compatible
' with CopyObjects
Set objCollection(0) = circleObj1
Set objCollection(1) = circleObj2
' Create a new drawing and point to its model space
Dim Doc1MSpace As AcadModelSpace
Dim DOC1 As AcadDocument
Le décalage d'un objet crée un nouvel objet à la distance de décalage spécifiée de l'objet source. Vous pouvez décaler des arcs, cercles, ellipses, lignes,
polylignes fines, polylignes, splines et droites.
Pour décaler un objet, utilisez la méthode Offset fournie pour cet objet. La seule entrée requise par cette méthode est la distance de décalage de l'objet. Si cette
distance est négative, elle est interprétée par AutoCAD en tant que décalage destiné à rendre une courbe “plus petite” (ce qui, dans le cas d'un arc, décale un
rayon égal à la distance donnée moins le rayon de la courbe de départ). Si “plus petite” n'a aucune signification, AutoCAD effectue un décalage dans la
direction des coordonnées X, Y, Z les plus faibles du SCG. Si la valeur du décalage n'est pas valide, une erreur est renvoyée.
Dans le cas de plusieurs objets, le résultat de cette opération sera une nouvelle courbe unique (dont le type peut être différent de la courbe source). Par
exemple, le décalage d'une ellipse résulte en une spline car le résultat correspond à l'équation d'une ellipse. Dans certains cas, il peut s'avérer nécessaire que
le décalage résulte en plusieurs courbes. C'est pourquoi, la méthode renvoie le nouvel objet, ou un réseau d'objets, en tant que variant.
Pour de plus amples informations sur le décalage des objets, reportez-vous à la section “Copie, décalage et reproduction en miroir des objets” du Manuel
d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine qu'il décale ensuite.
Sub Ch4_OffsetPolyline()
' Create the polyline
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
' Offset the polyline
Dim offsetObj As Variant
offsetObj = plineObj.Offset(0.25)
ZoomAll
End Sub
La copie-miroir crée une copie miroir de l'image d'un objet autour d'un axe (ligne de symétrie). Vous pouvez effectuer une copie-miroir de tous les objets d'un
dessin.
Pour effectuer une copie-miroir d'un objet, utilisez la méthode Mirror fournie pour cet objet. Cette méthode requiert la saisie de deux coordonnées. Les deux
coordonnées spécifiées deviennent les extrémités de la ligne de symétrie autour de laquelle l'objet de base est réfléchi. En 3D, cette ligne définit l'orientation
d'un plan miroir perpendiculaire au plan XY du SCU qui contient la ligne de symétrie.
A la différence de la commande Miroir d'AutoCAD, cette méthode place l'image réfléchie dans le dessin et conserve l'objet source. (Pour supprimer l'objet
source, utilisez la méthode Erase.
Pour gérer les propriétés de réflexion des objets Text, utilisez la variable système MIRRTEXT. La valeur par défaut de MIRRTEXT est 1 (actif) : les objets texte
sont répétés comme les autres objets. Si la variable MIRRTEXT est désactivée (0), le texte n'est pas répété. Utilisez les méthodes GetVariable et SetVariable
pour interroger et définir le paramètre MIRRTEXT.
Vous pouvez refléter un objet Viewport dans l'espace papier, bien que ceci n'ait aucun effet sur la vue en espace objet ou sur les objets de l'espace objet.
Pour de plus amples informations sur la création de copies-miroirs d'objets, reportez-vous à la section “Copie, décalage et reproduction en miroir des objets” du
Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine dont il fait une copie-miroir par rapport à un axe. La nouvelle polyligne apparaît en bleu.
Sub Ch4_MirrorPolyline()
' Create the polyline
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
' Define the mirror axis
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 4.25: point1(2) = 0
point2(0) = 4: point2(1) = 4.25: point2(2) = 0
' Mirror the polyline
Dim mirrorObj As AcadLWPolyline
Set mirrorObj = plineObj.Mirror(point1, point2)
Dim col As New AcadAcCmColor
Call col.SetRGB(125, 175, 235)
mirrorObj.TrueColor = col
ZoomAll
End Sub
Vous pouvez copier un objet sous forme de réseau polaire ou rectangulaire. Dans l e cas d'un réseau polaire, vous devez indiquer le nombre de copies souhaité
et l'angle de référence. Pour créer un réseau rectangulaire, il suffit de préciser le nombre de rangées et de colonnes voulues et de spécifier la distance qui les
sépare les unes des autres.
Pour de plus amples informations sur les réseaux, reportez-vous à la section “Création d'un réseau d'objets” du Manuel d'utilisation .
Vous pouvez copier en réseau tous les objets d'un dessin. Pour créer un réseau polaire, utilisez la méthode ArrayPolar fournie pour cet objet. Cette méthode
requiert la saisie du nombre d'objets à créer, de l'angle à décrire et du centre du réseau. Le nombre d'objets doit être un nombre entier positif supérieur à 1.
L'angle à décrire doit être exprimé en radians. Une valeur positive indique une rotation trigonométrique, tandis qu'une valeur négative indique une rotation
horaire. Une erreur est renvoyée pour un angle égal à 0. Le centre est un tableau de type Variant qui contient trois coordonnées doubles. Ces coordonnées
doubles représentent les coordonnées SCG 3D qui spécifient le centre du réseau polaire.
AutoCAD détermine la distance du centre du réseau à un point de référence sur l'objet source. Le point de référence utilisé dépend du type d'objet. AutoCAD
utilise le centre d'un cercle ou d'un arc, le point d'insertion d'un bloc ou d'une forme, le point de départ d'un texte et l'extrémité d'une ligne ou d'un tracé.
Cette méthode ne prend pas en charge l'option Rotation des objets en réseau de la commande RESEAU d'AutoCAD.
Cet exemple crée un cercle auquel il applique un réseau polaire. Vous obtenez alors quatre cercles couvrant 180 degrés à partir du centre (4, 4, 0).
Sub Ch4_ArrayingACircle()
' Create the circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
ZoomAll
' Define the polar array
Dim noOfObjects As Integer
Dim angleToFill As Double
Dim basePnt(0 To 2) As Double
noOfObjects = 4
angleToFill = 3.14 ' 180 degrees
basePnt(0) = 4#: basePnt(1) = 4#: basePnt(2) = 0#
' The following example will create 4 copies
' of an object by rotating and copying it about
' the point (3,3,0).
Dim retObj As Variant
retObj = circleObj.ArrayPolar _
(noOfObjects, angleToFill, basePnt)
ZoomAll
End Sub
Pour créer un réseau rectangulaire 2D ou 3D, utilisez la méthode ArrayRectangular fournie pour cet objet. Cette méthode requiert la saisie du nombre de lignes,
du nombre de colonnes, de la distance entre les lignes et de la distance entre les colonnes. Lors de la création d'un réseau 3 D, vous devez également spécifier
le nombre de niveaux ainsi que la distance entre les niveaux.
Pour construire un réseau rectangulaire, il suffit de copier l'objet sélectionné le nombre de fois requis. Si vous spécifiez une rangée, vous devez spécifier
plusieurs colonnes et inversement.
En principe, l'élément source se trouve dans le coin inférieur gauche et le réseau est généré vers le haut et la droite. Si la distance entre les lignes est négative,
les lignes sont ajoutées vers le bas. De même, si la distance entre les colonnes est négative, les colonnes sont ajoutées à gauche.
AutoCAD construit le réseau rectangulaire suivant une ligne de base définie par l'angle de rotation appliqué au mode d'accrochage. Cet angle étant de 0 par
défaut, les lignes et colonnes d'un réseau rectangulaire sont orthogonales aux axes du dessin X et Y . Vous pouvez modifier cet angle et créer un réseau pivoté
en définissant l'angle de rotation d'accrochage sur une valeur non nulle. Pour ce faire, utilisez la propriété SnapRotationAngle.
Dans cet exemple, l'utilisateur crée un cercle auquel il applique un réseau rectangulaire en créant 5 rangées et 5 colonnes de cercles.
Sub Ch4_ArrayRectangularExample()
' Create the circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
ZoomAll
' Define the rectangular array
Dim numberOfRows As Long
Dim numberOfColumns As Long
Dim numberOfLevels As Long
Dim distanceBwtnRows As Double
Dim distanceBwtnColumns As Double
Dim distanceBwtnLevels As Double
numberOfRows = 5
numberOfColumns = 5
numberOfLevels = 2
distanceBwtnRows = 1
distanceBwtnColumns = 1
distanceBwtnLevels = 1
' Create the array of objects
Dim retObj As Variant
retObj = circleObj.ArrayRectangular _
(numberOfRows, numberOfColumns, numberOfLevels, _
distanceBwtnRows, distanceBwtnColumns, distanceBwtnLevels)
ZoomAll
End Sub
Déplacement d'objets
Vous pouvez déplacer des objets le long d'un vecteur sans modifier leur orientation ni leur taille. Vous pouvez également faire pivoter des objets autour d'un
point de base.
Pour de plus amples informations sur le déplacement d'objets, reportez-vous à la section “Déplacement d'objets” du Manuel d'utilisation .
Vous pouvez déplacer tous les objets d'un dessin et les objets de référence d'attribut le long d'un vecteur spécifié.
Pour déplacer un objet, utilisez la méthode Move fournie pour cet objet. Cette méthode requiert la saisie de deux coordonnées. Ces coordonnées définissent un
vecteur de déplacement qui indique la distance et la direction du déplacement de l'objet.
Déplacement d'un cercle sur un vecteur
Dans cet exemple, l'utilisateur crée un cercle qu'il déplace de 2 unités le long de l'axe X .
Sub Ch4_MoveCircle()
' Create the circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2#: center(1) = 2#: center(2) = 0#
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
ZoomAll
' Define the points that make up the move vector.
' The move vector will move the circle 2 units
' along the x axis.
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
point1(0) = 0: point1(1) = 0: point1(2) = 0
point2(0) = 2: point2(1) = 0: point2(2) = 0
' Move the circle
circleObj.Move point1, point2
circleObj.Update
End Sub
Vous pouvez faire pivoter tous les objets d'un dessin et les objets de référence d'attribut.
Pour faire pivoter un objet, utilisez la méthode Rotate fournie pour cet objet. Cette méthode requiert la saisie d'un point de base et d'un angle de rotation. Le
point de base est un tableau de type Variant avec trois coordonnées doubles. Ces coordonnées doubles représentent une coordonnée SCG 3D qui spécifie le
point au travers duquel est défini l'axe de rotation. L'angle de rotation est exprimé en radians. Il détermine la distance de rotation d'un objet autour du point de
base par rapport à son e mplacement actuel.
Pour de plus amples informations sur la rotation des objets, reportez-vous à la section “Rotation des objets” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine fermée qu'il fait pivoter de 45 degrés le long du point de base (4, 4.25, 0).
Sub Ch4_RotatePolyline()
' Create the polyline
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 2
points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
plineObj.Closed = True
ZoomAll
' Define the rotation of 45 degrees about a
' base point of (4, 4.25, 0)
Dim basePoint(0 To 2) As Double
Dim rotationAngle As Double
basePoint(0) = 4: basePoint(1) = 4.25: basePoint(2) = 0
Suppression d'objets
Vous pouvez supprimer des objets individuels à l' aide de la méthode Delete
Remarque Les objets Collection dans l'automatisation ActiveX possèdent une méthode Delete en raison de la manière dont ils ont été définis dans la
bibliothèque de type. Toutefois, les objets Collection, tels que les collections ModelSpace, Layers et Dictionaries, ne doivent pas être supprimés. La tentative de
suppression d'une collection entraîne une erreur.
Dans cet exemple, l'utilisateur crée une polyligne fine, puis la supprime.
Sub Ch4_DeletePolyline()
' Create the polyline
Dim lwpolyObj As AcadLWPolyline
Dim vertices(0 To 5) As Double
vertices(0) = 2: vertices(1) = 4
vertices(2) = 4: vertices(3) = 2
vertices(4) = 6: vertices(5) = 4
Set lwpolyObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(vertices)
ZoomAll
' Erase the polyline
lwpolyObj.Delete
ThisDrawing.Regen acActiveViewport
End Sub
Vous pouvez mettre à l'échelle un objet en spécifiant un point de base et une longueur utilisée en tant que facteur d'échelle basé sur les unités de dessin
actuelles. Vous pouvez mettre à l'échelle tous les objets d'un dessin ainsi que les objets de référence d'attribut.
Pour modifier l'échelle d'un objet, utilisez la méthode ScaleEntity fournie pour cet objet. Cette méthode modifie les dimensions de l'objet de façon homothétique
sur les axes X , Y et Z . Elle requiert la saisie du point de base pour l'échelle et un facteur d'échelle. Le point de base est un tableau de type Variant avec trois
coordonnées doubles. Ces coordonnées doubles représentent une coordonnée SCG 3D qui spécifie le point à partir duquel l'échelle commence. Le facteur
d'échelle est le facteur de mise à l'échelle de l'objet. Les cotes de l'objet sont multipliées par le facteur d'échelle. Un facteur d'échelle supérieur à 1 agrandit
l'objet. Un facteur d'échelle compris entre 0 et 1 le réduit.
Pour de plus amples informations sur la mise à l'échelle, reportez-vous à la section “Modification de la taille ou de la forme des objets” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine fermée qu'il met à l'échelle selon un facteur de 0.5.
Sub Ch4_ScalePolyline()
' Create the polyline
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
points(0) = 1: points(1) = 2
points(2) = 1: points(3) = 3
points(4) = 2: points(5) = 3
points(6) = 3: points(7) = 3
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 2
Transformation d'objets
Vous pouvez déplacer, mettre à l'échelle et faire pivoter un objet avec une matrice de transformation 4 x 4 à l'aide de la méthode TransformBy.
Pour transformer un objet, initialisez d'abord la matrice de transformation. L'exemple suivant présente une matrice de transformation, attribuée à la variable
tMatrix, qui fait pivoter une entité de 90 degrés par rapport au point (0, 0, 0):
tMatrix(0,0) = 0.0
tMatrix(0,1) = -1.0
tMatrix(0,2) = 0.0
tMatrix(0,3) = 0.0
tMatrix(1,0) = 1.0
tMatrix(1,1) = 0.0
tMatrix(1,2) = 0.0
tMatrix(1,3) = 0.0
tMatrix(2,0) = 0.0
tMatrix(2,1) = 0.0
tMatrix(2,2) = 1.0
tMatrix(2,3) = 0.0
tMatrix(3,0) = 0.0
tMatrix(3,1) = 0.0
tMatrix(3,2) = 0.0
tMatrix(3,3) = 1.0
Une fois la matrice de transformation créée, appliquez-la à l'objet à l'aide de la méthode TransformBy. La ligne de code suivante présente l'application d'une
matrice ( tMatrix) à un objet ( anObj):
anObj.TransformBy tMatrix
Dans cet exemple, l'utilisateur crée une ligne qu'il fait pivoter de 90 degrés en utilisant une matrice de transformation.
Sub Ch4_TransformBy()
' Create a line
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double
Dim endPt(0 To 2) As Double
startPt(0) = 2
startPt(1) = 1
startPt(2) = 0
endPt(0) = 5
endPt(1) = 1
endPt(2) = 0
Set lineObj = ThisDrawing.ModelSpace. _
AddLine(startPt, endPt)
ZoomAll
' Initialize the transMat variable with a
' transformation matrix that will rotate
' an object by 90 degrees about the point(0,0,0)
Dim transMat(0 To 3, 0 To 3) As Double
transMat(0, 0) = 0#: transMat(0, 1) = -1#
transMat(0, 2) = 0#: transMat(0, 3) = 0#
transMat(1, 0) = 1#: transMat(1, 1) = 0#
transMat(1, 2) = 0#: transMat(1, 3) = 0#
Vous pouvez modifier la longueur des objets (lignes ouvertes, arcs de cercle, polylignes ouvertes, arcs e lliptiques et splines ouvertes) et l'angle décrit par les
arcs. Vous obtenez ainsi des résultats similaires à l'application des commandes permettant de prolonger ou d'ajuster les objets.
Vous pouvez prolonger ou ajuster un objet en modifiant ses propriétés. Par exemple, pour allonger une ligne, modifiez les coordonnées de la propriété
StartPoint ou EndPoint. Pour modifier l'angle d'un arc, modifiez la propriété StartAngle ou EndAngle de l'arc. Une fois que vous avez modifié une ou plusieurs
propriétés d'un objet, utilisez la méthode Update pour visualiser vos modifications dans le dessin.
Pour de plus amples informations sur le prolongement et l'ajustement d'objets, reportez-vous à la section “Modification de l a taille ou de la forme des objets” du
Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une ligne dont il modifie l'extrémité pour obtenir une ligne plus longue.
Sub Ch4_LengthenLine()
' Define and create the line
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 0
startPoint(1) = 0
startPoint(2) = 0
endPoint(0) = 1
endPoint(1) = 1
endPoint(2) = 1
Set lineObj = ThisDrawing.ModelSpace. _
AddLine(startPoint, endPoint)
lineObj.Update
' Lengthen the line by changing the
' endpoint to 4, 4, 4
endPoint(0) = 4
endPoint(1) = 4
endPoint(2) = 4
lineObj.endPoint = endPoint
lineObj.Update
End Sub
Cette fonction permet de séparer les différents éléments qui constituent les objets sans que leur décomposition soit visible à l'écran. Vous pouvez, par exemple,
décomposer des lignes simples et des arcs à partir de polygones 3D, de polylignes, de maillages et de ré gions. La décomposition remplace une référence de
bloc par des copies des objets simples qui composent ce bloc.
Pour de plus amples informations sur la décomposition des objets, reportez-vous à la section “Dissociation des objets composés (Décomposer)” du Manuel
d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine. Ensuite, il la décompose en objets distincts. L'exemple est alors répété pour les objets résultants, et une
boîte de message s'affiche avec le nom de chaque objet et son index dans la liste des objets décomposés.
Sub Ch4_ExplodePolyline()
Dim plineObj As AcadLWPolyline
Dim points(0 To 11) As Double
' Define the 2D polyline points
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
points(10) = 4: points(11) = 1
' Create a light weight Polyline object
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
' Set the bulge on one segment to vary the
' type of objects in the polyline
plineObj.SetBulge 3, -0.5
plineObj.Update
' Explode the polyline
Dim explodedObjects As Variant
explodedObjects = plineObj.Explode
' Loop through the exploded objects
' and display a message box with
' the type of each object
Dim I As Integer
For I = 0 To UBound(explodedObjects)
explodedObjects(I).Update
MsgBox "Exploded Object " & I & ": " & _
explodedObjects(I).ObjectName
explodedObjects(I).Update
Suivant
End Sub
Les polylignes 2D et 3D, les rectangles, les polygones et les maillages 3D font partie de la famille des polylignes et peuvent donc être modifiés de la même
manière.
AutoCAD reconnaît les polylignes et les polylignes de type spline. Une polyligne de type spline utilise une courbe similaire à une courbe B-spline. Il existe deux
types de polylignes de type spline : quadratiques et cubiques. Ces deux polylignes sont gérées par la variable système SPLINETYPE. Une polyligne utilise des
courbes standard pour le lissage et adopte des directions de tangentes quelconques définies en fonction d'un sommet donné.
Pour modifier une polyligne, utilisez les propriétés et méthodes de l'objet LightweightPolyline ou Polyline Utilisez les propriétés suivantes pour ouvrir ou fermer
une polyligne, modifier les coordonnées d'un sommet de polyligne ou ajouter un sommet:
Closed, propriété
Ouvre ou ferme la polyligne.
Coordinates, propriété
Utilisez les méthodes suivantes pour mettre à jour la courbure ou la largeur d'une polyligne :
SetBulge
Définit la courbure d'une polyligne, suivant l'index de segment.
SetWidth
Définit le début et la fin d'une polyligne, suivant l'index de segment.
Pour de plus amples informations sur la modification des polylignes, reportez-vous à la section “Modification ou jonction des polylignes” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une polyligne fine. Il ajoute ensuite une courbure au troisième segment de la polyligne, ajoute un sommet à la polyligne,
modifie la largeur du dernier segment et referme la polyligne.
Sub Ch4_EditPolyline()
Dim plineObj As AcadLWPolyline
Dim points(0 To 9) As Double
' Define the 2D polyline points
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 2
points(8) = 4: points(9) = 4
' Create a light weight Polyline object
Set plineObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
' Add a bulge to segment 3
plineObj.SetBulge 3, -0.5
' Define the new vertex
Dim newVertex(0 To 1) As Double
newVertex(0) = 4: newVertex(1) = 1
' Add the vertex to the polyline
plineObj.AddVertex 5, newVertex
' Set the width of the new segment
plineObj.SetWidth 4, 0.1, 0.5
' Close the polyline
plineObj.Closed = True
plineObj.Update
End Sub
ControlPoints
Spécifie les points de contrôle d'une spline.
EndTangent
Spécifie la tangente de fin de la spline en tant que vecteur directionnel.
FitPoints
Spécifie tous les points de contrôle d'une spline.
FitTolerance
Lisse à nouveau la spline sur les points existants, avec de nouvelles valeurs de tolérance.
Knots
Spécifie les vecteurs de noeuds de l a spline.
StartTangent
Spécifie la tangente de début de la spline.
Vous pouvez également utiliser les méthodes suivantes pour modifier les splines:
AddFitPoint
Ajoute un point de lissage sur la spline à un index donné.
DeleteFitPoint
Supprime le point de lissage d'une spline à un index donné.
ElevateOrder
Elève l'ordre de la spline à l'ordre donné.
GetFitPoint
Obtient le point de lissage d'une spline à un index donné. (Obtient un seul point de lissage. Pour interroger tous les points de lissage de la spline, utilisez la
propriété FitPoints.)
Reverse
Inverse la direction d'une spline.
SetControlPoint
Définit le point de contrôle de la spline à un index donné.
SetFitPoint
Définit le point de lissage de la spline à un index donné. (Définit un seul point de lissage. Pour modifier tous les points de lissage de la spline, utilisez la
propriété FitPoints.)
SetWeight
Définit le poids du point de contrôle à un index donné.
Utilisez les propriétés en lecture seule suivantes pour interroger les splines :
Area
Définit la zone fermée d'une spline.
Closed
Indique si la spline est ouverte ou fermée.
Degré
Obtient le degré de la représentation du polynôme de la spline.
IsPeriodic
Indique si la spline spécifiée est périodique.
IsPlanar
Indique si la spline spécifiée est planaire.
IsRational
Indique si la spline spécifiée est rationnelle.
NumberOfControlPoints
Obtient le nombre de points de contrôle de la spline.
NumberOfFitPoints
Obtient le nombre de points de lissage de la spline.
Pour de plus amples informations sur la modification des splines, reportez-vous à la section “Modification des splines” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée une spline dont il modifie le premier point de contrôle.
Sub Ch4_ChangeSplineControlPoint()
' Create the spline
Dim splineObj As AcadSpline
Dim startTan(0 To 2) As Double
Dim endTan(0 To 2) As Double
Dim fitPoints(0 To 8) As Double
startTan(0) = 0.5: startTan(1) = 0.5: startTan(2) = 0
endTan(0) = 0.5: endTan(1) = 0.5: endTan(2) = 0
fitPoints(0) = 1: fitPoints(1) = 1: fitPoints(2) = 0
fitPoints(3) = 5: fitPoints(4) = 5: fitPoints(5) = 0
fitPoints(6) = 10: fitPoints(7) = 0: fitPoints(8) = 0
Set splineObj = ThisDrawing.ModelSpace. _
AddSpline(fitPoints, startTan, endTan)
splineObj.Update
' Change the coordinate of the first fit point
Dim controlPoint(0 To 2) As Double
controlPoint(0) = 0
controlPoint(1) = 3
controlPoint(2) = 0
splineObj.SetControlPoint 0, controlPoint
splineObj.Update
End Sub
Modification de hachures
Vous pouvez modifier aussi bien les contours q ue les motifs de hachures. S'il s'agit de hachures associatives, elles s'adaptent automatiquement au contour de
la zone à condition que les changements effectués figurent dans un contour approprié. Les hachures associatives s'adaptent au contour même si elles figurent
sur des calques désactivés. Vous pouvez modifier les motifs de hachure ou appliquer un nouveau motif à une zone hachurée, mais l'associativité peut
uniquement être définie lors de la création d'une hachure. Vous pouvez savoir si un objet Hatch est associatif en utilisant la propriété AssociativeHatch (Pour de
plus amples informations sur la création d'une hachure, reportez-vous à la méthode AddHatch
Vous devez réévaluer une hachure en utilisant l a méthode Evaluate afin de visualiser toutes l es modifications apportées à la hachure.
Pour de plus amples informations sur la modification des hachures, reportez-vous à la section “Modification des zones hachurées et des zones de remplissage
plein” du Manuel d'utilisation .
Vous pouvez ajouter ou insérer des boucles dans les contours de hachures. Les hachures associatives sont mises à jour en fonction des modifications
apportées à leur contour. En revanche, les hachures non associatives ne tiennent pas compte de ces changements.
AppendInnerLoop
Ajoute une boucle interne à la hachure.
AppendOuterLoop
Ajoute une boucle externe à la hachure.
InsertLoopAt
Insère une boucle à un index donné d'une hachure.
Dans cet exemple, l'utilisateur crée une hachure a ssociative. Il crée ensuite un cercle qu'il ajoute à la hachure comme boucle interne.
Sub Ch4_AppendInnerLoopToHatch()
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Define and create the hatch
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
Set hatchObj = ThisDrawing.ModelSpace. _
AddHatch(PatternType, patternName, bAssociativity)
' Create the outer loop for the hatch.
Dim outerLoop(0 To 1) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
Dim startAngle As Double
Dim endAngle As Double
center(0) = 5: center(1) = 3: center(2) = 0
radius = 3
startAngle = 0
endAngle = 3.141592
Set outerLoop(0) = ThisDrawing.ModelSpace. _
AddArc(center, radius, startAngle, endAngle)
Set outerLoop(1) = ThisDrawing.ModelSpace. _
AddLine(outerLoop(0).startPoint, outerLoop(0).endPoint)
' Append the outer loop to the hatch object
hatchObj.AppendOuterLoop (outerLoop)
' Create a circle as the inner loop for the hatch.
Dim innerLoop(0) As AcadEntity
center(0) = 5: center(1) = 4.5: center(2) = 0
radius = 1
Set innerLoop(0) = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
' Append the circle as an inner loop to the hatch
hatchObj.AppendInnerLoop (innerLoop)
' Evaluate and display the hatch
hatchObj.Evaluate
ThisDrawing.Regen True
End Sub
Vous pouvez modifier l'orientation et l'espacement d'un motif de hachures ou le remplacer par un objet plein ou un des motifs prédéfinis dans AutoCAD. Dans la
boîte de dialogue Hachures de contour, si vous cliquez sur le bouton Motif, une liste de motifs s'affiche. Pour réduire la taille des fichiers, la hachure est définie
dans un dessin comme un seul objet graphique.
Utilisez les propriétés et méthodes suivantes pour modifier les motifs de hachure :
PatternAngle
Spécifie l'angle du motif de hachure.
PatternDouble
Indique si la hachure définie par l'utilisateur est hachurée deux fois.
PatternName
Spécifie le nom du motif de hachure (ne modifie pas le type du motif).
PatternScale
Spécifie l'échelle du motif de hachure.
PatternSpace
Spécifie l'espacement du motif de hachure défini p ar l'utilisateur.
SetPattern
Définit le nom et le type de motif de la hachure.
Dans cet exemple, l'utilisateur crée une hachure. I l augmente ensuite de deux l'espacement du motif courant de la hachure.
Sub Ch4_ChangeHatchPatternSpace()
Dim hatchObj As AcadHatch
Dim patternName As String
Dim PatternType As Long
Dim bAssociativity As Boolean
' Define the hatch
patternName = "ANSI31"
PatternType = 0
bAssociativity = True
' Create the associative Hatch object
Set hatchObj = ThisDrawing.ModelSpace. _
AddHatch(PatternType, patternName, bAssociativity)
' Create the outer loop for the hatch.
Dim outerLoop(0 To 0) As AcadEntity
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 5
center(1) = 3
center(2) = 0
radius = 3
Set outerLoop(0) = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
hatchObj.AppendOuterLoop (outerLoop)
hatchObj.Evaluate
' Change the spacing of the hatch pattern by
' adding 2 to the current spacing
hatchObj.patternSpace = hatchObj.patternSpace + 2
hatchObj.Evaluate
ThisDrawing.Regen True
End Sub
Les calques sont similaires à des couches transparentes dans lesquelles vous pouvez organiser et grouper différents types d'informations relatives au dessin.
Les objets que vous créez possèdent des propriétés telles que des calques, des couleurs et des types de ligne. La couleur vous permet de distinguer des
éléments similaires dans vos dessins et les types de ligne vous aident à différencier facilement les éléments de dessin tels que les axes ou les lignes cachées.
L'utilisation de plusieurs calques permet de définir votre propre système d'organisation des objets du dessin et de simplifier leur manipulation.
Pour de plus amples informations à ce sujet, reportez-vous à la section “Contrôle des propriétés des objets” du Manuel d'utilisation .
Lorsque vous dessinez dans AutoCAD, vous travaillez systématiquement sur un calque. Il peut s'agir du calque proposé par défaut ou d'un autre que vous avez
créé et nommé. Chaque calque est associé à une couleur et à un type de ligne. Vous pouvez, par exemple, créer un calque destiné exclusivement aux axes et
lui attribuer le type de ligne CENTER et la couleur bleue. Ensuite, lorsque vous souhaitez tracer des axes, vous pouvez accéder à ce calque et commencer à
dessiner.
Tous les calques et types de ligne sont conservés au sein de leurs objets Collection parent. Les calques sont conservés dans la collection Layers et les types
de ligne dans la collection Linetypes
Pour de plus amples informations sur les calques, reportez-vous à la section “Utilisation des calques” du Manuel d'utilisation .
Suppression de calques
Vous pouvez lancer une itération dans les collections Layers et Linetypes pour rechercher tous les calques et tous les types de lignes d'un dessin.
Le code suivant itère via la collection Layers pour rassembler les noms de tous les calques dans le dessin. Les noms sont ensuite affichés dans une boîte de
message.
Sub Ch4_IteratingLayers()
Dim layerNames As String
Dim entry As AcadLayer
layerNames = ""
For Each entry In ThisDrawing.Layers
layerNames = layerNames + entry.Name + vbCrLf
Suivant
MsgBox "The layers in this drawing are: " + _
vbCrLf + layerNames
End Sub
Vous pouvez créer des calques et l eur affecter des propriétés de couleur et de type de ligne. Chaque calque individuel fait partie de la collection Layers Utilisez
la méthode Add pour créer un calque et l'ajouter à la collection Layers.
Une fois un calque créé, vous pouvez lui attribuer un nom. Pour modifier le nom d'un calque après sa création, utilisez la propriété Name Les noms de calques
peuvent inclure jusqu'à 31 caractères et contenir d es lettres, des chiffres et les caractères spéciaux signe dollar ($), tiret (–) et caractère de soulignement (_),
mais ne peuvent pas contenir d'espaces.
Pour de plus amples informations sur la création de calques, reportez-vous à la section “Création et appellation des calques” du Manuel d'utilisation .
Le code suivant crée un cercle et un calque. Le calque se voit attribuer la couleur rouge. Le cercle est attribué au calque, et la couleur du cercle est modifiée en
conséquence.
Sub Ch4_NewLayer()
' Create a circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Lorsque vous dessinez, vous travaillez systématiquement sur le calque courant. Vous avez la possibilité de rendre actif un calque et d'y ajouter des objets. Si
vous rendez un autre calque actif, les nouveaux objets que vous créez seront associés à ce calque et adopteront sa couleur et son type de ligne. Vous ne
pouvez pas activer un calque s'il est gelé.
Pour rendre un calque actif, utilisez la propriété ActiveLayer Cette propriété est définie sur le dessin courant. Par exemple :
Les calques désactivés sont régénérés, mais ils ne sont ni affichés ni tracés. En désactivant les calques, vous évitez de régénérer le dessin à chaque fois que
vous libérez un calque. Lors de l'activation d'un calque désactivé, AutoCAD redessine les objets de ce calque.
Pour activer et désactiver les calques, utilisez la propriété LayerOn Si vous définissez cette propriété sur la valeur TRUE, le calque est activé. Si vous définissez
cette propriété sur la valeur FALSE, le calque est désactivé.
Dans cet exemple, l'utilisateur crée un nouveau calque auquel il ajoute un cercle, puis désactive le calque de sorte que le cercle ne soit plus visible.
Sub Ch4_LayerInvisible()
' Create a circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
' Create a new layer called "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
' Assign the circle to the "ABC" layer
circleObj.Layer = "ABC"
circleObj.Update
' Turn off layer "ABC"
layerObj.LayerOn = False
ThisDrawing.Regen acActiveViewport
End Sub
Vous pouvez geler des calques pour accélérer l 'exécution de commandes d'affichage, faciliter les opérations de sélection des objets et gagner du temps lors de
la régénération de dessins complexes. Les objets des calques gelés ne sont ni affichés, ni tracés, ni régénérés. Gelez les calques que vous voulez masquer
pendant une longue période. Lorsque vous libérez un calque gelé, AutoCAD régénère et affiche les objets qui s'y trouvent.
Pour geler ou libérer un calque, utilisez la propriété Freeze Si vous donnez la valeur TRUE à cette propriété, le calque est gelé. Si vous lui donnez la valeur
FALSE, le calque est libéré.
Sub Ch4_LayerFreeze()
' Create a new layer called "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
' Freeze layer "ABC"
layerObj.Freeze = True
End Sub
Vous ne pouvez pas modifier les objets situés sur un calque verrouillé, mais ils restent visibles si ce calque est actif et libéré. Vous avez la possibilité de rendre
actif un calque verrouillé et d'y ajouter des objets. Vous pouvez aussi geler et masquer des calques verrouillés, et changer les couleurs et les types de ligne qui
leur sont associés.
Pour verrouiller ou déverrouiller un calque, utilisez la propriété Lock Si vous donnez à cette propriété la valeur TRUE, le calque est verrouillé. Si vous lui donnez
la valeur FALSE, le calque est déverrouillé.
Sub Ch4_LayerLock()
' Create a new layer called "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
' Lock layer "ABC"
layerObj.Lock = True
End Sub
Vous pouvez attribuer une couleur à un calque. Les couleurs sont identifiées par l'objet AcCmColor Celui-ci peut avoir une valeur RVB, un nombre ACI (un
entier de 1 à 255) ou une couleur nommée.
Des constantes ont été fournies pour les sept couleurs standard et les désignations DUBLOC et DUCALQUE.
Si vous utilisez acByBlock, AutoCAD dessine les nouveaux objets dans la couleur par défaut (blanc ou noir selon la configuration) jusqu'à ce qu'ils soient
regroupés dans un bloc. Dès l'insertion du bloc dans le dessin, les objets de ce bloc héritent du paramètre actif.
Si vous choisissez acByLayer, les nouveaux objets adoptent la couleur du calque sur lequel ils se trouvent.
Lorsque vous définissez des calques, les types de ligne vous permettent de transmettre des informations visuelles d'une autre façon. Un type de l igne est un
motif répété de tirets, de points et d'espaces servant à distinguer l'utilisation des lignes.
Le nom et la définition du type de ligne décrivent l'aspect du motif de base (ordre des tirets et pointillés, longueur relative des tirets et des espaces,
caractéristiques du texte ou des formes éventuellement ajoutés à la définition).
Pour attribuer un type de ligne à un calque, utilisez la propriété Linetype Cette propriété prend le nom du type de ligne comme entrée.
Suppression de calques
Vous pouvez supprimer un calque à tout moment au cours d'une session de dessin. Il n'est pas possible de supprimer le calque courant, le calque 0, un calque
dépendant d'une référence externe ou un calque contenant des objets.
Remarque De même, les calques ré férencés par des définitions de blocs, ainsi que le calque spécial appelé DEFPOINTS, ne peuvent pas être supprimés,
même s'ils ne contiennent aucun objet visible.
AutoCAD offre la possibilité d'attribuer des paramètres Couleurs vraies aux différents objets d'un dessin à l'aide de l'objet AcCmColor En utilisant une valeur
RVB dans l'objet AcCmColor, vous pouvez choisir parmi des milliers de couleurs celles qui définiront les lignes, les cercles et autres objets. L'objet AcCmColor
contient également des méthodes et propriétés qui définissent les noms des couleurs, leurs carnets, leurs index, leurs valeurs et leurs méthodes.
AutoCAD offre également la possibilité d'attribuer des couleurs aux calques. Chaque couleur peut être identifiée par un nom ou un nombre de l'index des
couleurs AutoCAD (ACI, AutoCAD Color Index), à savoir u n nombre entier compris entre 1 e t 255. La même couleur peut être affectée à plusieurs objets et
calques. Vous pouvez affecter chaque numéro de couleur à une plume différente (si vous disposez d'un traceur à plumes) ou utiliser les numéros de couleur
pour identifier certains éléments du dessin, même si les couleurs ne sont pas visibles à l'écran.
Pour spécifier une couleur, vous pouvez entrer son nom ou son numéro ACI. L'index ACI propose 255 numéros de couleur. Les couleurs 1 à 7 sont les seules à
posséder un nom standard.
Couleurs 1 à 7
Numéro de couleur Nom de couleur
1 Rouge
2 Jaune
3 Vert
4 Cyan
5 Bleu
6 Magenta
7 Noir/Blanc
Pour associer les couleurs 8 à 255 à des objets ou à des calques, vous devez indiquer leur numéro ou les sélectionner dans une boîte de dialogue. La couleur
par défaut (7) est le blanc ou le noir, en fonction de la couleur de fond.
Pour de plus amples informations sur les couleurs, reportez-vous à la section “Utilisation des couleurs” du Manuel d'utilisation .
Un type de ligne est un motif composé d'une succession de tirets, de points et d'espaces. De même, un type de ligne complexe est une suite de combinaisons
de symboles. Si vous souhaitez utiliser un type de ligne particulier, vous devez d'abord le charger dans le dessin. Dans ce cas, il e st indispensable que sa
définition figure dans un fichier de bibliothèque .lin avant de le charger dans un dessin. Pour charger un type de ligne dans un dessin, utilisez la méthode Load
Pour de plus amples informations sur les types de ligne, reportez-vous à la section “Présentation des types de ligne” du Manuel d'utilisation .
Remarque Ne confondez pas les types de ligne propres à AutoCAD et les types de ligne matériels que peuvent produire certains traceurs. Ces deux types de
ligne discontinues produisent le même effet. Il est toutefois déconseillé de les utiliser simultanément, les résultats p ouvant être imprévisibles.
Dans cet exemple, l'utilisateur essaie de charger l e type de ligne “CENTER” à partir du fichier acad.lin . Si le type de ligne existe déjà ou si le fichier n'existe pas,
un message s'affiche.
Sub Ch4_LoadLinetype()
On Error GoTo ERRORHANDLER
Dim linetypeName As String
linetypeName = "CENTER"
' Load "CENTER" line type from acad.lin file
ThisDrawing.Linetypes.Load linetypeName, "acad.lin"
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Pour utiliser un type de ligne à dessiner sur le calque courant, vous devez le rendre actif. Tous les nouveaux objets utilisent le type de ligne courant.
Remarque Vous ne pouvez pas activer les types de ligne dépendant de références externes.
Pour rendre un type de l igne actif, utilisez la propriété ActiveLinetype Cette propriété est définie sur le dessin courant. Par exemple :
ThisDrawing.ActiveLinetype = ThisDrawing. _
Linetypes.Item("CONTINUOUS")
Pour de plus amples informations sur l'activation des types de ligne, reportez-vous à la section “Définition du type de ligne courant” du Manuel d'utilisation .
Pour renommer un type de ligne, utilisez la propriété Name Lorsque vous renommez un type de ligne, vous ne renommez que la définition du type de ligne dans
votre dessin. Le nom dans le fichier bibliothèque LIN n'est cependant pas modifié.
Pour supprimer un type de ligne, utilisez la méthode Delete Vous pouvez supprimer un type de ligne à tout moment au cours d'une session de dessin ; toutefois,
il est interdit de supprimer les types de ligne DUCALQUE, DUBLOC, CONTINUOUS, le type de ligne actif et les types de ligne dépendant d'une référence
externe. Notez également que les types de ligne référencés par des définitions de blocs ne peuvent pas être supprimés, même s' ils ne sont utilisés par aucun
objet.
Pour de plus amples informations sur la suppression des types de ligne, reportez-vous à la section “Définition du type de ligne courant” du Manuel d'utilisation .
Une description peut être associée aux types de ligne. La description fournit une représentation ASCII du type de ligne. Vous pouvez attribuer ou modifier une
description de type de ligne à l'aide de la propriété Description
Une description de type de ligne peut comporter jusqu'à 47 caractères. Il peut s'agir d'un commentaire ou d'une série de tirets de soulignement, de points, de
tirets et d'espaces représentant le modèle du type de ligne. Par exemple :
AutoCAD vous offre la possibilité de spécifier l'échelle appliquée aux types de ligne pour les objets que vous créez. Plus cette échelle est réduite, plus les motifs
sont nombreux par unité de dessin. Par défaut, l'échelle appliquée aux types de lignes dans AutoCAD est de 1, ce qui correspond à une unité de dessin. Vous
pouvez modifier l'échelle des types de ligne pour tous les objets, références d'attribut et groupes d'un dessin.
La variable système CELTSCALE permet de choisir l'échelle du type de ligne associé aux nouveaux objets. LTSCALE modifie de façon globale l'échelle du type
de ligne pour les objets existants et les nouveaux objets. Pour modifier les valeurs des variables système à l'aide de l'automatisation ActiveX d'AutoCAD,
utilisez la méthode SetVariable.
Pour de plus amples informations sur l'échelle des types de ligne, reportez-vous à la section “Contrôle de l'échelle d'un type de ligne” du Manuel d'utilisation .
Après avoir défini les calques, les couleurs et les types de ligne, vous pouvez les affecter aux objets de votre dessin. Les composants associés d'un dessin
peuvent être groupés en assignant des objets à différents calques. AutoCAD vous permet de contrôler l'affichage du calque, la couleur et le type de ligne et de
spécifier si les objets d'un calque peuvent être édités. Vous pouvez déplacer les objets d'un calque à un autre et changer le nom d'un calque.
Un dessin peut comporter un nombre quelconque de calques et chaque calque peut comporter un nombre illimité d'objets. AutoCAD vous donne la possibilité
d'attribuer un nom à vos d ifférents calques et de choisir librement ceux que vous voulez afficher.
Les blocs peuvent être définis à partir d'objets initialement dessinés sur des calques différents à l'aide de couleurs et de types de ligne distincts. Vous pouvez
conserver les informations relatives aux calques, aux couleurs et aux types de lignes des objets dans un bloc. Lorsque vous insérez celui-ci dans le dessin,
chaque objet reste sur son calque d'origine et conserve sa couleur et son type de ligne initial.
Après avoir créé un objet et lui avoir affecté des propriétés de calque, de couleur et de type de ligne, vous pouvez souhaiter changer le calque de l'objet. Il est
utile de changer le calque d'un objet si vous créez un objet accidentellement sur un mauvais calque ou si vous décidez de modifier l'organisation de vos calques
ultérieurement.
Pour changer le calque d'un objet, utilisez la propriété Layer fournie pour cet objet. Cette propriété prend le nom du calque comme entrée.
Cet exemple crée un cercle sur le calque actif puis un nouveau calque intitulé “ABC”. Le cercle est ensuite placé sur le nouveau calque.
Sub Ch4_MoveObjectNewLayer()
' Create a circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
' Create a new layer called "ABC"
Dim layerObj As AcadLayer
Set layerObj = ThisDrawing.Layers.Add("ABC")
' Assign the circle to the "ABC" layer
circleObj.Layer = "ABC"
circleObj.Update
End Sub
Pour changer la couleur d'un objet, utilisez la propriété TrueColor de cet objet. AutoCAD offre la possibilité d'attribuer des couleurs aux différents objets d'un
dessin. Chaque couleur est identifiée par un objet AcCmColor Celui-ci peut avoir une valeur RVB, un nombre ACI (un entier de 1 à 255) ou une couleur
nommée. En utilisant une valeur RVB, vous avez le choix entre des millions de couleurs.
Lorsque vous attribuez une couleur à un objet, celle-ci remplace la couleur associée au calque auquel l'objet appartient. AutoCAD vous permet de changer la
couleur d'un objet, si vous souhaitez le laisser sur un calque donné sans conserver la couleur associée à ce calque.
Sub Ch4_ColorCircle()
Dim color As AcadAcCmColor
Set color = _
AcadApplication.GetInterfaceObject("AutoCAD.AcCmColor.17")
Call color.SetRGB(80, 100, 244)
Dim circleObj As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius As Double
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
Set circleObj = _
ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
circleObj.TrueColor = color
ZoomAll
End Sub
Par défaut, les objets héritent du type de ligne du calque sur lequel ils sont créés. Pour changer le type de ligne d'un objet, utilisez la propriété Linetype fournie
pour cet objet. Elle prend comme entrée le nom du type de ligne et l'attribue à l'objet.
Remarque Avant de pouvoir attribuer un type de ligne à un objet, le type de ligne doit être chargé dans le dessin actif. Pour charger un type de ligne dans un
dessin, utilisez la méthode Load.
Pour de plus amples informations sur les types de ligne, reportez-vous à la section “Présentation des types de ligne” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée un cercle. Il essaie ensuite de charger le type de ligne “CENTER” à partir du fichier acad.lin . Si le type de ligne existe déjà
ou si le fichier n'existe pas, un message s'affiche. Le type de ligne défini pour le cercle est “CENTER”..
Sub Ch4_ChangeCircleLinetype()
On Error Resume Next
' Create a circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 1
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
Dim linetypeName As String
linetypeName = "CENTER"
' Load "CENTER" line type from acad.lin file
ThisDrawing.Linetypes.Load linetypeName, "acad.lin"
If Err.Description <> "" Then MsgBox Err.Description
' Assign the circle the linetype "CENTER"
circleObj.Linetype = "CENTER"
circleObj.Update
End Sub
Il est possible d'enregistrer les paramètres de calques et de les recharger ultérieurement. Ceci vous permet de réactiver rapidement des paramètres précis pour
tous les calques à diverses étapes de la création ou du traçage de vos dessins.
Les paramètres d'un calque comportent diverses informations : son activation, son gel, son verrouillage, son traçage, son gel automatique dans les nouvelles
fenêtres, ainsi que la couleur, le type et l'épaisseur de ligne et le style du tracé. Vous pouvez indiquer quels paramètres vous souhaitez enregistrer et créer
différents groupes de paramètres pour un même dessin.
Un objet spécial, LayerStateManager, offre des fonctions de manipulation de paramètres de calques via ActiveX.
Pour de plus amples informations sur l'enregistrement des paramètres de calques, reportez-vous à la section “Enregistrement et restauration des paramètres
des calques” du Manuel d'utilisation .
AutoCAD enregistre les informations concernant les calques dans un d ictionnaire d'extensions au sein de la collection Layers du dessin. Lors du premier
enregistrement des paramètres de calques dans un dessin, AutoCAD effectue les opérations suivantes :
A chaque fois que vous e nregistrez un nouveau paramètre de calque, AutoCAD crée un nouvel objet XRecord décrivant les paramètres enregistrés, puis le
place dans le dictionnaire ACAD_LAYERSTATE. Le diagramme ci-dessous illustre ce processus.
Il n'est pas nécessaire (ni même souhaitable) d'interpréter les objets XRecord lorsque vous manipulez les paramètres de calques avec ActiveX. Utilisez les
fonctions LayerStateManager pour accéder aux paramètres de calques enregistrés.
L'exemple suivant permet d'afficher le nom de tous les paramètres enregistrés du dessin actif :
Sub Ch4_ListStates()
On Error Resume Next
Dim oLSMDict As AcadDictionary
Dim XRec As Object
Dim layerstateNames As String
layerstateNames = ""
' Get the ACAD_LAYERSTATES dictionary, which is in the
' extension dictionary in the Layers object.
Set oLSMDict = ThisDrawing.Layers. _
GetExtensionDictionary.Item("ACAD_LAYERSTATES")
' List the name of each saved layer setting. Settings are
' stored as XRecords in the dictionary.
For Each XRec In oLSMDict
layerstateNames = layerstateNames + XRec.Name + vbCrLf
Next XRec
MsgBox "The saved layer settings in this drawing are: " + _
vbCrLf + layerstateNames
End Sub
L'objet LayerStateManager est semblable à l'objet Utility d'AutoCAD, en ce sens qu'il offre un ensemble de fonctions dédiées à la manipulation des données.
Ces fonctions sont des méthodes qui permettent d'utiliser les paramètres de calques enregistrés. Utilisez les méthodes LayerStateManager ci-dessous pour
manipuler les paramètres de calques enregistrés :
Delete
Supprime un paramètre enregistré.
Export
Exporte un paramètre enregistré dans un fichier.
Import
Importe un paramètre enregistré depuis le fichier spécifié.
Rename
Renomme un paramètre enregistré.
Restore
Charge un paramètre enregistré dans le dessin actif.
Save
Enregistre les états et les propriétés du calque spécifié.
SetDataBase
Associe une base de données AutoCAD à LayerStateManager.
Après avoir chargé l'objet LayerStateManager, vous devez lui associer une base de données pour pouvoir accéder à ses méthodes. Utilisez la méthode
SetDatabase pour associer une base de données à LayerStateManager.
oLSM.SetDatabase ThisDrawing.Database
La méthode Save permet d'enregistrer un ensemble de paramètres de calques dans un dessin. Elle demande deux paramètres. Le premier est une chaîne de
caractères représentant le nom des paramètres que vous enregistrez. Le second identifie les propriétés de calques que vous souhaitez enregistrer. Utilisez les
constantes du tableau suivant pour identifier ces propriétés.
Si vous tentez d'enregistrer les paramètres de calques sous un nom déjà attribué, u ne erreur est renvoyée. Vous devrez dans ce cas renommer ou supprimer
les paramètres précédemment enregistrés si vous souhaitez réutiliser ce nom.
L'exemple suivant permet d'enregistrer la couleur et le type de ligne du calque actif sous le nom ColorLinetype.
Sub Ch4_SaveLayerColorAndLinetype()
Dim oLSM As AcadLayerStateManager
' Access the LayerStateManager object
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
' Associate the current drawing database with LayerStateManager
oLSM.SetDatabase ThisDrawing.Database
oLSM.Save "ColorLinetype", acLsColor + acLsLineType
End Sub
Sub Ch4_RenameLayerSettings()
Dim oLSM As AcadLayerStateManager
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabase ThisDrawing.Database
oLSM.Rename "ColorLinetype", "OldColorLinetype"
End Sub
L'exemple suivant supprime des paramètres de calques enregistrés sous le nom ColorLinetype.
Sub Ch4_DeleteColorAndLinetype()
Dim oLSM As AcadLayerStateManager
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabase ThisDrawing.Database
oLSM.Delete "ColorLinetype"
End Sub
La méthode Restore charge, pour tous les paramètres de calques du dessin actif, les valeurs précédemment enregistrées. Par exemple, si vous enregistrez les
couleurs et les types de ligne d'un dessin sous le nom “ColorLinetype”, les modifiez, puis restaurez “ColorLinetype”, vos modifications seront perdues. Si vous
ajoutez des calques après avoir enregistré “ColorLinetype”, ils ne seront pas affectés par la restauration de “ColorLinetype”.
Restauration des paramètres de couleurs et de types de ligne des calques d'un dessin
Si les couleurs et les types de ligne des calques du dessin actif ont été enregistrés sous le nom “ColorLinetype”, l'exemple suivant permet de redonner à ces
paramètres (pour chaque calque du dessin) la valeur qu'ils avaient lors de la création du fichier “ColorLinetype”.
Sub Ch4_RestoreLayerSettings()
Dim oLSM As AcadLayerStateManager
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabase ThisDrawing.Database
oLSM.Restore "ColorLinetype"
End Sub
Vous pouvez exporter et importer les paramètres de calques enregistrés afin de les utiliser d ans d'autres dessins. Utilisez la méthode Export de l'objet
LayerStateManager pour exporter les paramètres dans un fichier et la méthode Import pour les importer dans un dessin.
Remarque Le fait d'importer des paramètres de calques ne les réinitialise pas ; vous devez utiliser la méthode Restore pour que vos calques prennent en
compte les paramètres importés.
La méthode Export attend deux paramètres. Le premier est une chaîne identifiant les paramètres enregistrés que vous exportez. Le second est le nom du
fichier dans lequel vous les exportez. Si vous ne spécifiez pas le chemin d'accès au fichier, il est placé dans le répertoire d'installation d'AutoCAD. Si un fichier
porte déjà le nom que vous spécifiez, il est écrasé. Utilisez l'extension . las lorsque vous tapez le nom du fichier : il s'agit de l'extension qu'AutoCAD attribue par
défaut aux fichiers de paramètres de calques.
La méthode Import accepte un paramètre : une chaîne nommant le fichier qui contient les paramètres de calques que vous importez.
Lorsque vous importez les paramètres d'un calque, une erreur est signalée si certaines des propriétés référencées dans le fichier ne sont pas disponibles dans
le dessin actif. L'importation est cependant effectuée, bien que les propriétés par défaut soient u tilisées. Par exemple, si un calque exporté contient un type de
ligne qui n'est pas chargé dans le dessin dans lequel vous l'importez, une erreur est signalée et le type de ligne par défaut du dessin lui est substitué. Il est
conseillé de prévoir cette erreur dans votre programme, et de laisser le traitement se terminer.
Si le fichier importé contient des paramètres de calques qui n'existent pas dans le dessin actif, ces calques sont créés. Lorsque vous utilisez la méthode
Restore, les propriétés spécifiées au moment de l'enregistrement des paramètres sont affectées aux nouveaux calques ; les autres propriétés des nouveaux
calques prennent les paramètres par défaut.
L'exemple suivant exporte les paramètres de calques enregistrés dans le fichier Colortype.las .
Sub Ch4_ExportLayerSettings()
Dim oLSM As AcadLayerStateManager
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabase ThisDrawing.Database
oLSM.Export "ColorLinetype", "c:\my documents\ColorLType.las"
End Sub
Sub Ch4_ImportLayerSettings()
Dim oLSM As AcadLayerStateManager
Set oLSM = ThisDrawing.Application. _
GetInterfaceObject("AutoCAD.AcadLayerStateManager.17")
oLSM.SetDatabase ThisDrawing.Database
Le texte est un moyen d'enrichir vos dessins par des informations importantes. Vous avez besoin d'insérer du texte pour remplir les cartouches, identifier les
différentes parties d'un dessin, spécifier les caractéristiques techniques ou ajouter des annotations.
AutoCAD offre différentes méthodes de création de texte. Pour les entrées uniques et courtes, entrez de simples lignes de texte. Pour les entrées plus longues
comportant du formatage, utilisez des paragraphes de texte. Bien que le texte que vous entrez adopte par défaut les caractéristiques et la police définies par le
style courant, vous pouvez personnaliser la présentation du texte par diverses méthodes.
Pour de plus amples informations sur l'utilisation du texte, reportez-vous à la section “Création de texte” du Manuel d'utilisation .
Polices de substitution
Vérification orthographique
Tout texte contenu dans un dessin AutoCAD est associé à un style. Lorsque vous saisissez du texte, la police, la taille, l'angle, l'orientation et toutes les autres
caractéristiques spécifiques au texte sont déterminées par le style de texte courant. Vous pouvez utiliser ou modifier le style par défaut ou créer et charger un
nouveau style. Une fois un style créé, vous pouvez modifier ses attributs, changer son nom ou supprimer ce style s'il ne vous est plus utile.
Le nouveau texte adopte les caractéristiques (hauteur, expansion ou compression, inclinaison, orientation, inscription à l'envers ou inversion et alignement) du
style de texte courant. Pour créer u n style de texte, utilisez la méthode Add pour créer un objet TextStyle et l'ajouter à la collection TextStyles La méthode Add
prend un nom de style d e texte comme entrée. Une fois un style de texte créé, vous ne pouvez pas modifier son nom via l'Automatisation ActiveX d'AutoCAD.
Les noms de styles peuvent contenir des lettres, des chiffres et des caractères spéciaux tels que le dollar ($), le trait d'union (-) et le trait de soulignement (_).
AutoCAD convertit le nom en lettres majuscules. Si vous n'entrez pas de nom de style, AutoCAD le nomme automatiquement Style n , n étant un nombre
commençant à 1. Chaque nouveau style est incrémenté de 1.
Vous pouvez modifier un style existant en changeant les propriétés de l'objet TextStyle. Vous pouvez également mettre à jour le t exte présentant ce style afin
qu'il prenne vos modifications en compte. Pour modifier un objet TextStyle, utilisez les propriétés suivantes :
FontFile
Spécifie le fichier associé à une police (style des caractères).
BigFontFile
Spécifie le fichier de définition de la forme des caractères utilisé pour un jeu de caractères non-ASCII.
Height
Spécifie la hauteur des caractères.
Width
Spécifie l'extension ou la compression des caractères.
ObliqueAngle
Spécifie l'inclinaison des caractères.
TextGenerationFlag
Spécifie un texte écrit à l'envers, renversé ou les deux.
Lorsque vous modifiez la police ou l'orientation d'un style, AutoCAD régénère tout texte utilisant ce style en fonction de la nouvelle police ou orientation. La
modification de la hauteur du texte, du facteur d'extension/compression et de l'angle d'inclinaison n'affecte pas le texte existant, mais modifie les objets texte
créés ultérieurement.
Remarque Vous devez appeler la méthode Regen ou Update pour visualiser toutes les modifications apportées aux propriétés ci-dessus.
Une police définit un ensemble de caractères de même aspect. Une même police peut être utilisée par différents styles de texte. Pour affecter une police à un
style de texte, utilisez la propriété FontFile de l'objet TextStyle En entrant le fichier de police contenant une police SHX d'AutoCAD, vous attribuez cette police
au style de texte.
Cet exemple applique les valeurs de police courantes au style de texte actif, puis utilise la police “PlayBill”.La nouvelle police est alors définie à l'aide de la
méthode SetFont. Pour constater l'effet du changement de police, ajoutez un objet Mtext ou Text à votre dessin avant d'exécuter l'exemple. Si la police PlayBill
n'est pas installée sur votre ordinateur, utilisez l 'une de vos polices dans l' exemple.
Sub Ch4_UpdateTextFont()
MsgBox ("Look at the text now...")
Dim typeFace As String
Dim SavetypeFace As String
Dim Bold As Boolean
Dim Italic As Boolean
Dim charSet As Long
Dim PitchandFamily As Long
' Get the current settings to fill in the
' default values for the SetFont method
ThisDrawing.ActiveTextStyle.GetFont typeFace, _
Bold, Italic, charSet, PitchandFamily
' Change the typeface for the font
SavetypeFace = typeFace
typeFace = "PlayBill"
ThisDrawing.ActiveTextStyle.SetFont typeFace, _
Bold, Italic, charSet, PitchandFamily
ThisDrawing.Regen acActiveViewport
MsgBox ("Now see how it looks after changing the font...")
'Restore the original typeface
ThisDrawing.ActiveTextStyle.SetFont SavetypeFace, _
Bold, Italic, charSet, PitchandFamily
ThisDrawing.Regen acActiveViewport
End Sub
Les polices TrueType s'affichent toujours pleines dans le dessin ; cependant, lors du traçage, la variable système TEXTFILL régit le remplissage des polices.
Par défaut, TEXTFILL a pour valeur 1 pour tracer les polices pleines. Lorsque vous exportez votre dessin au format PostScript ® à l'aide de la méthode Export et
l'imprimez sur une imprimante PostScript, la police est tracée comme spécifié.
AutoCAD est compatible avec la norme de codage des caractères Unicode. Une police Unicode peut contenir 65535 caractères, avec des formes utilisées dans
de nombreuses langues. Toutes les polices SHX propres à AutoCAD sont à présent des polices Unicode.
Certains alphabets utilisent des fichiers texte comportant des milliers d e caractères non-ASCII. Pour gérer ces types de fichier, AutoCAD fournit un fichier de
définition des caractères particulier (fichier de grandes polices). Vous pouvez définir un style utilisant à la fois des fichiers de police normale et de grande police.
Pour spécifier des polices normales, utilisez la propriété FontFile Pour spécifier des polices de grande taille, utilisez la propriété BigFontFile
AutoCAD vous permet de remplacer une police par une autre et de choisir la police par défaut. Pour de plus amples informations à ce sujet, reportez-vous à la
section Polices de substitution.
Cet exemple modifie les propriétés FontFile et BigFontFile. Vous devez remplacer les informations de chemin d'accès données dans cet exemple par les noms
de chemin et de fichier a ppropriés à votre système.
Sub Ch4_ChangeFontFiles()
ThisDrawing.ActiveTextStyle.BigFontFile = _
"C:/AutoCAD/Fonts/bigfont.shx"
ThisDrawing.ActiveTextStyle.fontFile = _
"C:/AutoCAD/Fonts/italic.shx"
End Sub
La hauteur de texte détermine, en unités de dessin, la taille des lettres dans la police utilisée. Cette valeur représente en général la taille des majuscules, sauf
dans le cas des polices TrueType.
Pour ces dernières, la valeur spécifiée correspondant à la hauteur du texte peut ne pas représenter la hauteur des lettres majuscules. La hauteur spécifiée
représente la hauteur d'une lettre majuscule plus une zone réservée aux accents et autres marques utilisées dans les langues autres que l'anglais. La partie
relative des zones affectées aux lettres majuscules et aux caractères accentués est déterminée par l'auteur de la police au moment de la conception de cette
dernière et par conséquent varie d'une police à l'autre.
En plus de la hauteur d'une lettre majuscule et de la zone d'ascension comprises dans la hauteur spécifiée par l'utilisateur, les polices TrueType ont une zone
de descente pour les parties de caractères qui se prolongent sous la ligne d'insertion de texte. Les caractères y, j, p, g et q en sont quelques exemples.
Pour spécifier la hauteur du texte, utilisez la propriété Height Cette propriété accepte uniquement des nombres positifs.
Sub Ch4_ChangeTextHeight()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
' Define the text object
textString = "Hello, World."
insertionPoint(0) = 3
insertionPoint(1) = 3
insertionPoint(2) = 0
height = 0.5
' Create the text object in model space
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
' Change the value of the Height to 1
textObj.height = 1
textObj.Update
End Sub
L'angle d'inclinaison fixe le degré d'inclinaison des caractères vers la droite ou la gauche. L'angle représente le décalage par rapport à son axe vertical (90
degrés). Pour définir l'angle d'inclinaison, utilisez la propriété ObliqueAngle L'angle d'inclinaison doit être exprimé en radians. Un a ngle positif spécifie une
inclinaison vers la droite, une valeur négative se voit ajouter 2*PI pour être convertie en son équivalent positif.
Cet exemple crée un objet Text qui est ensuite incliné de 45 degrés.
Sub Ch4_ObliqueText()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
' Define the text object
textString = "Hello, World."
insertionPoint(0) = 3
insertionPoint(1) = 3
insertionPoint(2) = 0
height = 0.5
' Create the text object in model space
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
' Change the value of the ObliqueAngle
' to 45 degrees (.707 radians)
textObj.ObliqueAngle = 0.707
textObj.Update
End Sub
Le drapeau de génération de texte indique si le texte est affiché de droite à gauche ou inversé. Pour définir ce drapeau, utilisez la propriété TextGenerationFlag
Pour afficher le texte de droite à gauche, entrez acTextFlagBackward pour cette propriété. Pour afficher le texte inversé, entrez acTextFlagUpsideDown
pour cette propriété. Pour combiner ces deux attributs, entrez acTextFlagBackward+acTextFlagUpsidedown pour cette propriété.
Cet exemple crée une ligne de texte, puis l'affiche de droite à gauche à l'aide de la propriété TextGenerationFlag.
Sub Ch4_ChangingTextGenerationFlag()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
' Create the text object
textString = "Hello, World."
insertionPoint(0) = 3
insertionPoint(1) = 3
insertionPoint(2) = 0
height = 0.5
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
' Change the value of the TextGenerationFlag
textObj.TextGenerationFlag = acTextFlagBackward
textObj.Update
End Sub
Le texte que vous ajoutez aux dessins contient diverses informations. Il peut s'agir d'une spécification complexe, d'un cartouche, d'un libellé ou même d'une
partie du dessin. Pour des entrées plus courtes ne requérant pas plusieurs polices ou lignes, créez des lignes de texte à l'aide de l'objet Text. Les lignes de
texte conviennent davantage aux libellés.
Lors de l'utilisation de lignes de texte, chaque ligne de texte individuelle est un objet distinct. Pour créer un objet LineText, utilisez la méthode AddText Cette
méthode requiert la saisie de trois valeurs : la chaîne de texte, le point d'insertion et la hauteur du texte.
La chaîne de texte est le texte lui-même à afficher. Les caractères Unicode, les codes de contrôle et les caractères spéciaux sont acceptés. Le point d' insertion
est un tableau de type Variant qui contient trois coordonnées doubles représentant les coordonnées SCG 3D où placer le texte dans le dessin. La hauteur du
texte est un nombre positif représentant la hauteur du texte en majuscules. Elle est mesurée en unités courantes.
L'exemple suivant crée une ligne de texte dans l'espace objet à la coordonnée (2, 2, 0).
Sub Ch4_CreateText()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
' Create the text object
textString = "Hello, World."
insertionPoint(0) = 2
insertionPoint(1) = 2
insertionPoint(2) = 0
height = 0.5
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
textObj.Update
End Sub
Un objet Text prend, lors de sa création, le style de texte actif. Vous pouvez modifier le formatage de l'objet Text en changeant son style de texte associé ou en
modifiant ses propriétés. Il est impossible d'appliquer des formats à des mots et caractères individuels.
Pour modifier un style de texte associé à un objet Text individuel, définissez la propriété StyleName sur un nouveau style de texte. Une fois un style de texte
modifié, utilisez la méthode Update de l'objet Text pour visualiser les modifications dans le dessin.
En plus des propriétés modifiables standard des entités (couleur, calque, type de ligne, etc.), d' autres propriétés que vous pouvez modifier sur un objet Text
sont les suivantes :
Alignment
Spécifie l'alignement horizontal et vertical du texte.
InsertionPoint
Spécifie le point d'insertion du texte.
ObliqueAngle
Spécifie l'angle d'inclinaison de l'objet Text individuel.
Rotation
Spécifie l'angle de rotation en radians du texte.
ScaleFactor
Spécifie le facteur d'échelle du texte.
TextAlignmentPoint
Spécifie le point d'alignement du texte.
TextGenerationFlag
Indique si le texte est affiché de gauche à droite, inversé ou les deux simultanément.
TextString
Spécifie la chaîne de texte affichée.
Une fois la propriété modifiée, utilisez la méthode Update pour visualiser les modifications dans le dessin.
Remarque Pour obtenir la liste complète des méthodes et propriétés, reportez-vous à la documentation sur l'objet Text dans le manuel AutoCADActiveX and
VBA Reference .
Vous pouvez justifier horizontalement et verticalement des lignes de texte. L'alignement s'effectue à gauche par défaut. Pour définir les options d'alignement
horizontal et vertical, utilisez la propriété Alignment
Réalignement de texte
Dans cet exemple, l'utilisateur crée un objet Text et un objet Point. L'objet Point est défini sur le point d'alignement du texte et prend la forme d'un réticule rouge
pour être facilement repéré. L'alignement du texte est modifié et une boîte de message s'affiche pour suspendre l'exécution de la macro. Vous pouvez alors
constater la modification de l'alignement du texte.
Sub Ch4_TextAlignment()
Dim textObj As AcadText
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim height As Double
' Define the new Text object
textString = "Hello, World."
insertionPoint(0) = 3
insertionPoint(1) = 3
insertionPoint(2) = 0
height = 0.5
' Create the Text object in model space
Set textObj = ThisDrawing.ModelSpace. _
AddText(textString, insertionPoint, height)
' Create a point over the text alignment point,
' so we can better visualize the alignment process
Dim pointObj As AcadPoint
Dim alignmentPoint(0 To 2) As Double
alignmentPoint(0) = 3
alignmentPoint(1) = 3
alignmentPoint(2) = 0
Set pointObj = ThisDrawing.ModelSpace. _
AddPoint(alignmentPoint)
pointObj.Color = acRed
' Set the point style to crosshair
ThisDrawing.SetVariable "PDMODE", 2
' Align the text to the Left
textObj.Alignment = acAlignmentLeft
ThisDrawing.Regen acActiveViewport
MsgBox "The Text object is now aligned left"
' Align the text to the Center
textObj.Alignment = acAlignmentCenter
' Align the text to the point (necessary for
' all but left aligned text.)
textObj.TextAlignmentPoint = alignmentPoint
ThisDrawing.Regen acActiveViewport
MsgBox "The Text object is now centered"
' Align the text to the Right
textObj.Alignment = acAlignmentRight
ThisDrawing.Regen acActiveViewport
MsgBox "The Text object is now aligned right"
End Sub
L'objet Text peut subir les mêmes modifications que tous les autres objets d'AutoCAD (déplacement, rotation, suppression et copie). Vous pouvez également
créer une copie miroir d'un texte. Pour éviter que le texte soit inversé lors d'une opération de copie-miroir, affectez la valeur 0 à la variable système MIRRTEXT.
La liste suivante présente quelques méthodes d'édition d'un objet Text. Pour obtenir une liste complète, reportez-vous à la documentation sur l'objet Text dans
le manuel ActiveX and VBA Reference d'AutoCAD.
ArrayPolar
Crée un réseau polaire.
ArrayRectangular
Crée un réseau rectangulaire.
Copy
Copie l'objet Text.
Erase
Efface l'objet Text.
Mirror
Réfléchit l'objet Text.
Move
Déplace l'objet Text.
Rotate
Fait pivoter l'objet Text.
Pour les entrées longues et complexes, créez des paragraphes de texte à l'aide de la commande textmult. Un texte multiligne occupe une largeur spécifiée
mais peut s'étendre verticalement de façon indéfinie. Il est possible d'appliquer un format particulier à chacun des mots ou caractères au sein du paragraphe.
Vous pouvez créer un paragraphe de texte (objet MText) à l'aide de la méthode AddMText Cette méthode requiert la saisie de trois valeurs : la chaîne de texte,
le point d'insertion dans le dessin où placer le texte et la largeur de la zone de contour du texte.
La chaîne de texte est le texte lui-même à afficher. Les caractères Unicode, les codes de contrôle et les caractères spéciaux sont acceptés. Le point d' insertion
est un tableau de type Variant qui contient trois coordonnées doubles représentant les coordonnées SCG 3D où placer le texte dans le dessin. La largeur du
texte est un nombre positif représentant la largeur de la zone de délimitation du texte. Elle est mesurée en unités courantes.
Après avoir créé un objet MText, vous pouvez lui appliquer une hauteur de texte, une justification, un angle de rotation et un style, ou appliquer un formatage à
des caractères sélectionnés.
Reportez-vous à la section traitant de MText dans le manuel ActiveX and VBA Reference d'AutoCAD pour obtenir la liste des méthodes et propriétés des objets
MText.
L'exemple de code suivant crée un objet MText dans l'espace objet à la coordonnée (2, 2, 0).
Sub Ch4_CreateMText()
Dim mtextObj As AcadMText
Dim insertPoint(0 To 2) As Double
Dim width As Double
Dim textString As String
insertPoint(0) = 2
insertPoint(1) = 2
insertPoint(2) = 0
width = 4
textString = "This is a text string for the mtext object."
' Create a text Object in model space
Set mtextObj = ThisDrawing.ModelSpace. _
AddMText(insertPoint, width, textString)
ZoomAll
End Sub
Le nouveau texte que vous entrez a dopte automatiquement les caractéristiques du style de texte courant. Le style de texte STANDARD est utilisé par défaut.
Vous pouvez ignorer le style de texte par défaut en appliquant un format de caractère individuel et des propriétés à l'objet Text. Vous pouvez également choisir
un formatage ou utiliser des caractères spéciaux à l'aide des méthodes décrites dans cette section.
Les propriétés telles que le style, la justification, la largeur et la rotation portent obligatoirement sur tout l'objet MText. Utilisez la propriété AttachmentPoint pour
modifier la justification du texte multiligne et la propriété Rotation pour gérer l'angle de rotation des bords du texte.
La propriété StyleName définit les polices et le formatage par défaut du nouveau texte. A mesure que vous créez du texte, vous pouvez sélectionner le style
que vous souhaitez utiliser, à partir d'une liste de styles existants. Lorsque vous modifiez le style d'un paragraphe contenant des caractères formatés, le style
est appliqué au paragraphe entier et le formatage de caractères n'est pas nécessairement conservé. Par exemple, si vous remplacez un style TrueType par u n
style utilisant une police SHX ou par une autre police TrueType, TrueType ne conserve aucun formatage et applique la nouvelle police au paragraphe entier.
Les options de formatage telles que le soulignement, le texte superposé ou les polices peuvent être appliquées individuellement aux mots et aux caractères
d'un paragraphe. Vous pouvez également changer la couleur, l a police et la hauteur de texte. Vous pouvez modifier l'espacement entre les différents caractères
du texte ou augmenter la largeur des caractères.
Pour appliquer le formatage à une partie du texte uniquement, placez le texte entre accolades ({ }). Huit niveaux d'imbrication sont possibles.
Vous pouvez également entrer les équivalents ASCII des codes de contrôle dans les lignes ou les paragraphes pour spécifier un style de formatage ou des
caractères spéciaux, tels que les symboles de tolérance ou de cotation.
Les caractères de contrôle suivants permettent de créer le texte de l'illustration : (Pour connaître l'équivalent ASCII de cette chaîne, reportez-vous à l'exemple
présenté après l'illustration.)
Pour de plus amples informations sur le formatage du texte multiligne, reportez-vous à la section “Formatage des caractères d'un texte multiligne” du Manuel
d'utilisation .
Sub Ch4_FormatMText()
Dim mtextObj As AcadMText
Dim insertPoint(0 To 2) As Double
Dim width As Double
Dim textString As String
insertPoint(0) = 2
insertPoint(1) = 2
insertPoint(2) = 0
width = 4
' Define the ASCII characters for the control characters
Dim OB As Long ' Open Bracket {
Dim CB As Long ' Close Bracket }
Dim BS As Long ' Back Slash \
Dim FS As Long ' Forward Slash /
Dim SC As Long ' Semicolon ;
OB = Asc("{")
CB = Asc("}")
BS = Asc("\")
FS = Asc("/")
SC = Asc(";")
' Assign the text string the following line of control
' characters and text characters:
' {{\H1.5x; Big text}\A2; over text\A1;/\A0; under text}
textString = Chr(OB) + Chr(OB) + Chr(BS) + "H1.5x" _
+ Chr(SC) + "Big text" + Chr(CB) + Chr(BS) + "A2" _
+ Chr(SC) + "over text" + Chr(BS) + "A1" + Chr(SC) _
+ Chr(FS) + Chr(BS) + "A0" + Chr(SC) + "under text" _
+ Chr(CB)
' Create a text Object in model space
Set mtextObj = ThisDrawing.ModelSpace. _
AddMText(insertPoint, width, textString)
ZoomAll
End Sub
Vous pouvez utiliser des caractères Unicode, des codes de contrôle et des caractères spéciaux dans une chaîne de texte pour représenter des symboles.
(Vous devez entrer tous les caractères spéciaux en utilisant leur équivalent ASCII.)
Vous pouvez créer des caractères spéciaux en entrant les chaînes de caractères Unicode suivantes :
En plus de l'utilisation de caractères Unicode pour obtenir des caractères spéciaux, vous pouvez spécifier un caractère spécial en incluant des informations de
contrôle dans la chaîne de caractères. Entrez deux signes de pourcentage (%%) au début de chaque séquence de contrôle. Ainsi, le code de contrôle suivant
permet, avec les polices de texte standard d'AutoCAD et les polices PostScript, de dessiner le caractère nnn :
%%nnn
Dans une chaîne de texte VB ou VBA, cet exemple serait entré comme suit :
Les codes de contrôle suivants sont compatibles seulement avec les polices de texte standard d'AutoCAD :
Polices de substitution
Vous pouvez désigner les polices que vous désirez utiliser à la place d'autres polices ou comme polices par défaut lorsque AutoCAD ne parvient pas à localiser
la police spécifiée dans un dessin.
Les polices utilisées pour le texte de votre dessin sont définies par le style de texte et, dans le cas des paragraphes, par les options de formatage appliquées à
certaines parties du texte.
Vous pouvez utiliser des tables de correspondance des polices pour vous assurer que votre dessin ne contiendra que certaines polices, mais également pour
convertir les polices utilisées en d'autres polices. Ces tables permettent de respecter les normes définies par votre entreprise en matière de police ou de faciliter
le traitement en différé des fichiers. AutoCAD est fourni avec une table de correspondance de polices par défaut. Vous pouvez modifier ce fichier à partir de
n'importe quel éditeur de texte ASCII. Il est également possible de spécifier une autre table de correspondance des polices en utilisant l a propriété FontFileMap
sur l'objet Preferences
Pour de plus amples informations sur les correspondances entre polices et sur leur substitution, reportez-vous à la section “Polices de substitution” du Manuel
d'utilisation .
Si votre dessin utilise une police non installée sur le système, AutoCAD la remplace automatiquement par la police de substitution que vous avez choisie. Par
défaut, AutoCAD utilise le fichier simplex.shx . Toutefois, vous pouvez spécifier une autre police si nécessaire. Utilisez la propriété AltFontFile de l'objet
Preferences pour choisir le fichier de la police de substitution.
Si votre style de texte u tilise une grande police, vous pouvez mapper cette police sur une autre police en utilisant la propriété AltFontFile. Cette variable
système utilise par défaut la paire d e fichiers de police txt.shx , bigfont.shx .
Si AutoCAD ne trouve pas le fichier de police à l'ouverture d'un dessin, il applique un ensemble prédéfini de règles de substitution.
Vérification orthographique
AutoCAD effectue la vérification orthographique en comparant les mots du dessin à ceux du dictionnaire principal courant. Les mots que vous ajoutez sont
placés dans le dictionnaire personnalisé actif au moment de la vérification. Vous pouvez, par exemple, ajouter des noms propres pour éviter qu'AutoCAD
indique systématiquement une faute d'orthographe.
Pour effectuer la vérification dans une autre langue, changez de dictionnaire principal.
L'Automatisation ActiveX d'AutoCAD ne propose aucune méthode de vérification de l'orthographe. Toutefois, vous pouvez spécifier un dictionnaire principal
différent à l'aide de la propriété MainDictionary, ou un dictionnaire personnalisé différent à l'aide de la propriété CustomDictionary de l'objet Preferences
Pour de plus amples informations sur la vérification de l'orthographe, reportez-vous à la section “Vérification orthographique” du Manuel d'utilisation .
Cotes et tolérances
Les cotes ajoutent des dimensions à un dessin. Les tolérances définissent les écarts admissibles pour une cote fixée. Automatisation ActiveX vous permet de
gérer facilement la cotation à l'aide de styles de cotes et de styles de cotes modifiés.
Concepts de cotation
Création de cotes
Cotes et tolérances
Concepts de cotation
Les cotes indiquent les dimensions géométriques des objets, les distances qui les séparent ou les angles qu'ils décrivent, ou bien encore les coordonnées X et
Y d'un détail du dessin. AutoCAD ® propose trois types de cotes de base : linéaires, radiales et angulaires. Parmi les cotes linéaires se trouvent les cotes
alignées, rotatoires et superposées.
Vous pouvez créer des cotes pour des lignes, des multilignes, des arcs, des cercles et des segments de polylignes ou des cotes autonomes.
AutoCAD insère les cotes sur le calque courant. A chaque cote correspond un style de cote (il peut s'agir de celui appliqué par défaut ou d'un style que vous
avez créé vous-même). Le style de cote définit les différentes caractéristiques (couleur, style de texte et échelle du type de ligne) de la cote. Les informations de
hauteur ne sont pas prises en charge. Les familles de styles permettent de définir plusieurs variantes à partir d'un style de cote de référence, en fonction du
type de cote auquel les styles s'appliquent. Les styles de cote modifiés permettent de modifier le style d'une cote spécifique.
Pour de plus amples informations sur les cotes, reportez-vous à la section “Modification des objets” du Manuel d'utilisation .
Lignes de repère
Cotes associatives
Cotes et tolérances
Une ligne de cote indique dans quelle direction l'objet est coté et la dimension prise en compte. Dans le cas d'une cote angulaire, la ligne de cote est un arc. Les
lignes d'attache, également appelées lignes de projection, relient l'élément mesuré à la ligne de cote. Les symboles d'extrémités matérialisent le début et la fin
de la ligne de cote. Le texte de cote (chaîne de caractères facultative) indique généralement la dimension réelle de l'objet mesuré. Vous pouvez y accoler des
préfixes, des suffixes et des tolérances. Une ligne de repère désigne le détail du dessin auquel s'applique une annotation. Une marque centrale est une petite
croix qui sert à représenter le centre d'un cercle ou d'un arc. Les axes (lignes discontinues) servent à représenter le centre d'un cercle ou d'un arc.
Pour de plus amples informations sur les éléments de cotation, reportez-vous à la section “Eléments d'une cote” du Manuel d'utilisation .
Cotes et tolérances
Les variables système de cotation déterminent l'aspect des cotes dans le dessin. Les variables système de cotation incluent DIMAUNIT, DIMUPT, DIMTOFL,
DIMFIT, DIMTIH, DIMTOH, DIMJUST et DIMTAD. Elles sont définies à l'aide de la méthode SetVariable Par exemple, la ligne de code suivante définit la
variable système DIMAUNIT (format d'unités pour des cotes angulaires) sur (3) radians :
ThisDrawing.SetVariable "DIMAUNIT", 3
Pour de plus amples informations sur les variables système de cotation, reportez-vous à la section “Utilisation des styles de cote” du Manuel d'utilisation .
Cotes et tolérances
Le texte de cote se rapporte à tout type de texte associé à des cotes, y compris les dimensions, les tolérances (latérales et géométriques), les préfixes, les
suffixes et les notes textuelles présentées sur une simple ligne ou sous forme de paragraphe. Vous pouvez utiliser les dimensions calculées par défaut par
AutoCAD comme texte, insérer votre propre texte ou supprimer la totalité du texte. De plus, il est possible d'utiliser un texte de cote pour ajouter des
informations relatives à un processus de fabrication spécial ou à des instructions de montage, par exemple.
Le texte de cote sur une ligne utilise le style de texte courant spécifié par la propriété ActiveTextStyle Les paragraphes de texte utilisent le style courant avec
toutes les modifications que vous avez effectuées dans la chaîne de texte.
Pour de plus amples informations sur le texte de cotation, reportez-vous à la section “Contrôle du texte de la cote” du Manuel d'utilisation .
Cotes et tolérances
Lignes de repère
Par défaut, une ligne de repère est une ligne droite avec une pointe de flèche qui fait référence à une fonction d'un dessin. En règle générale, une ligne de
repère a pour fonction de connecter une annotation à la fonction. Dans ce cas, l'annotation correspond à un paragraphe de texte, à des blocs ou à des cadres
de tolérance. De telles lignes diffèrent des lignes de repère simples créées automatiquement pour des cotes radiales, de diamètre et linéaires dont le texte est
trop long pour être entièrement inséré sur les lignes d'attache.
Les objets de la ligne de repère sont associés à l'annotation si bien que lorsque cette dernière est modifiée, la ligne de repère est mise à jour en conséquence.
Vous pouvez copier une annotation utilisée n'importe où dans un dessin et l'ajouter à une ligne de repère ou créer une nouvelle annotation. Vous pouvez
également créer une ligne de repère sans annotation.
Pour de plus amples informations sur les lignes de repère, reportez-vous à la section “Présentation de la création de texte et de repères” du Manuel d'utilisation .
Cotes et tolérances
Cotes associatives
Les cotes associatives ajustent automatiquement leur emplacement, leur orientation et leurs valeurs de mesure lorsque les objets géométriques qui leur sont
associés sont modifiés. La variable système DIMASSOC contrôle la cote associative. Attribuez à DIMASSOC la valeur 2 pour activer la cote associative.
Pour de plus amples informations sur les cotes associatives, reportez-vous à la section “Cotes associatives” du Manuel d'utilisation .
Cotes et tolérances
Création de cotes
Lorsque vous créez des cotes, le style actif est appliqué. Une fois la cote créée, vous pouvez modifier les points de départ des l ignes d'attache, l'emplacement
du texte de cote, son contenu et son angle par rapport à la ligne de cote. Vous pouvez également modifier le style de la cote.
Pour de plus amples informations sur la création de cotations, reportez-vous à la section “Modification des objets” du Manuel d'utilisation .
Cotes et tolérances
Les cotes linéaires peuvent être alignées ou pivotées. Dans le premier cas, la ligne de cote est parallèle à la ligne au niveau de laquelle commencent les lignes
d'attache. Dans les cotes en rotation, la ligne de cote subit une rotation d'un angle donné par rapport à l'origine des lignes d'attache.
Pour créer une cote linéaire, utilisez la méthode AddDimAligned ou AddDimRotated Après avoir créé des cotes linéaires, vous pouvez non seulement modifier
le texte et son inclinaison, mais aussi l'angle d'orientation de la ligne de cote. Dans les illustrations suivantes, les points de départ des lignes d'attache sont
désignés de façon explicite. L'emplacement de la li gne de cote en résultant est également affiché.
Pour créer une cote alignée, utilisez la méthode AddDimAligned. Cette méthode requiert la saisie de trois coordonnées : l'origine des deux lignes d 'attache et la
position du texte.
Pour créer une cote rotatoire, utilisez la méthode AddDimRotated. Cette méthode requiert l'entrée de trois coordonnées et de l'angle de la ligne de cote. Les
trois coordonnées sont les points de départ des deux lignes d'attache et définissent l'emplacement du texte. L'angle doit être défini en radians ; il s' agit de
l'angle de rotation de la ligne de cote.
Pour de plus amples informations sur la création de cotes linéaires, reportez-vous à la section “Création de cotes linéaires” du Manuel d'utilisation .
Cotes et tolérances
Les cotes radiales permettent de mesurer les rayons et les diamètres des arcs et des cercles. Pour créer une cote radiale, utilisez la méthode AddDimRadial
Différents types de cotes radiales sont créés en fonction de la taille du cercle ou de l'arc, de la propriété TextPosition et des valeurs des variables système de
cotation DIMUPT, DIMTOFL, DIMFIT, DIMTIH, DIMTOH, DIMJUST et DIMTAD. (Ces variables peuvent être interrogées ou définies à l'aide des méthodes
GetVariable et SetVariable.)
Pour le texte de cote horizontal, si l'angle de la ligne de cote est supérieur à 15 degrés par rapport à l'horizontale et qu'il est en dehors du cercle ou de l'arc,
AutoCAD trace une attache de repère. Cette attache a la taille d'une pointe de flèche et est située à côté du texte de cote, comme indiqué sur la première des
figures qui suivent:
Pour créer des cotes radiales, utilisez la méthode AddDimRadial ou AddDimDiametric Ces méthodes requièrent la saisie de trois valeurs : la coordonnée du
cercle ou le centre de l'arc, la coordonnée pour l'association à la ligne de repère et la longueur de la ligne de repère.
Ces méthodes utilisent le paramètre LeaderLength comme distance entre ChordPoint et le point où la cote forme une attache de repère horizontale par
rapport au texte d'annotation (ou s'arrête si aucune attache de repère n'est requise).
Pour de plus amples informations sur la création de cotes radiales, reportez-vous à la section “Création de cotes radiales” du Manuel d'utilisation .
Dans cet exemple, une cote radiale est créée dans l'espace objet.
Sub Ch5_CreateRadialDimension()
Dim dimObj As AcadDimRadial
Dim center(0 To 2) As Double
Dim chordPoint(0 To 2) As Double
Remarque Le paramètre LeaderLength n'est utilisé que lors de la création de la cote (et même dans ce cas, uniquement si la cote est paramétrée pour utiliser
la valeur d'emplacement de texte par défaut). Une fois la cote refermée pour la première fois, le changement de la valeur de ce paramètre ne modifie pas
l'affichage de la cote ; toutefois, le nouveau paramètre est enregistré et apparaît dans les applications DXF, LISP et ADSRX.
Cotes et tolérances
Les cotes angulaires mesurent l'angle entre deux li gnes ou trois points. Ce type de cote sert à mesurer l'angle formé par deux lignes (deux rayons d'un cercle,
par exemple). Dans ce cas, la ligne de cote prend la forme d'un arc.
Pour créer une cote angulaire, utilisez la méthode AddDimAngular Cette méthode requiert la saisie de trois valeurs : le sommet de l'angle, les points de départ
des lignes d'attache et la position du texte. Le paramètre AngleVertex correspond au centre du cercle ou de l'arc, ou du sommet commun entre deux lignes
cotées. Les points de départ des lignes d'attache sont les points par lesquels ces deux lignes passent.
Le sommet de l'angle peut coïncider avec un des points de départ. Si vous avez besoin de lignes d'attache, elles sont ajoutées automatiquement.
Pour de plus amples informations sur la création de cotes angulaires, reportez-vous à la section “Création de cotes angulaires” du Manuel d'utilisation .
Dans cet exemple, une cote angulaire est créée dans l'espace objet.
Sub Ch5_CreateAngularDimension()
Dim dimObj As AcadDimAngular
Dim angVert(0 To 2) As Double
Dim FirstPoint(0 To 2) As Double
Dim SecondPoint(0 To 2) As Double
Dim TextPoint(0 To 2) As Double
' Define the dimension
angVert(0) = 0
angVert(1) = 5
angVert(2) = 0
FirstPoint(0) = 1
FirstPoint(1) = 7
FirstPoint(2) = 0
SecondPoint(0) = 1
SecondPoint(1) = 3
SecondPoint(2) = 0
TextPoint(0) = 3
TextPoint(1) = 5
TextPoint(2) = 0
' Create the angular dimension in model space
Set dimObj = ThisDrawing.ModelSpace. _
AddDimAngular(angVert, FirstPoint, SecondPoint, TextPoint)
ZoomAll
End Sub
Cotes et tolérances
Les cotes superposées (ou cotes d'ordonnées) permettent d'indiquer la distance entre un point de référence e t un élément du dessin (centre d'un trou sur une
pièce, par exemple). En effectuant toutes les mesures à partir du même point de référence, vous évitez les risques d'erreur et d'imprécision résultant du total
cumulé des distances.
Elles sont constituées d'une ordonnée ( X ou Y ) et d'une ligne de repère. Les cotes superposées X mesurent la distance d'un point à partir de la référence sur
l'axe des X . L'ordonnée Y définit la même distance sur l'axe Y . Les coordonnées sont calculées en fonction de l'origine du système de coordonnées utilisateur
(SCU) actuel. La valeur absolue de l a coordonnée est utilisée.
Le texte est aligné par rapport à la ligne de repère, quelle que soit l'orientation du texte définie par le style de cote courant. Vous pouvez accepter la valeur
proposée par défaut ou entrer votre propre texte.
Pour créer une cote superposée, utilisez la méthode AddDimOrdinate Cette méthode requiert la saisie de trois valeurs : une coordonnée spécifiant le point à
coter (A), une autre spécifiant l'extrémité de la ligne de repère (B) et un drapeau booléen indiquant si la cote est en coordonnée X ou en coordonnée Y . Si vous
entrez TRUE comme valeur du drapeau booléen, la méthode crée une cote en coordonnée X . Si vous entrez FALSE, une cote en coordonnée Y est créée.
Pour de plus amples informations sur la création de cotes superposées, reportez-vous à la section “Création de cotes superposées” du Manuel d'utilisation .
Dans cet exemple, une cote superposée est créée dans l'espace objet.
Sub Ch5_CreatingOrdinateDimension()
Dim dimObj As AcadDimOrdinate
Dim definingPoint(0 To 2) As Double
Dim leaderEndPoint(0 To 2) As Double
Dim useXAxis As Long
' Define the dimension
definingPoint(0) = 5
definingPoint(1) = 5
definingPoint(2) = 0
leaderEndPoint(0) = 10
leaderEndPoint(1) = 5
leaderEndPoint(2) = 0
useXAxis = 5
' Create an ordinate dimension in model space
Set dimObj = ThisDrawing.ModelSpace. _
AddDimOrdinate(definingPoint, _
leaderEndPoint, useXAxis)
ZoomAll
End Sub
Cotes et tolérances
Comme tout autre objet graphique dans AutoCAD, les cotes peuvent être modifiées à l'aide des méthodes et propriétés standard fournies pour l'objet.
Les propriétés suivantes sont disponibles pour la plupart des objets de cote :
Rotation
Spécifie, en radians, l'angle de rotation de la ligne de cote.
StyleName
Spécifie le nom du style de cote.
TextOverride
Spécifie la chaîne de texte de la cote.
TextPosition
Spécifie la position du texte de cote.
TextRotation
Spécifie l'angle de rotation du texte de cote.
Measurement
Spécifie la mesure effective de la cote.
En outre, certains objets de cote fournissent des propriétés d'édition des points de départ des lignes d'attache et de la longueur de la ligne de repère.
Les méthodes suivantes sont utilisées pour la modification des objets de cote :
ArrayPolar
Crée un réseau polaire.
ArrayRectangular
Crée un réseau rectangulaire.
Copy
Copie l'objet de cote.
Erase
Supprime l'objet de cote.
Mirror
Fait une copie miroir de l'objet de cote.
Move
Déplace l'objet de cote.
Rotate
Fait pivoter l'objet de cote.
ScaleEntity
Met à l'échelle l'objet de cote.
Pour de plus amples informations sur la modification de cotes, reportez-vous à la section “Modification des cotes existantes” du Manuel d'utilisation .
Cotes et tolérances
La valeur de cote affichée peut être remplacée via la propriété TextOverride Cette propriété permet de remplacer la valeur de cote affichée ou d'y ajouter du
texte.
Dans cet exemple, du texte est ajouté à la valeur afin qu'il apparaisse avec la valeur de cote.
Sub Ch5_OverrideDimensionText()
Dim dimObj As AcadDimAligned
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Dim location(0 To 2) As Double
' Define the dimension
point1(0) = 5#: point1(1) = 3#: point1(2) = 0#
point2(0) = 10#: point2(1) = 3#: point2(2) = 0#
location(0) = 7.5: location(1) = 5#: location(2) = 0#
' Create an aligned dimension object in model space
Set dimObj = ThisDrawing.ModelSpace. _
AddDimAligned(point1, point2, location)
' Change the text string for the dimension
dimObj.TextOverride = "The value is <>"
dimObj.Update
End Sub
Cotes et tolérances
Un style de cote nommé est un groupe de paramètres de cote q ui détermine l'aspect de la cote. Les styles de cote permettent de respecter certaines normes en
matière de dessin.
Lorsque vous créez une cote, elle adopte automatiquement le style actif. Si aucun style n'est défini ou appliqué, AutoCAD applique le style par défaut
(STANDARD). Pour définir le style de cote actif, utilisez la propriété ActiveDimStyle
Pour définir un style de cote parent, vous devez commencer par l'enregistrer sous un nouveau nom. Le nouveau style est défini à partir du style de cote courant
et contient toutes les modifications apportées à la présentation des éléments de cote, à l' emplacement du texte et à l'aspect d e l'annotation. Les annotations
concernent ici les unités principales et alternatives, les tolérances et le texte.
Pour de plus amples informations sur les styles de cote, reportez-vous à la section “Utilisation des styles de cote” du Manuel d'utilisation .
Cotes et tolérances
Pour créer un style de cote, utilisez la méthode Add Cette méthode requiert l'entrée du nom du nouveau style de cote.
L'Automatisation ActiveX d'AutoCAD vous permet d'ajouter de nouveaux styles de cotes et de modifier le style actif. Vous pouvez également changer le style de
cote associé à une cote donnée via la propriété StyleName
Vous pouvez également copier un style de cote existant ou un ensemble de styles de cotes modifiés. Utilisez la méthode CopyFrom pour copier un style de cote
d'un objet source vers un nouveau style de cote. L'objet source peut être un autre objet DimStyle, Dimension, Tolerance ou Leader, voire un objet Document Si
vous copiez les paramètres de style d'un autre style de cote, une copie exacte de ce style est faite. Si vous copiez les paramètres de style d'un objet Dimension,
Tolerance ou Leader, les paramètres actifs y compris les modifications d'objets sont copiés dans le nouveau style. Si vous copiez le style d'un objet Document,
le style de cote actif et toute modification apportée au dessin sont copiés dans le nouveau style.
L'exemple suivant crée trois styles de cotes et copie les paramètres actifs du document, un style de cote donné et une cote dans chacun de ces nouveaux
styles. En suivant la configuration appropriée avant d'exécuter cet exemple de code, vous vous rendrez compte que plusieurs styles de cotes ont été créés.
Sub Ch5_CopyDimStyles()
Dim newStyle1 As AcadDimStyle
Dim newStyle2 As AcadDimStyle
Dim newStyle3 As AcadDimStyle
Set newStyle1 = ThisDrawing.DimStyles.Add _
("Style 1 copied from a dim")
Call newStyle1.CopyFrom(ThisDrawing.ModelSpace(0))
Set newStyle2 = ThisDrawing.DimStyles.Add _
("Style 2 copied from Style 1")
Call newStyle2.CopyFrom(ThisDrawing.DimStyles.Item _
("Style 1 copied from a dim"))
Set newStyle2 = ThisDrawing.DimStyles.Add _
("Style 3 copied from the running drawing values")
Call newStyle2.CopyFrom(ThisDrawing)
End Sub
Ouvrez la boîte de dialogue DIMSTYLE Elle doit contenir trois styles de cote. Le Style 1 doit avoir une ligne de cote jaune. Le style 2 doit être identique au Style
1 et le Style 3 doit avoir une ligne de cote bleue.
Cotes et tolérances
Chaque cote peut remplacer ses propres paramètres de style de cote. Les propriétés suivantes sont disponibles pour la plupart des objets de cote :
AltRoundDistance
Définit l'arrondi des unités alternatives.
AngleFormat
Définit le format d'unités des cotes angulaires.
Arrowhead1Block, Arrowhead2Block
Indiquent quel bloc utiliser comme pointe de flèche personnalisée pour la ligne de cote.
Arrowhead1Type, Arrowhead2Type
Définissent un type de pointe de flèche pour la ligne de cote.
ArrowheadSize
Indique la taille des pointes de flèche de la ligne de cote, de la ligne de repère et des attaches de repère.
CenterMarkSize
Indique la taille de la marque centrale des cotes des diamètres et des rayons.
CenterType
Indique le type de marque centrale pour les cotes des diamètres et des rayons.
DecimalSeparator
Indique quel caractère utiliser comme séparateur décimal dans les valeurs de tolérance et de cote décimale.
DimensionLineColor
Indique la couleur de la ligne de cote pour un objet de tolérance, de ligne de repère ou de cote.
DimensionLineWeight
Indique l'épaisseur des lignes de cote.
DimLine1Suppress, DimLine2Suppress
Spécifient la suppression des lignes de cote.
DimLineInside
Spécifie l'affichage des lignes de cote u niquement au sein des lignes d'attache.
ExtensionLineColor
Spécifie la couleur des lignes d'attache des cotes.
ExtensionLineExtend
Indique la distance de la ligne d'attache au-delà de la ligne de cote.
ExtensionLineOffset
Indique le décalage des lignes d'attache par rapport aux points d'origine.
ExtensionLineWeight
Indique l'épaisseur des lignes d'attache.
ExtLine1EndPoint, ExtLine2EndPoint
Spécifient l'extrémité des lignes d'attache.
ExtLine1StartPoint, ExtLine2StartPoint
Spécifient le point de départ des lignes d'attache.
ExtLine1Suppress, ExtLine2Suppress
Spécifient la suppression des lignes d'attache.
Fit
Indique l'emplacement du texte et des pointes de flèches au sein ou en dehors des lignes d'attache.
ForceLineInside
Indique si une ligne de cote est tracée entre les lignes d'attache même si le texte est à l'extérieur de ces lignes d'attache.
FractionFormat
Indique le format des valeurs de cotes et de tolérances fractionnaires.
HorizontalTextPosition
Définit la justification horizontale du texte de cote.
LinearScaleFactor
Définit un facteur d'échelle global pour l es cotes linéaires.
PrimaryUnitsPrecision
Fixe le nombre de décimales affichées pour les unités de cotation et de tolérance principales.
SuppressLeadingZeros, SuppressTrailingZeros
Spécifient la suppression des zéros de début et de fin dans les valeurs de cote.
SuppressZeroFeet, SuppressZeroInches
Spécifient la suppression des valeurs de cote en pieds et en pouces égales à zéro.
TextColor
Indique la couleur du texte pour les objets de tolérance et de cote.
TextGap
Spécifie la distance entre le texte et la ligne de cote lorsque vous fragmentez cette ligne pour afficher le texte de cote.
TextHeight
Indique la hauteur du texte de tolérance ou de cote.
TextInside
Indique si le texte de cote doit être tracé dans les lignes d'attache.
TextInsideAlign
Contrôle la position du texte de cote à l'intérieur des lignes d'attache pour tous les types de cotes à l'exception de celles en coordonnées.
TextMovement
Indique de quelle façon le texte de cote est tracé lorsqu'il est déplacé.
TextOutsideAlign
Spécifie la position du texte de cote à l'extérieur des lignes d'attache pour tous les types de cotes à l'exception de celles en coordonnées.
TextPosition
Spécifie la position du texte de cote.
TextPrecision
Spécifie la précision du texte de cote angulaire.
TextPrefix
Indique le préfixe de la valeur de cote.
TextRotation
Spécifie l'angle de rotation du texte de cote.
TextSuffix
Indique le suffixe de la valeur de cote.
ToleranceDisplay
Indique si des tolérances sont affichées avec le texte de cote.
ToleranceHeightScale
Définit un facteur d'échelle pour la hauteur de texte des valeurs de tolérance en fonction de la hauteur du texte de cote.
ToleranceJustification
Définit la justification verticale des valeurs de tolérance en fonction du texte de cote nominal.
ToleranceLowerLimit
Définit la limite de tolérance minimale pour le texte de cote.
TolerancePrecision
Spécifie la précision des valeurs de tolérance dans des cotes principales.
ToleranceSuppressLeadingZeros
Spécifie la suppression des zéros au début des valeurs de tolérance.
ToleranceSuppressTrailingZeros
Spécifie la suppression des zéros à la fin des valeurs de tolérance.
ToleranceUpperLimit
Définit la limite de tolérance maximale pour le texte de cote.
UnitsFormat
Définit le format d'unités de toutes les cotes à l'exception des cotes angulaires.
VerticalTextPosition
Définit la position verticale du texte par rapport à la ligne de cote.
Dans cet exemple, une cote alignée est créée dans l'espace objet et la propriété TextSuffix est utilisée pour permettre à l'utilisateur de changer le suffixe du
texte de la cote.
Sub Ch5_AddTextSuffix()
Dim dimObj As AcadDimAligned
Dim point1(0 To 2) As Double
Dim point2(0 To 2) As Double
Dim location(0 To 2) As Double
Dim suffix As String
' Define the dimension
point1(0) = 0: point1(1) = 5: point1(2) = 0
point2(0) = 5: point2(1) = 5: point2(2) = 0
location(0) = 5: location(1) = 7: location(2) = 0
' Create an aligned dimension object in model space
Set dimObj = ThisDrawing.ModelSpace. _
AddDimAligned(point1, point2, location)
ThisDrawing.Application.ZoomAll
' Allow the user to change the text suffix for the dimension
suffix = InputBox("Enter a new text suffix for the dimension" _
, "Set Dimension Suffix", ":SUFFIX")
' Apply the change to the dimension
dimObj.TextSuffix = suffix
ThisDrawing.Regen acAllViewports
End Sub
Cotes et tolérances
Vous pouvez définir des cotes aussi bien dans l'espace papier que dans l'espace objet. Toutefois, si la géométrie que vous cotez se trouve dans l'espace objet,
il est préférable de définir les cotes dans cet espace également. En effet, AutoCAD insère les points de définition des cotes dans l'espace où figure la
géométrie.
Si vous définissez une cote dans l'espace papier pour mesurer une géométrie dans votre modèle, la cote ne subit aucune modification lorsque vous utilisez des
commandes d'édition ou que vous changez l'agrandissement de la vue dans la fenêtre de l'espace objet. La position des cotes de l'espace papier reste la même
lorsque vous passez de l'espace papier à l'espace objet.
Si vous cotez des objets dans l'espace papier et que le facteur d'échelle global pour la cotation linéaire (la variable système DIMLFAC) est inférieur à zéro, la
distance mesurée est multipliée par la valeur absolue de DIMLFAC. Si vous cotez des objets dans l'espace objet, la valeur 1.0 est appliquée, même si la valeur
de la variable DIMLFAC est inférieure à 0. AutoCAD calcule la valeur de cette variable DIMLFAC si vous la modifiez à l'invite Cot, puis sélectionnez l'option
Fenêtre. Il calcule le facteur d'échelle de l'espace objet en fonction de l' espace papier et affecte la valeur négative correspondant à la variable DIMLFAC.
Cotes et tolérances
Une ligne de repère permet de relier des annotations à un élément du dessin. Ces lignes et leurs annotations sont associatives: si vous modifiez l'un de ces
deux éléments, l'autre est mis à jour en conséquence. Ne confondez pas l'objet Leader avec la ligne de repère qu'AutoCAD génère automatiquement en tant
qu'élément de la ligne de cote.
Pour de plus amples informations sur les lignes de repère, reportez-vous à la section “Création de texte avec repères” du Manuel d'utilisation .
Cotes et tolérances
Vous pouvez créer une ligne de repère à partir d'un point ou d'un élément quelconque du dessin et définir l'aspect de la ligne au moment où vous la générez.
Les lignes de repère ont la forme de segments de droite ou de courbes splines régulières. Leur couleur est fonction de la couleur de la ligne de cote en cours.
En revanche, leur valeur d'échelle dépend du facteur d'échelle général défini pour le style de cote actif. Le type et la taille des extrémités en forme de flèche (le
cas échéant) correspondent à la première extrémité définie pour le style actif.
Il arrive parfois qu'une petite ligne, appelée ligne de repère, connecte l'annotation à la ligne de repère. Cela se produit lorsque vous insérez des p aragraphes ou
des cadres de tolérance, ou lorsque le dernier segment de la ligne de repère forme un angle supérieur à 15 degrés par rapport à l'horizontale. La longueur de
l'attache de repère est égale à celle d'une pointe de flèche. Si la ligne de repère n'a pas d'annotation, aucune attache de repère ne lui est associée.
Pour créer une ligne de repère, utilisez la méthode AddLeader Cette méthode requiert la saisie de trois valeurs : le tableau de coordonnées spécifiant où créer
la ligne de repère, l'objet annotation (ou NULL si la ligne de repère ne comporte pas d'annotation) et le type de ligne de repère à créer. Le type de ligne de
repère indique s'il s'agit d'une ligne droite ou d'une courbe spline lisse Elle détermine aussi si la ligne de repères à des flèches. Utilisez l'une des constantes
suivantes pour spécifier le type de ligne de repère : acLineNoArrow, acLineWithArrow, acSplineNoArrow ou acSplineWithArrow. Ces constantes
sont mutuellement exclusives.
Dans cet exemple, une ligne de repère est créée dans l'espace objet. Aucune annotation n'est associée à la l igne de repère.
Sub Ch5_CreateLeader()
Dim leaderObj As AcadLeader
Dim points(0 To 8) As Double
Dim leaderType As Integer
Dim annotationObject As AcadObject
points(0) = 0: points(1) = 0: points(2) = 0
points(3) = 4: points(4) = 4: points(5) = 0
points(6) = 4: points(7) = 5: points(8) = 0
leaderType = acLineWithArrow
Set annotationObject = Nothing
' Create the leader object in model space
Set leaderObj = ThisDrawing.ModelSpace. _
AddLeader(points, annotationObject, leaderType)
ZoomAll
End Sub
Cotes et tolérances
Une annotation de ligne de repère peut être un objet Tolerance, MText ou BlockRef. Vous pouvez créer une annotation ou ajouter une copie d'une annotation
existante. Les annotations sont ajoutées aux lignes de repère uniquement lorsque celles-ci sont créées.
Pour ajouter une annotation lorsqu'une ligne de repère est créée, saisissez-la dans la méthode AddLeader
Cotes et tolérances
Les lignes de repère étant associées à leur annotation, lorsqu'elles sont déplacées, l'extrémité de la ligne de repère est également déplacée. Lorsque vous
déplacez l'annotation d'un texte ou d'un cadre de tolérance, le dernier segment de la ligne de repère passe à gauche au à droite de l'annotation en fonction de
l'avant-dernier point (du deuxième au dernier) de la ligne de repère. Si le milieu de l'annotation se trouve à droite de l'avant-dernier point de la ligne de repère,
cette dernière est attachée à droite ; sinon, elle est attachée à gauche.
La suppression d'un des deux objets du dessin à l'aide de la méthode Erase, Add (pour l'ajout d'un bloc) ou WBlock rompt l'associativité. Si la ligne de repère et
son annotation sont copiées en même temps, la nouvelle copie est associative. Si ces deux éléments sont copiés séparément, ils ne seront pas associatifs. Si
l'associativité est rompue pour une raison quelconque, par exemple lors de la copie d'un seul objet Leader ou de l'effacement de l'annotation, l'attache de
repère est supprimée de la ligne de repère.
Dans cet exemple, un objet MText est créé. Une ligne de repère est créée à son tour e n utilisant l'objet MText comme annotation.
Sub Ch5_AddAnnotation()
Dim leaderObj As AcadLeader
Dim mtextObj As AcadMText
Dim points(0 To 8) As Double
Dim insertionPoint(0 To 2) As Double
Dim width As Double
Dim leaderType As Integer
Cotes et tolérances
Mise à part la relation d'associativité qui les unit, la ligne de repère et son annotation sont des objets entièrement distincts dans votre dessin. Les modifications
apportées à la ligne de repère ne concernent pas l'annotation et celles qui sont effectuées dans les annotations ne s'appliquent pas à la ligne de repère.
Vous pouvez créer une annotation de texte à l'aide des variables système DIMCLRT, DIMTXT et DIMTXSTY pour définir sa couleur, sa hauteur et son style,
mais vous ne pouvez pas recourir à ces dernières pour la modifier, car il ne s'agit pas d'un objet de dimension réelle. L'annotation d'un texte doit être modifiée
comme tout autre objet Mtext.
Utilisez la méthode Evaluate pour évaluer la relation entre la ligne de repère et l'annotation qui lui est associée. Cette méthode met à jour la géométrie de la
ligne de repère si besoin.
Cotes et tolérances
Toute modification apportée à l'annotation d'une ligne de repère que vous déplacez affecte l'emplacement du milieu de la ligne de repère associée. De plus, la
rotation de l'annotation entraîne la rotation de la ligne de repère (le cas échéant).
Pour redimensionner une ligne de repère, il suffit de la mettre à l'échelle. La mise à l'échelle s'applique uniquement à l'élément sélectionné. Si, par exemple,
vous changez l'échelle de la ligne de repère, l'annotation reprend la même position par rapport à l'extrémité de la ligne de repère mais ne change pas de
dimension.
Outre leur mise à l'échelle, vous pouvez déplacer les lignes de repère, en faire une copie miroir ou les faire pivoter. Utilisez les méthodes ScaleEntity, Move,
Mirror et Rotate pour modifier une li gne de repère. Vous pouvez également changer le style de texte associé à l' annotation via la propriété StyleName
Cotes et tolérances
Les tolérances géométriques représentent les écarts admissibles de forme, de profil, d'orientation, de position et de battement. Elles sont inscrites dans des
cadres de tolérance. Ceux-ci contiennent toutes les indications de tolérance d'une cote.
Pour de plus amples informations sur les cadres de tolérance et les tolérances géométriques, reportez-vous à la section “Ajout de tolérances géométriques” du
Manuel d'utilisation .
Modification de tolérances
Cotes et tolérances
Pour créer une tolérance géométrique, utilisez la méthode AddTolerance Cette méthode requiert la saisie de trois valeurs : la chaîne de texte contenant le
symbole de tolérance, l'emplacement de la tolérance dans le dessin et un vecteur de direction indiquant la direction de cette tolérance. Vous pouvez également
copier, déplacer, effacer, mettre à l'échelle et faire pivoter des tolérances.
Dans cet exemple, une tolérance géométrique simple est créée dans l'espace objet.
Sub Ch5_CreateTolerance()
Dim toleranceObj As AcadTolerance
Dim textString As String
Dim insertionPoint(0 To 2) As Double
Dim direction(0 To 2) As Double
' Define the tolerance object
textString = "Here is the Feature Control Frame"
insertionPoint(0) = 5
insertionPoint(1) = 5
insertionPoint(2) = 0
direction(0) = 1
direction(1) = 1
direction(2) = 0
' Create the tolerance object in model space
Set toleranceObj = ThisDrawing.ModelSpace. _
AddTolerance(textString, insertionPoint, direction)
ZoomAll
End Sub
Cotes et tolérances
Modification de tolérances
Les tolérances sont régies par plusieurs variables système : DIMCLRD contrôle la couleur du cadre de tolérance ; DIMCLRT contrôle la couleur du texte de
tolérance ; DIMGAP contrôle la distance entre le cadre de tolérance et le texte ; DIMTXT contrôle la taille du texte de tolérance et DIMTXTSTY contrôle son
style. Utilisez la méthode SetVariable pour définir les valeurs des variables système.
Automatisation ActiveX d'AutoCAD vous offre un contrôle étendu de la personnalisation des menus et barres d'outils dans la session AutoCAD courante.
Les fonctionnalités ActiveX/VBA d'AutoCAD vous permettent de modifier ou d'accroître la structure de menu existante ou de remplacer la structure courante.
Vous pouvez également manipuler les barres d'outils et les menus accessibles par un clic avec le bouton droit de la souris.
La personnalisation des menus peut améliorer la productivité en exposant des tâches spécifiques à l'application ou en groupant en une sélection de menu
unique des tâches comportant plusieurs étapes.
Pour de plus amples informations sur la personnalisation des menus et des barres d'outils, reportez-vous au Customization Guide .
Création de macros
Création d'une aide de ligne d'état pour des options de menu et de barre d'outils
Les fonctionnalités ActiveX ® d'AutoCAD ® proposent plusieurs objets associés à des menus. Les deux plus importants sont les collections MenuBar et
MenuGroups La collection MenuBar contient tous les menus affichés dans la barre de menus d'AutoCAD.
La collection MenuGroups contient les groupes de menus chargés dans la session AutoCAD courante. Ces groupes contiennent, à leur tour, tous les menus
disponibles pour la session AutoCAD, certains ou l'ensemble pouvant être affichés dans la barre de menus d'AutoCAD. En plus des menus, les groupes de
menus contiennent toutes les barres d'outils disponibles pour la session AutoCAD courante. Les groupes de menus représentent également les menus
d'images, les menus écran ou les menus tablette.
Chaque groupe de menus contient une collection PopupMenus et une collection Toolbars La collection PopupMenus contient tous les menus affichés dans la
barre de menus. La collection Toolbars contient toutes les barres d'outils affichées dans le groupe de menus.
Chaque collection PopupMenu contient un objet individuel pour chaque o ption affichée dans ce menu. De même, chaque collection Toolbar contient un objet
individuel pour chaque option affichée dans cette barre d'outils.
Les groupes de menus sont chargés dans AutoCAD via la méthode Load. Par exemple, l'exemple suivant charge le fichier de personnalisation acad.cui :
ThisDrawing.Application.MenuGroups.Load "acad.cui"
Lorsque vous faites appel à cette méthode, définissez le paramètre BaseMenu sur TRUE pour charger un nouveau groupe de menus dans la barre de menus.
Le groupe de menus est alors chargé comme menu de base (voir la commande MENU d'AutoCAD).
Pour charger un nouveau groupe de menus en tant que menu partiel, omettez le paramètre BaseMenu. Le groupe de menus est alors chargé (voir la
commande CHARGMNU d'AutoCAD). Une fois chargés dans la collection MenuGroups, les menus partiels peuvent être insérés dans la barre de menus via la
Lorsqu'un groupe de menus a été chargé, tous les menus et b arres d'outils définis par ce groupe p euvent être utilisés. Vous pouvez
Remarque Les menus contextuels et les barres d'outils ne peuvent être modifiés qu'à l'aide d'Automatisation ActiveX. Toutefois, vous pouvez utiliser
Automatisation ActiveX pour charger et décharger d'autres types de menus, tels que les options de menu de mosaïque d'image, les menus d'écran ou les
menus de tablette.
Comme nous l'avons vu précédemment, la barre de menus peut être entièrement remplacée par un nouveau groupe de menus si ce groupe est chargé en tant
que menu de base. De plus, vous pouvez ajouter, supprimer ou réorganiser des menus individuels dans la barre de menus.
Pour insérer un menu existant dans la barre de menus, utilisez la méthode InsertMenuInMenuBar ou InsertInMenuBar Ces deux méthodes aboutissent au
même résultat : elles insèrent un menu existant dans la barre de menus.
La seule différence est qu'elles sont appelées à partir d'un objet différent. Notez que la méthode InsertMenuInMenuBar est appelée depuis la collection
PopupMenus Avec cette méthode, vous pouvez insérer un menu de la collection à un emplacement spécifié dans la barre de menus. Elle requiert comme
entrée le nom du menu à insérer et l'emplacement de son insertion dans la barre de menus.
La méthode InsertInMenuBar est appelée directement à partir de l'objet PopupMenu à insérer. La seule entrée requise par cette méthode est l'emplacement
dans la barre de menus. Le nom du menu n'est pas requis dans la mesure où vous appelez directement la méthode à partir de l'objet à insérer.
Dans cet exemple, un nouveau menu intitulé MenuTest dans lequel une option est insérée est créé. La commande OUVRIR est affectée à cette option de
menu. Le menu est ensuite affiché dans la barre de menus.
Sub Ch6_InsertMenu()
' Define a variable for the current menu group
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application. _
MenuGroups.Item(0)
' Create a new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("MenuTest")
' Declare the variables for the menu item
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro string the VB equivalent of
' "ESC ESC _open " and create the menu item
openMacro = Chr(3) + Chr(3) + "_open "
Set newMenuItem = newMenu.AddMenuItem(newMenu.Count + 1, _
"Open", openMacro)
Pour supprimer un menu de la barre de menus, utilisez la méthode RemoveMenuFromMenuBar ou RemoveFromMenuBar Ces deux méthodes aboutissent au
même résultat : elles suppriment un menu de la barre de menus.
La seule différence est qu'elles sont appelées à partir d'un objet différent. Notez que la méthode RemoveMenuFromMenuBar est appelée depuis la collection
PopupMenus Elle requiert comme entrée le nom du menu à supprimer et l'emplacement à supprimer dans la barre de menus. Par exemple, l'instruction
suivante supprime le menu ajouté à la section Insertion de menus dans la barre de menus :
currMenuGroup.Menus.RemoveMenuFromMenuBar ("MenuTest")
La méthode RemoveFromMenuBar est appelée directement à partir de l'objet PopupMenu à supprimer. Cette méthode ne requiert pas de données d'entrée. Le
nom du menu n'est pas requis dans la mesure où vous appelez la méthode directement à partir de l'objet à supprimer.
Remarque Les menus supprimés de la barre de menus sont toujours disponibles dans leur groupe de menus spécifique. Ils ne sont plus visibles pour
l'utilisateur.
Vous pouvez réorganiser des menus en insérant et en supprimant des menus afin d' atteindre la configuration souhaitée.
Dans cet exemple, le premier menu de la barre de menus est supprimé, puis inséré en dernière position.
Sub Ch6_MoveMenu()
' Define a variable to hold the menu to be moved
Dim moveMenu As AcadPopupMenu
Dim MyMenuBar As AcadMenuBar
Set MyMenuBar = ThisDrawing.Application.menuBar
' Set moveMenu equal to the first menu displayed
' on the menu bar
Set moveMenu = MyMenuBar.Item(0)
' Remove the first menu from the menu bar
MyMenuBar.Item(0).RemoveFromMenuBar
' Add the menu back into the menu bar
' in the last position on the bar
moveMenu.InsertInMenuBar (MyMenuBar.count)
End Sub
ActiveX/VBA d'AutoCAD est capable de personnaliser deux types de menus AutoCAD : les menus déroulants et les menus contextuels (parfois également
appelés menus du curseur). Ces deux types de menus sont affichés sous forme d e menus en cascade. Le menu contextuel permet d'accéder rapidement aux
options fréquemment utilisées, comme les modes d'accrochage aux objets.
Un menu déroulant peut contenir jusqu'à 999 options de menu. Un menu déroulant peut contenir jusqu'à 499 options de menu. Les deux limites incluent tous les
menus de la hiérarchie. Si le nombre d'options d'un menu dépasse ces limites, AutoCAD ignore les options excédentaires. En outre, un menu déroulant ou
contextuel est tronqué s'il ne tient pas dans l'écran graphique.
Alors que les menus déroulants se déroulent toujours à partir de la barre de menus, un menu contextuel a pparaît au niveau ou à proximité du réticule dans la
zone graphique. Les deux types de menus sont gérés de la même manière, excepté que le titre du menu contextuel n'est pas inclus dans la barre de menus. En
fait, son titre n'apparaît pas du tout. Pour accéder au menu contextuel, il suffit d'activer un menu dans le groupe de menus de base. Le menu contextuel peut
être identifié à l'aide de la propriété ShortcutMenu Si elle renvoie la valeur TRUE, le menu recherché est le menu contextuel du groupe.
Création de menus
Création de menus
Pour créer un menu, utilisez la méthode Add afin d'ajouter un nouvel objet PopupMenu à la collection PopupMenus
Pour créer un menu contextuel, vous devez commencer par en supprimer un. Un seul menu contextuel par groupe de menus e st autorisé. Si aucun autre menu
contextuel n'est inclus dans un groupe de menus, vous pouvez ajouter un menu intitulé “POP0” (le dernier caractère étant le chiffre zé ro). AutoCAD comprendra
immédiatement que vous souhaitez créer un menu contextuel.
La méthode Add requiert comme entrée le nom (libellé) du menu à ajouter. Ce nom devient le titre du menu lorsqu'il est chargé dans la barre de menus. Grâce
au nom, il est possible d 'identifier facilement le menu dans une collection.
Ce nom peut être une simple chaîne ou peut contenir des codes spéciaux. Vous pouvez également modifier le nom d 'un menu après sa création. Pour
renommer un menu existant, utilisez sa propriété Name
Dans cet exemple, un menu déroulant intitulé “MenuTest” est créé dans le premier groupe de menus de la collection MenuGroups.
Sub Ch6_CreateMenu()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("MenuTest")
End Sub
Pour ajouter une nouvelle option à u n menu, utilisez la méthode AddMenuItem Cette méthode crée un objet PopupMenuItem et l'ajoute au menu spécifié.
La méthode AddMenuItem accepte quatre paramètres en entrée : Index, Label, Tag et Macro.
Le paramètre Index est un nombre entier qui spécifie la position de la nouvelle option dans le menu. L'index commence à la position zéro (0) qui correspond à
la première position dans le menu après le titre. Pour ajouter une nouvelle option à la fin d'un menu, attribuez au paramètre Index la valeur de la propriété
Count du menu. (Cette propriété représente le nombre total d'options dans ce menu.)
La première position d'index est zéro (0) et les séparateurs sont répertoriés en tant qu'options individuelles avec leur propre position d'index. La propriété Count
du menu illustré aurait pour valeur six (6). Pour ajouter une option de menu entre Mosaïque horizontale et Mosaïque verticale, définissez le paramètre Index
sur deux (2), ce qui correspond à l'index de l'option du menu Mosaïque verticale. Une nouvelle option de menu est alors insérée dans l'index deux (2) et les
autres options sont décalées d'une position d'index vers le bas.
Une fois une option créée, vous ne pouvez pas modifier son index via la propriété Index Pour modifier l'index d'une option existante, vous devez supprimer puis
ajouter de nouveau l'option à un emplacement différent, ou ajouter ou supprimer les options l'entourant afin d'atteindre l'emplacement souhaité.
Un libellé est une chaîne qui définit le contenu et le formatage des options de menu. Les libellés d'options de menu peuvent contenir des expressions de chaîne
DIESEL qui modifient de manière conditionnelle les libellés à chaque fois qu'ils sont affichés.
En plus des expressions de chaîne DIESEL, un libellé peut contenir des codes spéciaux. Par exemple, un "et" commercial (&) placé directement avant un
caractère désigne celui-ci comme touche d'accès rapide.
Le texte de l'option de menu affiché pour l'utilisateur est appelé le titre ; il est dérivé du libellé par interprétation de tous les codes spéciaux et expressions de
chaîne DIESEL contenus dans le libellé. Par exemple, l'intitulé “&Edition” produit le titre “Edition”.
Une fois une option de menu créée, vous pouvez modifier son libellé à l'aide de la propriété Label
Une étiquette, ou étiquette de nom, est une chaîne constituée de caractères alphanumériques et de soulignement (_). Cette chaîne identifie l'option de manière
unique au sein d'un menu donné.
Une fois une option de menu créée, vous pouvez modifier son étiquette à l'aide de la propriété TagString
Une macro est une série de commandes qui exécutent des actions spécifiques lorsqu'une option de menu est sélectionnée. Les macros de menu peuvent être
de simples enregistrements de combinaisons de touches accomplissant une tâche, ou bien une combinaison complexe de commandes ou codes de
programmation AutoLISP, DIESEL ou ActiveX.
Une fois une option de menu créée, vous pouvez en modifier la macro à l'aide de la propriété Macro
Dans cet exemple, un nouveau menu intitulé “MenuTest”, dans lequel une option est insérée, est créé. L'option de menu porte le nom “Ouvrir”, et la macro qui
lui est affectée est la commande OUVRIR.
Sub Ch6_AddAMenuItem()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Pour ajouter un séparateur à un menu, utilisez la méthode AddSeparator Cette méthode crée un objet PopupMenuItem et l'ajoute au menu spécifié. Ce type
d'objet PopupMenuItem se voit assigner le type acSeparator. Le type d'une option de menu peut être déterminé via la propriété Type
La méthode AddSeparator utilise le paramètre Index comme seule entrée. Le paramètre Index est un nombre entier qui spécifie la position du séparateur
dans le menu. L'index commence à la position zéro (0) qui correspond à la première position dans le menu après le titre.
Reportez-vous à la section Activation et désactivation d'options de menu pour obtenir un exemple sur l'ajout de séparateurs à un menu.
Pour assigner la touche d'accès rapide à une option de menu via ActiveX/VBA d'AutoCAD, utilisez la propriété Label de l'option d e menu donnée. Insérez
l'équivalent ASCII du signe commercial (&) directement dans le libellé, devant le caractère qui va servir de touche d'accès rapide. Par exemple, le libellé Chr
(Asc("&")) + "Edition" sera affiché sous la forme “Edition”", la lettre “E”" servant de touche d'accès rapide.
Cet exemple est identique à celui de la section Ajout d'options de menu dans un menu déroulant , mais il permet d'ajouter une touche d'accès rapide aux menus
“MenuTest” et “Ouvrir”. La lettre “s” est utilisée comme touche d'accès de “MenuTest” et la lettre “O” comme touche d'accès au menu “Ouvrir”.
Sub Ch6_AddAMenuItem()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add _
("Te" + Chr(Asc("&")) + "stMenu")
' Add a menu item to the new menu
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VBA equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newMenuItem = newMenu.AddMenuItem _
(newMenu.count + 1, Chr(Asc("&")) _
+ "Open", openMacro)
' Display the menu on the menu bar
newMenu.InsertInMenuBar _
(ThisDrawing.Application.menuBar.count + 1)
End Sub
Pour ajouter un sous-menu en cascade, créez-le via la méthode AddSubmenu Cette méthode crée un objet PopupMenuItem et l'ajoute au menu spécifié. Ce
type d'objet PopupMenuItem se voit assigner le t ype acSubmenu.
Le paramètre Index est un nombre entier qui spécifie la position de la nouvelle option dans le menu. L'index commence à la position zéro (0) qui correspond à
la première position dans le menu après le titre. Pour ajouter une nouvelle option à la fin d'un menu, attribuez au paramètre Index la valeur de la propriété
Count du menu. (Cette propriété représente le nombre total d'options dans ce menu.)
Le paramètre Label est une chaîne qui définit le contenu et le formatage des options de menu. Le texte de l'option de menu affiché pour l'utilisateur est appelé
le titre ; il est dérivé du libellé par i nterprétation de tous les codes spéciaux et expressions de chaîne DIESEL contenus dans ce libellé. Par exemple, l'intitulé
“&Edition” produit le titre “Edition””
Le paramètre Tag, ou étiquette de nom, est une chaîne constituée de caractères alphanumériques et de soulignement (_). Cette chaîne identifie l'option de
manière unique au sein d'un menu donné.
La méthode AddSubmenu ne renvoie pas l'objet PopupMenuItem qu'elle crée. Elle renvoie à la place le nouveau menu désigné par le sous-menu. Le nouveau
menu, renvoyé en tant qu'objet PopupMenu, peut être rempli comme tout menu normal. Pour d e plus amples informations sur le remplissage d'un menu, voir
Ajout de nouvelles options à un menu .
Cet exemple crée un menu appelé “MenuTest” et l'ajoute à un sous-menu intitulé “OuvrirFichier”.Le sous-menu est ensuite rempli avec une option de menu
appelée “Ouvrir” qui ouvre un dessin lors de son exécution. Le menu est ensuite affiché dans la barre de menus.
Sub Ch6_AddASubMenu()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("MenuTest")
' Add the submenu
Dim FileSubMenu As AcadPopupMenu
Set FileSubMenu = newMenu.AddSubMenu("", "OpenFile")
' Add a menu item to the sub menu
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newMenuItem = FileSubMenu.AddMenuItem _
(newMenu.count + 1, "Open", openMacro)
' Display the menu on the menu bar
newMenu.InsertInMenuBar _
(ThisDrawing.Application.menuBar.count + 1)
End Sub
Pour supprimer des options d'un menu, utilisez la méthode Delete trouvée sous cette option.
Avertissement Si vous supprimez une option de menu, n'utilisez pas une autre méthode ou une autre propriété qui chargerait à nouveau directement ou
indirectement le même fichier IUP dans la même macro. Par exemple, après avoir supprimé une option de menu, n'utilisez pas la méthode MenuGroup.Load ou
la propriété Preferences.Profiles.ActiveProfile ou encore n'émettez pas de commande "Menuload" avec la méthode Document.SendCommand. Ces options
provoquent directement ou indirectement le chargement des fichiers IUP. Vous ne devez utiliser ces méthodes ou propriétés que dans une autre macro.
Dans cet exemple, une option de menu est ajoutée à la fin du dernier menu affiché dans la barre de menus. L'option de menu est ensuite supprimée.
Sub Ch6_DeleteMenuItem()
Dim LastMenu As AcadPopupMenu
Set LastMenu = ThisDrawing.Application.menuBar. _
Item(ThisDrawing.Application.menuBar.count - 1)
' Add a menu item
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newMenuItem = LastMenu.AddMenuItem _
(LastMenu.count + 1, "Open", openMacro)
' Remove the menu item from the menu
newMenuItem.Delete
End Sub
TagString
Une étiquette, ou étiquette de nom, est une chaîne constituée de caractères alphanumériques et de soulignement (_). Cette chaîne identifie l'option de
manière unique au sein d'un menu donné. Les étiquettes identifient les touches d'accès rapide (séquences de touches du clavier) qui correspondent à l'option
de menu.
Vous pouvez lire ou écrire la valeur d'une étiquette à l'aide de la propriété TagString.
Label
Un libellé est une chaîne qui définit le contenu et le formatage des options de menu.
Les libellés d'options de menu peuvent contenir des expressions de chaîne DIESEL qui modifient de manière conditionnelle les libellés à chaque fois qu'ils
sont affichés.
Vous pouvez lire ou écrire la valeur d'un libellé à l'aide de la propriété Label.
Caption
Un titre est du texte affiché dans le menu pour l'utilisateur. Cette propriété est en lecture seule et est dérivée de la propriété Label par la suppression de
toutes les expressions de chaîne DIESEL.
Vous pouvez lire la valeur d'un titre à l'aide de la propriété Caption.
Macro
Une macro est une série de commandes qui exécutent des actions spécifiques lorsqu'une option de menu est sélectionnée. Les macros de menu peuvent
être de simples enregistrements de combinaisons de touches accomplissant une tâche, ou bien une combinaison complexe de commandes ou codes de
programmation AutoLISP, DIESEL ou ActiveX.
Vous pouvez lire ou écrire la valeur d'une macro de menu à l'aide de la propriété Macro.
HelpString
Une chaîne d'aide est la chaîne de texte qui s'affiche sur la ligne d'état d'AutoCAD lorsque l'utilisateur met en surbrillance une option de menu.
Vous pouvez lire ou écrire la valeur d'une chaîne d'aide à l'aide de la propriété HelpString.
Enable
La propriété Enable vous permet d'activer ou de désactiver une option de menu. Vous pouvez également lire la propriété Enable afin de déterminer si une
option de menu est actuellement activée ou désactivée. L'utilisation de cette propriété pour activer ou désactiver une option de menu remplace tout paramètre
d'activation figurant dans l'expression DIESEL de l'option.
Reportez-vous à la section Propriétés des options d'un menu pour un exemple de désactivation des options de menu.
Check
La propriété Check vous permet de cocher ou de retirer la coche d'une option de menu. Vous pouvez également lire la propriété Check pour déterminer si
une option de menu est cochée ou non. L'utilisation de cette propriété pour cocher ou supprimer la coche d'une option de menu remplace tout paramètre de
sélection (coche) figurant dans l'expression DIESEL de l'option.
Index
L'index d'une option de menu spécifie la position de cette option dans le menu auquel elle appartient. La position d'index d'un menu commence toujours à la
position 0. Par exemple, si l'option est la première d'un menu, elle renvoie la position d'index 0, si elle est la deuxième option du menu, elle renvoie la position
d'index 1, etc.
Type
Vous pouvez déterminer le type d'une option de menu à l'aide de la propriété Type. Voici les types d'option de menu : un menu normal, un séparateur ou
l'intitulé d'un sous-menu. S'il s'agit d'un menu normal, la propriété renvoie acMenuItem. S'il s'agit d'un séparateur, la propriété renvoie acMenuSeparator.
S'il s'agit d'un intitulé de sous-menu, la propriété renvoie acSubMenu.
SubMenu
Vous pouvez rechercher le sous-menu à l'aide de la propriété SubMenu. Si l' option de menu est du type acSubMenu, cette propriété renvoie le menu qui est
attaché comme sous-menu ou menu imbriqué. Le menu imbriqué est renvoyé comme un objet PopupMenu.
Si l'option de menu n'est pas de type acSubMenu, cette propriété renvoie une erreur.
Parent
Vous pouvez déterminer le menu auquel appartient une option à l'aide de la propriété Parent. Cette propriété renvoie le menu dans lequel réside l'option. Le
menu parent est renvoyé sous la forme d'un objet PopupMenu.
Dans cet exemple, le menu “MenuTest” est créé, puis deux options sont insérées. La deuxième option de menu est ensuite désactivée à l'aide de la propriété
Enable et le menu est affiché dans la barre de menus.
Sub Ch6_DisableMenuItem()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add("MenuTest")
' Add two menu items and a menu separator to the new menu
Dim MenuEnable As AcadPopupMenuItem
Dim MenuDisable As AcadPopupMenuItem
Dim MenuSeparator As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set MenuEnable = newMenu.AddMenuItem _
(newMenu.count + 1, "OpenEnabled", openMacro)
Set MenuSeparator = newMenu.AddSeparator("")
Set MenuDisable = newMenu.AddMenuItem _
(newMenu.count + 1, "OpenDisabled", openMacro)
' Disable the second menu item
MenuDisable.Enable = False
' Display the menu on the menu bar
newMenu.InsertInMenuBar _
(ThisDrawing.Application.menuBar.count + 1)
End Sub
Les fonctionnalités ActiveX/VBA d'AutoCAD vous permettent de créer et de modifier des barres d'outils au sein d 'un groupe de menus existant.
Pour créer une barre d'outils, utilisez la méthode Add afin d'ajouter un nouvel objet Toolbar à la collection Toolbars
La méthode Add requiert comme entrée le nom de la barre d'outils à ajouter. Le nom est une chaîne de caractères alphanumériques sans ponctuation autre
qu'un tiret (-) ou un caractère de soulignement (_). Grâce au nom, il est possible d'identifier facilement la barre d'outils dans une collection.
Vous pouvez modifier le nom d'une barre d'outils après sa création. Pour renommer une barre d'outils existante, utilisez sa propriété Name
Dans cet exemple, une nouvelle barre d'outils intitulée “BarreOutilsTest” est créée dans le premier groupe de menus de la collection MenuGroups.
Sub Ch6_CreateToolbar()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new toolbar
Dim newToolbar As AcadToolbar
Set newToolbar = currMenuGroup.Toolbars.Add("TestToolbar")
End Sub
Pour ajouter un nouveau bouton à une barre d'outils, utilisez la méthode AddToolbarButton Cette méthode crée un objet ToolbarItem et l'ajoute à la barre
d'outils spécifiée. N'ajoutez un bouton à la barre d'outils que lorsqu'elle est affichée.
La méthode AddToolbarButton requiert la saisie de cinq paramètres : Index, Name, HelpString, Macro et FlyoutButton.
Index
Le paramètre Index est un nombre entier qui spécifie la position de la nouvelle option Toolbar dans la barre d'outils. L'index commence à la position zéro (0),
qui correspond à la première position dans la barre d'outils après le titre. Pour ajouter un nouveau bouton à la fin d'une barre d'outils, attribuez au paramètre
Index la valeur de la propriété Count de la barre d'outils. La propriété Count de la barre d'outils représente le nombre total de boutons présents dans cette
barre d'outils.
Une fois un bouton de barre d'outils créé, vous ne pouvez pas modifier son index via la propriété Index. Pour modifier l'index d'un bouton de barre d'outils
existant, supprimez le bouton de la barre d'outils avant de le placer à un autre endroit, ou ajoutez ou supprimez les boutons adjacents jusqu'à ce que vous
trouviez l'emplacement approprié.
Name
Un nom est une chaîne qui identifie le bouton de la barre d'outils. Elle doit contenir des caractères alphanumériques, sans autre signe de ponctuation que le
tiret (–) et le trait de soulignement (_). Cette chaîne est affichée sous forme d'info-bulle lorsque le curseur se trouve sur le bouton.
Une fois un bouton de barre d'outils créé, vous pouvez modifier son nom à l'aide du paramètre Name.
HelpString
Une chaîne d'aide est la chaîne de texte qui s'affiche sur la ligne d'état d'AutoCAD lorsque l'utilisateur met en surbrillance une option de menu.
Une fois un bouton de barre d'outils créé, vous pouvez modifier sa chaîne d'aide à l'aide du paramètre HelpString.
Macro
Une macro est une série de commandes qui exécutent des actions spécifiques lorsqu'un bouton de barre d'outils est sélectionné. Les macros de barre d'outils
peuvent être de simples enregistrements de combinaisons de touches l ançant une tâche, ou bien une combinaison complexe de commandes ou de codes de
programmation AutoLISP, DIESEL ou ActiveX.
Une fois un bouton de barre d'outils créé, vous pouvez modifier sa macro à l'aide du paramètre Macro.
FlyoutButton
Le paramètre FlyoutButton est un drapeau optionnel qui indique si le nouveau bouton doit être déroulant ou non. S'il s'agit d'un bouton déroulant, ce
paramètre doit avoir la valeur TRUE. Dans le cas contraire, il peut soit avoir la valeur FALSE, soit être omis.
Dans cet exemple, une nouvelle barre d'outils est créée et un bouton lui est ajouté. Le bouton est affecté à une macro qui exécute la commande OUVRIR
lorsqu'il est sélectionné.
Sub Ch6_AddButton()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new toolbar
Dim newToolbar As AcadToolbar
Set newToolbar = currMenuGroup.Toolbars.Add("TestToolbar")
' Add a button to the new toolbar
Dim newButton As AcadToolbarItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newButton = newToolbar.AddToolbarButton _
("", "NewButton", "Open a file.", openMacro)
End Sub
Pour ajouter un séparateur à une barre d'outils, utilisez la méthode AddSeparator Cette méthode crée un objet ToolbarItem et l'ajoute à la barre d'outils
spécifiée. Ce type d'objet ToolbarItem se voit assigner le type acSeparator. Le type d'un bouton de barre d'outils peut être déterminé via la propriété Type
La méthode AddSeparator requiert la saisie d'un paramètre : Index. Le paramètre Index est un nombre entier qui spécifie la position du séparateur dans le
menu. L'index commence à la position zéro (0), qui correspond à la première position dans la barre d'outils après le titre.
Pour définir les images à utiliser sur un bouton de barre d'outils, utilisez les méthodes SetBitmaps et GetBitmaps
SmallIconName
Le nom de petite icône spécifie la chaîne d'identification de la ressource p etite image (16 × 15 points). Elle doit contenir des caractères alphanumériques,
sans autre signe de ponctuation que le tiret (–) et le trait de soulignement (_), et doit inclure l'extension . bmp . La ressource peut être soit un bitmap système,
soit un bitmap défini par l'utilisateur. Les bitmaps définis par l'utilisateur doivent être de taille appropriée et résider dans l e dossier Support.
LargeIconName
Le nom de grande icône spécifie la chaîne d'identification de la ressource grande image (24 × 22 points). Elle doit contenir des caractères alphanumériques,
sans autre signe de ponctuation que le tiret (–) et le trait de soulignement (_), et doit inclure l'extension . bmp . La ressource peut être soit un bitmap système,
soit un bitmap défini par l'utilisateur. Les bitmaps définis par l'utilisateur doivent être de taille appropriée et résider dans l e dossier Support.
Pour ajouter un bouton déroulant à une barre d'outils, utilisez la méthode AddToolbarButton Cette méthode crée un objet ToolbarItem et l'ajoute à la barre
d'outils spécifiée.
La méthode AddToolbarButton requiert la saisie de cinq paramètres : Index, Name, HelpString, Macro et FlyoutButton. En définissant le paramètre
FlyoutButton sur TRUE, le nouveau bouton créé sera un bouton déroulant. La valeur renvoyée par cette méthode est la nouvelle barre d'outils déroulante. La
barre d'outils déroulante peut être remplie comme toute autre barre d'outils.
Pour de plus amples informations sur le remplissage d'une barre d'outils, voir Ajout de nouveaux boutons à une barre d'outils .
Dans cet exemple, deux barres d'outils sont créées. La première contient un bouton déroulant. La seconde est attachée au bouton déroulant de la première
barre d'outils.
Sub Ch6_AddFlyoutButton()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application. _
MenuGroups.Item(0)
' Create the first toolbar
Dim FirstToolbar As AcadToolbar
Set FirstToolbar = currMenuGroup.Toolbars. _
Add("FirstToolbar")
' Add a flyout button to the first menu on the menu bar
Dim FlyoutButton As AcadToolbarItem
Set FlyoutButton = FirstToolbar.AddToolbarButton _
("", "Flyout", "Demonstrates a flyout button", _
"OPEN", True)
' Create the second toolbar. This will be attached to
' the first toolbar via the flyout button.
Dim SecondToolbar As AcadToolbar
Set SecondToolbar = currMenuGroup.Toolbars. _
Add("SecondToolbar")
' Add a button to the next toolbar
Dim newButton As AcadToolbarItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newButton = SecondToolbar.AddToolbarButton _
("", "NewButton", "Open a file.", openMacro)
' Attach the second toolbar to the flyout
' button on the first toolbar
FlyoutButton.AttachToolbarToFlyout currMenuGroup.Name, _
SecondToolbar.Name
' Display the first toolbar, hide the second toolbar
FirstToolbar.Visible = True
SecondToolbar.Visible = False
End Sub
Vous pouvez créer des barres d'outils flottantes ou ancrées par programmation.
Pour faire flotter une barre d'outils, utilisez la méthode Float La méthode Float requiert la saisie de trois paramètres : Top, Left et NumberFloatRows. Les
paramètres Top et Left spécifient l'emplacement (en pixels) de l'angle supérieur gauche de la barre d'outils. L e paramètre NumberFloatRows spécifie le
nombre de lignes de la barre d'outils horizontale à créer. Ce nombre doit être supérieur ou égal à un. Les boutons de la barre d'outils sont répartis
proportionnellement sur le nombre de lignes spécifié. Dans le cas de barres d'outils alignées verticalement, cette valeur spécifie le nombre de colonnes.
Pour ancrer une barre d'outils, utilisez la méthode Dock La méthode Dock requiert la saisie de trois paramètres : Side, Row et Column. Le paramètre Side
spécifie le bord de la barre d'outils à positionner dans l'opération d'ancrage. Vous pouvez spécifier les bords supérieur, inférieur, gauche ou d roit de la barre
d'outils. Les paramètres Row et Column indiquent sur quelles ligne et colonne des barres d'outils ancrées la barre d'outils doit être positionnée.
Vous pouvez interroger une barre d'outils pour contrôler son ancrage à l'aide de la propriété DockStatus Cette propriété renvoie la valeur TRUE si la barre
d'outils est ancrée et FALSE si elle est flottante.
Dans cet exemple, une nouvelle barre d'outils est créée et trois boutons lui sont ajoutés. La barre d'outils est ensuite affichée et ancrée à gauche de l'écran.
Sub Ch6_DockToolbar()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application. _
MenuGroups.Item(0)
' Create the new toolbar
Dim newToolbar As AcadToolbar
Set newToolbar = currMenuGroup.Toolbars. _
Add("TestToolbar")
' Add three buttons to the new toolbar.
' All three buttons will have the same macro attached.
Dim newButton1 As AcadToolbarItem
Dim newButton2 As AcadToolbarItem
Dim newButton3 As AcadToolbarItem
Dim openMacro As String
' Assign the macro the VB equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newButton1 = newToolbar.AddToolbarButton _
("", "NewButton1", "Open a file.", openMacro)
Set newButton2 = newToolbar.AddToolbarButton _
("", "NewButton2", "Open a file.", openMacro)
Set newButton3 = newToolbar.AddToolbarButton _
("", "NewButton3", "Open a file.", openMacro)
' Display the toolbar
newToolbar.Visible = True
' Dock the toolbar to the left of the screen.
newToolbar.Dock acToolbarDockLeft
End Sub
Pour supprimer des boutons d'une barre d'outils, utilisez la méthode Delete trouvée sur ces boutons. Ne supprimez un bouton de la barre d'outils que lorsqu'elle
est affichée.
Tagstring
Une étiquette, ou étiquette de nom, est une chaîne constituée de caractères alphanumériques et de soulignement (_). Cette chaîne identifie l'option de
manière unique au sein d'une barre d'outils donnée. Une nouvelle étiquette est automatiquement assignée lorsqu'une option de barre d'outils est créée.
Vous pouvez lire ou écrire la valeur d'une étiquette à l'aide de la propriété Tagstring.
Name
Un nom est une chaîne qui identifie l'option de la barre d'outils. Il s'agit également de la chaîne utilisée comme texte d'info-bulle. Ce texte s'affiche lorsqu'un
utilisateur place le pointeur de la souris ou toute autre périphérique de pointage sur une option de la barre d'outils.
Vous pouvez lire ou écrire la valeur d'un nom à l'aide de la propriété Name.
Macro
Une macro est une série de commandes qui exécutent des actions spécifiques lorsqu'une option de barre de menus est sélectionnée. Les macros peuvent
être de simples enregistrements de combinaisons de touches accomplissant une tâche, ou bien une combinaison complexe de commandes ou codes de
programmation AutoLISP, DIESEL ou ActiveX.
Vous pouvez lire ou écrire la valeur d'une macro à l'aide de la propriété Macro.
HelpString
Une chaîne d'aide est la chaîne de texte qui s'affiche sur la ligne d'état d'AutoCAD pour un bouton de barre d'outils.
Vous pouvez lire ou écrire la valeur d'une chaîne d'aide à l'aide de la propriété HelpString.
Index
L'index d'une option de barre d'outils spécifie la position de cette option dans la barre d'outils à laquelle elle appartient. La position d'index d'une barre d'outils
commence toujours à la position 0. Par exemple, si l'option est la première d'une barre d'outils, elle renvoie la position d'index 0, si elle est la deuxième, elle
renvoie la position d'index 1, et ainsi de suite.
Vous pouvez lire la position d'index d'une option de barre d'outils à l'aide de la propriété Index.
Type
Voici les types d'option de barre d'outils : un bouton de barre d'outils normal, un séparateur, un bouton déroulant ou un élément de contrôle spécial. S'il s'agit
d'un bouton de menu normal, la propriété renvoie acButton. S'il s'agit d'un séparateur, la propriété renvoie acToolButtonSeparator. S'il s'agit d'un
bouton déroulant, la propriété renvoie acFlyout. S'il s'agit d'un élément de contrôle spécial, la propriété renvoie acControl.
Vous pouvez déterminer le type d'une option de barre d'outils à l'aide de la propriété Type.
Flyout
Si l'option de barre d'outils est de type acFlyout, cette propriété renvoie la barre d'outils attachée en tant que barre d'outils déroulante. La barre d'outils
déroulante est renvoyée sous la forme d'un objet Toolbar.
Si l'option de menu n'est pas de type acFlyout, cette propriété renvoie la valeur NULL.
Vous pouvez déterminer la barre d'outils déroulante d'une option de barre d'outils à l' aide de la propriété Flyout.
Parent
Cette propriété renvoie la barre d'outils dans laquelle réside l'option. La barre d'outils Parent est renvoyée sous la forme d'un objet Toolbar.
Vous pouvez déterminer la barre d'outils à laquelle appartient une option à l'aide de la propriété Parent.
Propriétés d'une barre d'outils
D'autres propriétés s'appliquent à toutes les options d'une barre d'outils. Ces propriétés déterminent notamment si la barre d'outils est flottante ou ancrée, si
elle est visible ou masquée et si elle utilise des petits boutons ou des grands boutons.
Création de macros
Une macro est une série de commandes qui exécutent des actions spécifiques lorsqu'une option de barre de menus est sélectionnée. Les macros peuvent être
de simples enregistrements de combinaisons de touches accomplissant une tâche, ou bien une combinaison complexe de commandes ou codes de
programmation AutoLISP, DIESEL ou ActiveX.
Si vous envisagez d'inclure des paramètres de commande dans une macro de menu, vous devez connaître la séquence dans laquelle cette commande attend
ses paramètres. Dans une macro de menu, chaque caractère est significatif, même les espaces. Les messages des commandes (et parfois même les noms
des commandes) peuvent changer au fil des révisions et des améliorations d'AutoCAD. Par conséquent, configurez vos menus personnalisés de telle sorte que
seules des modifications mineures soient requises lors d'une mise à niveau d'AutoCAD.
Si l'entrée de commande est effectuée depuis une option de menu, les variables système PICKADD et PICKAUTO sont supposées valoir respectivement 1 et 0.
Cela permet de préserver la compatibilité avec les versions antérieures d'AutoCAD et de faciliter la personnalisation en vous évitant d'avoir à vérifier les
paramètres de ces variables.
Fin de la macro
Répétition de macro
Le tableau suivant récapitule les caractères spéciaux utilisés dans les macros de menu et leurs valeurs ASCII équivalentes telles qu'elles sont utilisées dans VB
et VBA. Utilisez l'équivalent ASCII pour ces caractères spéciaux lors de la création de la chaîne pour la propriété Macro
Fin de la macro
Lors de l'exécution d'une macro, AutoCAD insère un espace à la fin de la macro avant de traiter la séquence de commandes. Il traite la macro de menu
suivante comme si vous aviez entré ligne ESPACE.
Ligne
Cet espace n'est pas toujours souhaitable ; par exemple, la commande TEXTE ou COT doit se terminer par ENTREE, et non par un espace. En outre, une
commande peut parfois nécessiter plusieurs espaces (ou ENTREE), mais certains éditeurs de texte n'acceptent pas la création de ligne avec des espaces
finaux. Deux conventions particulières permettent de régler ces problèmes.
Si un point-virgule (;) apparaît dans une macro, AutoCAD le remplace par ENTREE.
Si une ligne se termine par un caractère de contrôle, une barre oblique inversée (\), le signe plus (+) ou un point-virgule (;), AutoCAD n'ajoute pas d'espace à
la suite.
effacer \;
Si cette option se terminait par une barre oblique inversée (qui signale u ne entrée utilisateur), l'opération EFFACER ne pourrait pas aboutir, car AutoCAD
n'ajoute pas d'espace après cette barre oblique. C'est pourquoi cette macro de menu utilise le point-virgule pour imposer ENTREE après l'entrée utilisateur.
Voici d'autres exemples :
scu
scu ;
texte \.4 0 Société;;;Rue.;;;Ville, Département;
La sélection de la première macro e ntre scu et ESPACE sur la ligne de commande, et le message suivant apparaît :
En revanche, la sélection de la deuxième macro entre scu, ESPACE et le point-virgule (interprété comme ENTREE) sur la ligne de commande, ce qui accepte
la valeur par défaut, Général. Aucune différence entre la première et la deuxième option n'apparaîtrait à l'écran ; naturellement, vous n'allez pas les placer dans
le même menu.
Si vous sélectionnez la troisième macro, un message demandant le point de départ apparaît, puis l'adresse est affichée sur trois lignes. Dans la séquence de
trois points-virgules (;;;), le premier marque la fin de la chaîne de caractères, le deuxième répète la commande TEXTE et le troisième demande le
positionnement par défaut en dessous de la ligne précédente.
Remarque Tous les caractères spéciaux doivent être saisis avec leurs équivalents ASCII. Pour consulter la liste des équivalents ASCII, reportez-vous à la
section Mappage de caractères de macro à des caractères ASCII équivalents.
Dans certains cas, il est utile d'accepter l'entrée utilisateur à partir du clavier ou du périphérique de pointage au milieu d'une macro en plaçant une barre oblique
inversée (\) à l'emplacement souhaité.
cercle \1
calque inactif \;
La première macro marque une pause pour demander à l'utilisateur d'entrer le centre, puis lit un rayon de valeur 1 à partir de la macro. Remarquez qu'aucun
espace ne suit la barre oblique inversée \. La deuxième macro marque une pause pour demander à l'utilisateur d'entrer un nom de calque, puis désactive ce
calque et quitte la commande CALQUE. En principe, la commande CALQUE vous demande de procéder à une autre opération et ne s'arrête que si vous
appuyez sur ESPACE (blanc) ou ENTREE (;).
Normalement, la macro reprend après qu'une option ait été entrée. Par conséquent, il n'est pas possible de générer une macro acceptant un nombre variable
d'entrées (comme dans le cas de la sélection d'objets), avant de continuer la procédure. Cependant, la commande SELECT est une exception ; la barre oblique
inversée suspend le déroulement de la macro j usqu'à ce que la sélection de l'objet soit entièrement terminée. Par exemple, prenons la macro suivante :
Cette macro utilise la commande SELECT pour générer un jeu de sélection composé d'un ou plusieurs objets. Elle émet ensuite la commande CHANGER,
référence ce jeu de sélection à l'aide de l'élément Précédent, puis met tous les objets sélectionnés en rouge.
Comme la barre oblique inversée entraîne la pause de la macro pour l 'entrée utilisateur, vous ne pouvez pas utiliser ce signe à d'autres fins. Lorsque vous
indiquez le chemin d'accès d'un répertoire et d'un fichier, utilisez une barre oblique (/) comme séparateur : par exemple, /direct/fichier .
Si l'entrée d'un point est attendue, les modes d'accrochage aux objets pourront précéder l 'entrée du point.
Si vous utilisez des filtres de point X/Y/Z, la macro est suspendue tant que vous n'avez pas entré les trois coordonnées.
Pour la commande SELECT uniquement, la macro ne reprend pas tant que la sélection de l'objet n'est pas terminée.
Si l'utilisateur répond par une commande transparente, la macro suspendue le reste tant que cette commande n'est pas terminée et que l'entrée initialement
demandée n'a pas été reçue.
Si l'utilisateur répond en choisissant une autre macro (pour fournir des options ou exécuter une commande transparente), la macro d'origine est suspendue
et la nouvelle option est i ntégralement traitée avant que la macro suspendue ne reprenne.
Insérez ^C^C dans une macro pour vous assurer qu'aucune commande précédente n'est incomplète. Cette chaîne équivaut à appuyer deux fois sur la touche
ECHAP du clavier. Bien qu'un simple ^C annule la plupart des commandes, vous devez entrer ^C^C pour revenir à l'invite de la ligne de commande à partir
d'une commande COT. Vous avez ainsi la certitude qu'AutoCAD revient à la ligne de commande dans la plupart des cas.
Répétition de macro
Une commande sélectionnée peut être utilisée plusieurs fois avant de passer à une autre commande. C'est généralement le cas avec les outils; vous prenez un
outil, l'utilisez pour différentes tâches avant de choisir un autre outil, et ainsi de suite. Afin d'éviter les sélections répétées d'outils fréquemment utilisés,
AutoCAD intègre un mécanisme de répétition de commande, déclenché par une réponse nulle. Toutefois, vous ne pourrez pas spécifier des options de
commande à l'aide de cette méthode.
En effet, elle sert simplement à répéter des commandes fréquentes jusqu'à la sélection d'une autre commande. Si une macro commence par *^C^C
immédiatement après le libellé, elle est enregistrée en mémoire. Tous les messages Commande ultérieurs obtiennent une réponse de cette macro jusqu'à ce
que vous y mettiez fin en appuyant sur ECHAP ou en sélectionnant une autre macro.
N'entrez pas ^C (Annuler) dans un macro commençant par la chaîne *^C^C, car cela annule la répétition de la macro.
*^C^CDEPLACER Unique
*^C^CCOPIER Unique
*^C^CEFFACER Unique
*^C^CETIRER Unique capture
*^C^CROTATION Unique
*^C^CECHELLE Unique
Ce mode paramètre la sélection d'un seul objet, désactive le dialogue normal effectué par la sélection d'objet et cause le renvoi du ou des premiers objets
sélectionnés par l'option suivante. Ceci peut être très pratique dans une macro. Par exemple, prenons la macro suivante :
*^C^CEFFACER unique
Cette macro met fin à l a commande courante et active la commande EFFACER avec l'option de sélection unique. Dès que vous avez sélectionné cette option,
vous pouvez soit désigner l'objet à effacer, soit pointer sur une zone vide et spécifier une fenêtre. Le ou les objets sélectionnés de cette manière sont effacés et
la macro est répétée (grâce au signe astérisque) afin que vous puissiez effacer un autre objet. Ce mode permet une interaction plus dynamique avec AutoCAD.
Création d'une aide de ligne d'état pour des options de menu et de barre d'outils
Une partie importante du support d'aide natif est constituée des messages d'aide de la ligne d'état. Il s'agit de messages descriptifs simples qui s'affichent sur la
ligne d'état lorsqu'une option de menu ou de barre d'outils est mise en surbrillance. L'aide de ligne d'état pour toutes les options de menu et de barre d'outils est
contenue dans la propriété HelpString de l'option.
La propriété HelpString est vide lorsque l'option de menu ou de barre d'outils est créée.
Dans cet exemple, un nouveau menu intitulé “MenuTest” est créé suivi d'une option de menu intitulée “Ouvrir”.L'option de menu est ensuite assignée à l'aide de
ligne d'état via la propriété HelpString.
Sub Ch6_AddHelp()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Create the new menu
Dim newMenu As AcadPopupMenu
Set newMenu = currMenuGroup.Menus.Add _
("Te" + Chr(Asc("&")) + "stMenu")
' Add a menu item to the new menu
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VBA equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
' Create the menu item
Set newMenuItem = newMenu.AddMenuItem _
(newMenu.count + 1, Chr(Asc("&")) _
+ "Open", openMacro)
' Add the status line help to the menu item
newMenuItem.HelpString = "Opens an AutoCAD drawing file."
' Display the menu on the menu bar
newMenu.InsertInMenuBar _
(ThisDrawing.Application.menuBar.count + 1)
End Sub
Le menu contextuel. accessible à l'aide du bouton droit de la souris, est un menu spécial inclus dans le groupe de menus de base d'AutoCAD. Il s'affiche
lorsque l'utilisateur maintient la touche MAJ enfoncée et clique avec le bouton droit de la souris.
Pour trouver le menu contextuel, AutoCAD recherche dans le groupe de menus de base un menu dont la propriété ShortcutMenu est égale à TRUE. Vous
pouvez ajouter de nouvelles options de menu au menu contextuel en suivant les étapes décrites dans la section Ajout de nouvelles options à un menu .
Il se peut que les nouveaux groupes de menus n'aient pas de menu contextuel disponible. Pour en créer un, suivez les instructions de la section Création de
menus et utilisez POP0 comme libellé de nouveau menu.
Dans cet exemple, l'option de menu “OuvrirDWG” est ajoutée à la fin du menu contextuel.
Sub Ch6_AddMenuItemToshortcutMenu()
Dim currMenuGroup As AcadMenuGroup
Set currMenuGroup = ThisDrawing.Application.MenuGroups.Item(0)
' Find the shortcut menu and assign it to the
' shortcutMenu variable
Dim scMenu As AcadPopupMenu
Dim entry As AcadPopupMenu
For Each entry In currMenuGroup.Menus
If entry.shortcutMenu = True Then
Set scMenu = entry
End If
Next entry
' Add a menu item to the shortcut menu
Dim newMenuItem As AcadPopupMenuItem
Dim openMacro As String
' Assign the macro the VBA equivalent of "ESC ESC _open "
openMacro = Chr(3) + Chr(3) + "_open "
Set newMenuItem = scMenu.AddMenuItem _
("", Chr(Asc("&")) _
+ "OpenDWG", openMacro)
End Sub
Evénements
Les événements sont des notifications ou des messages envoyés par AutoCAD pour vous informer de l'état actuel de la session ou pour vous avertir de
certains événements sur le système. Par exemple, lorsqu'un dessin est ouvert, l'événement BeginOpen est déclenché. Cet événement contient le nom du
dessin AutoCAD ouvert. Un autre événement est déclenché lorsqu'un dessin est refermé. A partir de ces informations, vous pouvez écrire un sous-programme,
ou gestionnaire d'événements, qui utilise ces événements pour retracer la durée passée par un utilisateur sur un dessin spécifique.
Evénements
Trois types d'événements sont utilisés dans AutoCAD ® :
Les événements au niveau de l'application répondent aux changements survenus dans l'application AutoCAD et son environnement. Ils répondent
notamment à l'ouverture, l'enregistrement, la fermeture, l'impression et la création de dessins, l'exécution de commandes AutoCAD, le chargement et le
déchargement d'applications ARX et LISP, le changement des variables système et de la fenêtre d' application.
Les événements au niveau du document répondent aux modifications apportées à un document ou son contenu. Ils répondent notamment à l'ajout, la
suppression ou la modification d'objets, l'activation d'un menu contextuel, toute modification du jeu de sélection PICKFIRST et de la fenêtre de dessin, ainsi
qu'à la régénération du dessin. Il existe également des événements au niveau du document qui répondent à l'ouverture, la fermeture et l'impression d'un
dessin, ainsi qu'au chargement et au déchargement d'applications ARX et LISP du dessin.
Les événements au niveau de l'objet répondent aux modifications apportées à un objet. Actuellement, il n'existe qu'un seul événement de ce type. Il est
déclenché lorsqu'un objet est modifié.
Les sous-programmes qui répondent à des événements sont appelés des gestionnaires d'événements et sont exécutés automatiquement chaque fois q ue
l'événement correspondant est déclenché. Les informations contenues dans des événements, telles que le nom du dessin dans l'événementBeginOpen, sont
transmises à des gestionnaires d'événements via des paramètres.
Evénements
N'oubliez pas que les événements fournissent simplement des informations sur l'état ou les activités qui ont lieu dans AutoCAD. Bien que des gestionnaires
d'événements puissent être écrits pour répondre à ces événements, AutoCAD est souvent en train de traiter des commandes au moment du déclenchement du
gestionnaire. C'est pourquoi, la fonction de ces gestionnaires est limitée afin de garantir leur utilisation sûre dans AutoCAD et sa base de données.
Evénements
Ces événements ne sont pas constants dans AutoCAD VBA. Ils ne sont en effet pas activés automatiquement au chargement d'un projet VBA. Les événements
au niveau de l'application doivent être activés pour VBA et tous les autres contrôleurs d'Automatisation ActiveX ® .
Une fois les événements au niveau de l'application activés, un vaste choix d'événements est mis à votre disposition. Parmi ces événements :
AppActivate
Déclenché juste avant l'activation de la fenêtre d'application principale.
AppDeactivate
Déclenché juste avant la désactivation de la fenêtre d'application principale.
ARXLoaded
Déclenché après chargement d'une application ObjectARX.
ARXUnloaded
Déclenché après le déchargement d'une application ObjectARX.
BeginCommand
Déclenché immédiatement après le lancement d'une commande, mais avant son arrêt.
BeginFileDrop
Déclenché lorsqu'un fichier est déposé dans la fenêtre d'application principale.
BeginLISP
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'évaluation d'une expression LISP.
BeginModal
Déclenché juste avant l'affichage d'une boîte de dialogue modale.
BeginOpen
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'ouverture d'un dessin existant.
BeginPlot
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'impression d'un dessin.
BeginQuit
Déclenché juste avant la fin d'une session AutoCAD.
BeginSave
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'enregistrement du dessin.
EndCommand
Déclenché immédiatement après la fin d'une commande.
EndLISP
Déclenché après évaluation d'une expression LISP.
EndModal
Déclenché juste après l'annulation d'une boîte de dialogue modale.
EndOpen
Déclenché immédiatement après qu'AutoCAD ait fini d'ouvrir un dessin existant.
EndPlot
Déclenché après qu'un document ait été envoyé à l'imprimante.
EndSave
Déclenché lorsque AutoCAD a terminé d'enregistrer le dessin.
LISPCancelled
Déclenché après annulation de l'évaluation d'une expression LISP.
NewDrawing
Déclenché juste avant la création d'un dessin.
SysVarChanged
Déclenché lorsque la valeur d'une variable système est changée.
WindowChanged
Déclenché lorsque la fenêtre d'application est modifiée.
WindowMovedOrResized
Déclenché juste après que la fenêtre d' application ait été déplacée ou redimensionnée.
Evénements
Avant d'utiliser des événements au niveau de l'application, vous devez créer un nouveau module de classe et déclarer un objet de type AcadApplication avec
des événements. Supposons, par exemple, qu'un module de classe soit créé et appelé EventClassModule. Ce nouveau module contient la déclaration de
l'application avec le mot clé VBA WithEvents.
Pour créer une classe et déclarer un objet Application avec des événements
1. Dans VBA IDE, insérez un module de classe. Dans le menu Insertion, choisissez Module de classe.
2. Sélectionnez le nouveau module de classe dans la fenêtre Projet.
3. Dans la fenêtre Propriétés, changez le nom de la classe en Module-EventClass.
4. Ouvrez la fenêtre Code de la classe en appuyant sur la touche F7 ou en choisissant Affichage » Code.
5. Dans la fenêtre Code de la classe, insérez la ligne suivante :
Une fois le nouvel objet déclaré avec des événements, il apparaît dans la zone de liste déroulante des objets du module de classe et vous pouvez écrire des
procédures d'événements pour cet objet dans le module. (Lorsque vous sélectionnez le nouvel objet dans la zone des objets, les événements pouvant être
utilisés avec cet objet apparaissent dans la zone de liste déroulante des procédures.)
Toutefois, avant l'exécution des procédures, vous devez connecter l'objet déclaré dans le module de classe à l'objet Application Cette opération peut être
exécutée en entrant le code suivant à partir de n'importe quel module.
Une fois la procédure InitializeEvents exécutée, l'objet App du module de classe désigne l'objet Application spécifié et les procédures d'événements de ce
module sont exécutées lorsque les événements se produisent.
Dans cet exemple, le processus de chargement est intercepté après que vous ayez fait glisser et déposé un fichier dans AutoCAD. Une boîte de message
contenant le nom du fichier ayant été déposé et les boutons Oui/Non/Continuer qui permettent à l'utilisateur de décider si le chargement du fichier doit être
poursuivi s'affichent. Si l'utilisateur décide d'annuler l'opération, sa décision est renvoyée via le paramètre Cancel de l'événement BeginFileDrop et le fichier
n'est pas chargé.
Evénements
Les événements au niveau Document sont constants dans AutoCAD VBA. Ils sont en effet activés automatiquement au chargement d'un projet VBA. Ils ne sont
cependant pas activés pour d'autres contrôleurs, comme VB. Les événements au niveau Document doivent être activés pour tous les autres contrôleurs
d'automatisation ActiveX.
Une fois les événements au niveau du document activés, un vaste choix d'événements est mis à votre disposition. Parmi ces événements :
Activate
Déclenché lorsqu'une fenêtre de document est activée.
BeginDocClose
Déclenché immédiatement après réception de la requête de fermeture d'un dessin.
BeginCommand
Déclenché immédiatement après le lancement d'une commande, mais avant son arrêt.
BeginDoubleClick
Déclenché après que l'utilisateur ait cliqué deux fois sur un objet du dessin.
BeginLISP
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'évaluation d'une expression LISP.
BeginPlot
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'impression d'un dessin.
BeginRightClick
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin.
BeginSave
Déclenché immédiatement après qu'AutoCAD ait reçu une demande d'enregistrement du dessin.
BeginShortcutMenuCommand
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin et avant que le menu contextuel apparaisse en mode
Commande.
BeginShortcutMenuDefault
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin et avant que le menu contextuel apparaisse en mode
Par défaut.
BeginShortcutMenuEdit
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin et avant que le menu contextuel apparaisse en mode
Edition.
BeginShortcutMenuGrip
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin et avant que le menu contextuel apparaisse en mode
Poignée.
BeginShortcutMenuOsnap
Déclenché après que l'utilisateur ait cliqué avec le bouton droit de la souris dans la fenêtre du dessin et avant que le menu contextuel apparaisse en mode
Accrobj.
Deactivate
Déclenché lorsque la fenêtre du dessin est désactivée.
EndCommand
Déclenché immédiatement après la fin d'une commande.
EndLISP
Déclenché après évaluation d'une expression LISP.
EndPlot
Déclenché après qu'un document ait été envoyé à l'imprimante.
EndSave
Déclenché lorsque AutoCAD a terminé d'enregistrer le dessin.
EndShortcutMenu
Déclenché après affichage du menu contextuel.
LayoutSwitched
Déclenché après que l'utilisateur ait choisi une autre présentation.
LISPCancelled
Déclenché après annulation de l'évaluation d'une expression LISP.
ObjectAdded
Déclenché après qu'un objet ait été ajouté au dessin.
ObjectErased
Déclenché après qu'un objet ait été supprimé du dessin.
ObjectModified
Déclenché après modification d'un objet du dessin.
SelectionChanged
Déclenché après modification du jeu de sélection PICKFIRST courant.
WindowChanged
Déclenché lorsque la fenêtre du document est modifiée.
WindowMovedOrResized
Déclenché juste après que la fenêtre du dessin ait été déplacée ou redimensionnée.
Activation d'événements au niveau du document dans des environnements autres que VBA
Codage d'événements au niveau du document dans des environnements autres que VBA
Evénements
Activation d'événements au niveau du document dans des environnements autres que VBA
Avant d'utiliser des événements au niveau du document dans VB ou un environnement autre que VBA, vous devez créer un nouveau module de classe et
déclarer un objet de type AcadDocument avec des événements. Supposons, par exemple, qu'un module de classe soit créé et appelé EventClassModule. Ce
nouveau module contient la déclaration de l'application avec l e mot clé VBA WithEvents.
Pour créer une classe et déclarer un objet Document avec des événements
1. Dans VBA IDE, insérez un module de classe. Dans le menu Insertion, choisissez Module de classe.
2. Sélectionnez le nouveau module de classe dans la fenêtre Projet.
3. Dans la fenêtre Propriétés, changez le nom de la classe en Module-EventClass.
4. Ouvrez la fenêtre Code de la classe en appuyant sur la touche F7 ou en choisissant Affichage » Code.
5. Dans la fenêtre Code de la classe, insérez la ligne suivante :
Une fois le nouvel objet déclaré avec des événements, il apparaît dans la zone de liste déroulante des objets du module de classe et vous pouvez écrire des
procédures d'événements pour cet objet dans le module. (Lorsque vous sélectionnez le nouvel objet dans la zone des objets, les événements pouvant être
utilisés avec cet objet apparaissent dans la zone de liste déroulante des procédures.)
Toutefois, avant l'exécution des procédures, vous devez connecter l'objet déclaré dans le module de classe à l'objet Document. Cette opération peut être
exécutée en entrant le code suivant à partir de n'importe quel module.
Une fois la procédure InitializeEvents exécutée, l'objet Doc du module de classe désigne l'objet Document créé et les procédures d'événements de ce
Evénements
Codage d'événements au niveau du document dans des environnements autres que VBA
Une fois des événements au niveau du document activés, la variable de classe Doc est disponible dans la zone de liste déroulante des objets de la fenêtre
Code du module de classe. Sélectionnez la classe Doc ; la liste des événements disponibles apparaît dans la zone de liste déroulante des procédures.
Sélectionnez l'événement pour lequel vous voulez écrire un g estionnaire ; le "squelette" du gestionnaire est créé automatiquement.
Evénements
Les événements au niveau du document sont activés automatiquement au chargement d'un projet VBA. Pour écrire des gestionnaires d'événements pour des
événements au niveau du document dans VBA, il suffit de sélectionner AcadDocument dans la zone de liste déroulante des objets de la fenêtre Code. Les
événements disponibles pour le document apparaissent dans la liste déroulante des procédures. Sélectionnez l'événement pour lequel vous voulez écrire un
gestionnaire ; le "squelette" du gestionnaire est créé automatiquement.
Notez que les gestionnaires d'événements créés de cette façon s'appliquent au dessin courant. Pour créer des gestionnaires d'événements pour un dessin
donné, suivez les étapes décrites au paragraphe Activation d'événements au niveau du document dans des environnements autres que VBA . Vous pourrez ainsi
activer un document spécifique pour des événements.
Dans l'exemple suivant, le gestionnaire d'événements est utilisé pour l'événement BeginShortcutMenuDefault afin d'ajouter l'option de menu “OpenDWG” au
début du menu contextuel. Ensuite, le gestionnaire de l'événement EndShortcutMenu supprime l'option de menu supplémentaire pour qu'elle ne soit pas
enregistrée de façon permanente dans la configuration du menu de l'utilisateur.
Evénements
L'événement au niveau de l'objet n'est pas constant dans AutoCAD VBA. Ils ne sont en effet pas activés automatiquement au chargement d'un projet VBA. Les
événements au niveau de l'objet doivent être activés pour VBA et tous les autres contrôleurs d'automatisation ActiveX.
Une fois que les événements au niveau de l'objet ont été activés, l'événement Modified est mis à votre disposition. Cet événement est déclenché après la
modification d'un objet du dessin.
Evénements
Avant d'utiliser des événements au niveau de l'objet, vous devez créer un nouveau module de classe et déclarer un objet de type AcadObject avec des
événements. Supposons, par exemple, qu'un module de classe soit créé et appelé EventClassModule. Ce nouveau module contient la déclaration de
l'application avec le mot clé VBA WithEvents.
Pour créer une classe et déclarer un objet Circle avec des événements
1. Dans VBA IDE, insérez un module de classe. Dans le menu Insertion, choisissez Module de classe.
2. Sélectionnez le nouveau module de classe dans la fenêtre Projet.
3. Dans la fenêtre Propriétés, changez le nom de la classe en Module-EventClass.
4. Ouvrez la fenêtre Code de la classe en appuyant sur la touche F7 ou en choisissant Affichage » Code.
5. Dans la fenêtre Code de la classe, insérez la ligne suivante :
Une fois le nouvel objet déclaré avec des événements, il apparaît dans la zone de liste déroulante des objets du module de classe et vous pouvez écrire des
procédures d'événements pour cet objet dans le module. (Lorsque vous sélectionnez le nouvel objet dans la zone des objets, les événements pouvant être
utilisés avec cet objet apparaissent dans la zone de liste déroulante des procédures.)
Toutefois, avant l'exécution des procédures, vous devez connecter l'objet déclaré dans le module de classe à l'objet Circle. Cette opération peut être exécutée
en entrant le code suivant à partir de n'importe quel module.
2. Toujours dans cette fenêtre, créez un cercle appelé “MyCircle” et initialisez-le comme contenant des événements :
Sub InitializeEvents()
Dim MyCircle As AcadCircle
Dim centerPoint(0 To 2) As Double
Dim radius As Double
centerPoint(0) = 0#: centerPoint(1) = 0#: centerPoint(2) = 0#
radius = 5#
Set MyCircle = ThisDrawing.ModelSpace.AddCircle(centerPoint, radius)
Set X.Object = MyCircle
End Sub
Une fois la procédure InitializeEvents exécutée, l'objet Circle du module de classe désigne l'objet Circle créé et les procédures d'événements de ce
module sont exécutées lorsque les événements se produisent.
Remarque Lors du codage dans VBA, vous devez fournir un gestionnaire d'événements pour tous les objets activés pour l'événement Modified. Sinon,
l'exécution de VBA risque de prendre fin de façon inattendue.
Dans cet exemple, une polyligne fine est créée avec des événements. Le gestionnaire d'événements de la polyligne affiche ensuite la nouvelle aire
lorsque la polyligne est modifiée. Pour déclencher l'événement, modifiez l'épaisseur de la polyligne dans AAutoCAD. Pensez à exécuter le sous-
programme CreatePLineWithEvents avant d'activer le gestionnaire d'événements.
Public WithEvents PLine As AcadLWPolyline
Sub CreatePLineWithEvents()
' This example creates a light weight polyline
Dim points(0 To 9) As Double
points(0) = 1: points(1) = 1
points(2) = 1: points(3) = 2
points(4) = 2: points(5) = 2
points(6) = 3: points(7) = 3
points(8) = 3: points(9) = 2
Set PLine = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
PLine.Closed = True
ThisDrawing.Application.ZoomAll
End Sub
Private Sub PLine_Modified _
(ByVal pObject As AutoCAD.IAcadObject)
' This event is triggered when the polyline is resized.
' If the polyline is deleted the modified event is still
' triggered, so we use the error handler to avoid
' reading data from a deleted object.
On Error GoTo ERRORHANDLER
MsgBox "The area of " & pObject.ObjectName & " is: " _
& pObject.Area
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Travail en 3D
Dans la plupart des cas, les dessins sont des vues en deux dimensions (2D) représentant des objets en trois dimensions (3D). Bien que cette méthode de
dessin soit très utilisée dans les secteurs de l'architecture et de l'ingénierie, elle présente des limites : les dessins sont des représentations en 2D d'objets 3D et
doivent être interprétés visuellement. D'autre part, les différentes vues d e l'objet sont des représentations indépendantes et une erreur ou une ambiguïté est
toujours possible. Par conséquent, il est préférable de créer de véritables modèles en 3D au lieu de dessins en 2D. Vous pouvez créer des objets 3D précis et
réalistes et les manipuler de diverses façons à l'aide des outils de dessin proposés par AutoCAD.
Détermination de coordonnées en 3D
Conversion de coordonnées
Opérations d'édition en 3D
Edition de solides en 3D
Travail en 3D
Détermination de coordonnées en 3D
L'entrée de coordonnées du système de coordonnées général (SCG) 3D est semblable à celle de coordonnées SCG 2D. Si ce n'est qu'outre les valeurs X et Y ,
vous devez spécifier une valeur Z . Comme dans le cas des coordonnées 2D, une variante est utilisée pour transférer les coordonnées aux propriétés et
méthodes ActiveX ® et pour interroger ces coordonnées.
Pour de plus amples informations sur l'entrée de coordonnées 3D, reportez-vous à la section “Définition de coordonnées 3D” du Manuel d'utilisation .
Dans cet exemple, l'utilisateur crée deux polylignes, chacune d'elles comportant trois coordonnées. La première est une polyligne 2D et la deuxième une
polyligne 3D. Notez que la longueur du réseau contenant les sommets est étendue pour inclure les coordonnées Z dans la création de la polyligne 3D.
L'exemple se termine en recherchant les coordonnées des polylignes puis en les affichant dans une boîte de message.
Sub Ch8_Polyline_2D_3D()
Dim pline2DObj As AcadLWPolyline
Dim pline3DObj As AcadPolyline
Dim points2D(0 To 5) As Double
Dim points3D(0 To 8) As Double
' Define three 2D polyline points
points2D(0) = 1: points2D(1) = 1
points2D(2) = 1: points2D(3) = 2
points2D(4) = 2: points2D(5) = 2
' Define three 3D polyline points
points3D(0) = 1: points3D(1) = 1: points3D(2) = 0
points3D(3) = 2: points3D(4) = 1: points3D(5) = 0
points3D(6) = 2: points3D(7) = 2: points3D(8) = 0
' Create the 2D light weight Polyline
Set pline2DObj = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points2D)
pline2DObj.Color = acRed
pline2DObj.Update
' Create the 3D polyline
Set pline3DObj = ThisDrawing.ModelSpace. _
AddPolyline(points3D)
pline3DObj.Color = acBlue
pline3DObj.Update
' Query the coordinates of the polylines
Dim get2Dpts As Variant
Dim get3Dpts As Variant
get2Dpts = pline2DObj.Coordinates
get3Dpts = pline3DObj.Coordinates
' Display the coordinates
MsgBox ("2D polyline (red): " & vbCrLf & _
get2Dpts(0) & ", " & get2Dpts(1) & vbCrLf & _
get2Dpts(2) & ", " & get2Dpts(3) & vbCrLf & _
get2Dpts(4) & ", " & get2Dpts(5))
MsgBox ("3D polyline (blue): " & vbCrLf & _
get3Dpts(0) & ", " & get3Dpts(1) & ", " & _
get3Dpts(2) & vbCrLf & _
get3Dpts(3) & ", " & get3Dpts(4) & ", " & _
get3Dpts(5) & vbCrLf & _
get3Dpts(6) & ", " & get3Dpts(7) & ", " & _
get3Dpts(8))
End Sub
Travail en 3D
La création d'un système de coordonnées utilisateur (SCU) p ermet de modifier l'emplacement de l'origine (0, 0, 0) et l'orientation du plan XY et de l'axe Z . Vous
êtes entièrement libre de définir et d'orienter les axes de votre système de coordonnées comme vous le souhaitez dans l'espace 3D. D'autre part, il est possible
de créer, d'enregistrer et de réutiliser un nombre quelconque des systèmes de coordonnées utilisateur. L'entrée et l' affichage des coordonnées s'effectuent en
fonction du SCU courant.
Pour indiquer l'emplacement de l'origine et l'orientation du système de coordonnées utilisateur, vous pouvez afficher l'icône SCU au niveau du point d'origine du
SCU, à l'aide de la propriété UCSIconAtOrigin Si l'icône SCU est activée (voir la propriété UCSIconOn) et n'est pas affichée au point d'origine, elle est affichée à
la coordonnée SCG définie par la variable système UCSORG.
Vous pouvez créer un nouveau système de coordonnées utilisateur à l'aide de la méthode Add Cette méthode requiert la saisie de quatre valeurs : la
coordonnée de l'origine, une coordonnée sur les axes X et Y et le nom du SCU.
Dans l'Automatisation ActiveX d'AutoCAD ® , toutes les coordonnées sont entrées dans le système de coordonnées général (SCG). Pour renvoyer la matrice de
transformation d'un SCU, utilisez la méthode GetUCSMatrix Pour rechercher les coordonnées SCG équivalentes, utilisez cette matrice de transformation.
Pour rendre une matrice SCU active, utilisez la propriété ActiveUCS de l'objet Document Si d es modifications sont apportées au SCU actif, le nouvel objet SCU
doit être réinitialisé en tant que SCU actif pour refléter ces modifications. Pour réinitialiser le SCU actif, appelez à nouveau la propriété ActiveUCS avec l'objet
mis à jour.
Pour de plus amples informations sur la définition d'un SCU, reportez-vous à la section “Gestion du système de coordonnées utilisateur en 3D” du Manuel
d'utilisation .
Création, activation d'un SCU et conversion des coordonnées d'un point en coordonnées SCU
Le sous-programme suivant crée un SCU et le définit comme SCU actif du dessin. Il invite ensuite l'utilisateur à sélectionner un point sur le dessin et renvoie les
coordonnées SCU et SCG de ce point.
Sub Ch8_NewUCS()
' Define the variables we will need
Dim ucsObj As AcadUCS
Dim origin(0 To 2) As Double
Dim xAxisPnt(0 To 2) As Double
Dim yAxisPnt(0 To 2) As Double
' Define the SCU points
origin(0) = 4: origin(1) = 5: origin(2) = 3
xAxisPnt(0) = 5: xAxisPnt(1) = 5: xAxisPnt(2) = 3
yAxisPnt(0) = 4: yAxisPnt(1) = 6: yAxisPnt(2) = 3
' Add the UCS to the
' UserCoordinatesSystems collection
Set ucsObj = ThisDrawing.UserCoordinateSystems. _
Add(origin, xAxisPnt, yAxisPnt, "New_SCU")
' Display the UCS icon
ThisDrawing.ActiveViewport.UCSIconAtOrigin = True
ThisDrawing.ActiveViewport.UCSIconOn = True
' Make the new UCS the active UCS
ThisDrawing.ActiveUCS = ucsObj
MsgBox "The current UCS is : " & ThisDrawing.ActiveUCS.Name _
& vbCrLf & " Pick a point in the drawing."
' Find the WCS and UCS coordinate of a point
Dim WCSPnt As Variant
Dim UCSPnt As Variant
WCSPnt = ThisDrawing.Utility.GetPoint(, "Enter a point: ")
UCSPnt = ThisDrawing.Utility.TranslateCoordinates _
(WCSPnt, acWorld, acUCS, False)
MsgBox "The WCS coordinates are: " & WCSPnt(0) & ", " _
& WCSPnt(1) & ", " & WCSPnt(2) & vbCrLf & _
"The UCS coordinates are: " & UCSPnt(0) & ", " _
& UCSPnt(1) & ", " & UCSPnt(2)
End Sub
Travail en 3D
Conversion de coordonnées
La méthode TranslateCoordinates traduit un point ou un déplacement d'un système de coordonnées dans un autre. Un argument point appelé OriginalPoint
peut être interprété comme un point 3D ou un vecteur de déplacement 3D. Cet argument se distingue par l'argument booléenDisp. Si l'argument Disp est
défini sur TRUE, l'argument OriginalPoint est considéré comme un vecteur de déplacement ; sinon, il est traité comme un point. Deux autres arguments
déterminent de quel système de coordonnées l'argument OriginalPoint provient et en quel système de coordonnées il doit être converti. L es systèmes de
coordonnées AutoCAD suivants peuvent être spécifiés par les arguments de et à :
SCG
Système de coordonnées général : système de coordonnées de référence. Tous les autres systèmes de coordonnées sont définis en fonction du SCG, qui ne
change jamais. Les valeurs mesurées en fonction du SCG restent stables lorsque des modifications sont apportées à d'autres systèmes de coordonnées.
Sauf spécification contraire, tous les points issus de méthodes et propriétés ActiveX ou transférés vers elles, sont exprimés dans le SCG.
SCU
Système de coordonnées utilisateur (SCU) : système de coordonnées de travail. L'utilisateur spécifie un SCU pour faciliter les opérations de tracé. Tous les
points transmis aux commandes AutoCAD, notamment ceux renvoyés par les sous-programmes AutoLISP et les fonctions externes, sont des points exprimés
dans le SCU courant (à moins que l'utilisateur ne les fasse précéder d'un astérisque * au niveau de la ligne de commande). Pour que votre application
transmette des coordonnées du SCG, SCO ou SCV vers des commandes AutoCAD, vous devez d'abord les convertir en SCU en faisant appel à la méthode
TranslateCoordinates.
SCO
Système de coordonnées de l'objet : l es valeurs de point spécifiées par certaines méthodes et propriétés pour les objets Polyline et LightweightPolyline sont
exprimées dans ce système de coordonnées relatif à l'objet. Ces points sont généralement convertis dans le SCG, le SCU courant ou le SCV courant, selon
l'utilisation prévue pour l'objet. A l'inverse, les points du SCG, SCU ou SCV doivent être convertis dans un SCO avant d'être enregistrés dans la base de
données via les mêmes propriétés. Reportez-vous au manuel ActiveX and VBA Reference d'AutoCAD pour connaître les méthodes et propriétés qui utilisent
ce système de coordonnées.
Lors de la conversion de coordonnées vers ou depuis le SCO, vous devez définir la norme pour ce système dans l'argument final de la fonction
TranslateCoordinates.
SCV
Système de coordonnées de visualisation : le système de coordonnées dans lequel sont transformés les objets avant leur affichage. L'origine du SCV est le
point mémorisé dans la variable système TARGET d'AutoCAD, et son axe Z est la direction de visualisation. En d'autres termes, une fenêtre est toujours une
vue en plan de son SCV. Ces coordonnées permettent de déterminer l'endroit où un élément sera affiché à l'attention de l'utilisateur d'AutoCAD.
SCVEP
SCV de l'espace papier : ce système de coordonnées ne peut être transformé que vers ou à partir du SCV de la fenêtre active de l'espace objet. Il s'agit
essentiellement d'une transformation 2D, dans laquelle les coordonnées X et Y sont toujours mises à l'échelle et décalées si l'argument Disp a la valeur
FALSE. La coordonnée Z est mise à l'échelle mais n'est jamais convertie. Elle peut donc servir à déterminer le facteur d'échelle entre les deux systèmes de
coordonnées. Le SCVEP ne peut être converti q ue dans la fenêtre de l'espace objet active. Si l'argument de est égal à SCVEP, l'argument à doit être égal à
SCV et inversement.
Dans cet exemple, une polyligne est créée dans l'espace objet. Le premier sommet de cette polyligne est ensuite affiché dans les coordonnées du SCO et du
SCG. La conversion du SCO en SCG implique que la norme du SCO soit placée dans le dernier argument de la méthode TranslateCoordinates.
Sub Ch8_TranslateCoordinates()
' Create a polyline in model space.
Dim plineObj As AcadPolyline
Dim points(0 To 14) As Double
' Define the 2D polyline points
points(0) = 1: points(1) = 1: points(2) = 0
points(3) = 1: points(4) = 2: points(5) = 0
points(6) = 2: points(7) = 2: points(8) = 0
points(9) = 3: points(10) = 2: points(11) = 0
points(12) = 4: points(13) = 4: points(14) = 0
' Create a light weight Polyline object in model space
Set plineObj = ThisDrawing.ModelSpace.AddPolyline(points)
' Find the X and Y coordinates of the
' first vertex of the polyline
Dim firstVertex As Variant
firstVertex = plineObj.Coordinate(0)
' Find the Z coordinate for the polyline
' using the elevation property
firstVertex(2) = plineObj.Elevation
' Change the normal for the pline so that the
' difference between the coordinate systems
' is obvious.
Dim plineNormal(0 To 2) As Double
plineNormal(0) = 0#
plineNormal(1) = 1#
plineNormal(2) = 2#
plineObj.Normal = plineNormal
' Translate the OCS coordinate into WCS
Dim coordinateWCS As Variant
coordinateWCS = ThisDrawing.Utility.TranslateCoordinates _
(firstVertex, acOCS, acWorld, False, plineNormal)
' Display the coordinates of the point
MsgBox "The first vertex has the following coordinates:" _
& vbCrLf & "OCS: " & firstVertex(0) & ", " & _
firstVertex(1) & ", " & firstVertex(2) & vbCrLf & _
"WCS: " & coordinateWCS(0) & ", " & _
coordinateWCS(1) & ", " & coordinateWCS(2)
End Sub
Travail en 3D
Création d'objets 3D
Création d'un maillage à plusieurs faces Création d' un solide biseau AutoCAD prend en charge trois types de modélisation : filaire, surface et solide. Ces
différents types de modèle nécessitent la mise en œuvre de techniques de création et de modification spécifiques.
Pour de plus amples informations sur la création d'objets 3D, reportez-vous à la section “Création d'objets 3D” du Manuel d'utilisation .
Création de maillages
Création de solides
Travail en 3D
AutoCAD vous permet de créer des modèles filaires en définissant des objets 2D planaires n 'importe où dans l'espace 3D. Pour ce faire, vous disposez de
plusieurs solutions:
Pour créer des objets, saisissez des points 3D. Vous devez pour cela entrer des coordonnées qui définissent la position des points sur les axes X , Y et Z .
Définissez le plan de conception (plan XY ) par défaut sur lequel vous allez dessiner les objets, en créant un SCU.
Déplacez les objets dans l'espace 3D, afin de leur donner l'orientation voulue après les avoir créés.
Vous pouvez également créer certains objets filaires, tels que des polylignes, qui peuvent avoir une troisième dimension. Pour créer des polylignes 3D, utilisez
la méthode Add3DPoly
Pour de plus amples informations sur la création de modèles filaires, reportez-vous à la section “Création de modèles filaires” du Manuel d'utilisation .
Travail en 3D
Création de maillages
Un maillage rectangulaire (objet PolygonMesh) permet de représenter la surface d'un objet à l'aide de facettes planes. La densité du maillage (ou le nombre de
facettes) est définie par une matrice de sommets M et N comparable à une grille composée de colonnes et de lignes. M et N indiquent respectivement la
colonne et la ligne sur lesquelles se trouve un sommet donné. Vous pouvez créer des maillages en 2D ou en 3D, bien qu'ils soient utilisés principalement en
3D.
Pour créer des maillages rectangulaires, utilisez la méthode Add3DMesh Cette méthode requiert la saisie de trois valeurs : le nombre de sommets dans la
direction M , le nombre de sommets dans la direction N et un tableau Variant contenant les coordonnées de tous les sommets dans le maillage.
Une fois l'objet PolygonMesh créé, utilisez les propriétés MClose et NClose pour fermer le maillage.
Pour de plus amples informations sur la création de maillages, reportez-vous à la section “Création de surfaces” du Manuel d'utilisation .
Dans l'exemple suivant, un maillage polygonal 4 par 4 est créé. La direction de la fenêtre active est ensuite ajustée de façon à ce que le caractère
tridimensionnel du maillage puisse être visualisé plus facilement.
Sub Ch8_Create3DMesh()
Dim meshObj As AcadPolygonMesh
Dim mSize, nSize, Count As Integer
Dim points(0 To 47) As Double
' create the matrix of points
points(0) = 0: points(1) = 0: points(2) = 0
points(3) = 2: points(4) = 0: points(5) = 1
points(6) = 4: points(7) = 0: points(8) = 0
points(9) = 6: points(10) = 0: points(11) = 1
points(12) = 0: points(13) = 2: points(14) = 0
points(15) = 2: points(16) = 2: points(17) = 1
points(18) = 4: points(19) = 2: points(20) = 0
points(21) = 6: points(22) = 2: points(23) = 1
points(24) = 0: points(25) = 4: points(26) = 0
points(27) = 2: points(28) = 4: points(29) = 1
points(30) = 4: points(31) = 4: points(32) = 0
points(33) = 6: points(34) = 4: points(35) = 0
points(36) = 0: points(37) = 6: points(38) = 0
points(39) = 2: points(40) = 6: points(41) = 1
points(42) = 4: points(43) = 6: points(44) = 0
points(45) = 6: points(46) = 6: points(47) = 0
mSize = 4: nSize = 4
' creates a 3Dmesh in model space
Set meshObj = ThisDrawing.ModelSpace. _
Add3DMesh(mSize, nSize, points)
' Change the viewing direction of the viewport
' to better see the cylinder
Dim NewDirection(0 To 2) As Double
NewDirection(0) = -1
NewDirection(1) = -1
NewDirection(2) = 1
ThisDrawing.ActiveViewport.direction = NewDirection
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
ZoomAll
End Sub
Travail en 3D
Pour créer un maillage à plusieurs faces, chaque face pouvant avoir plusieurs sommets, utilisez la méthode AddPolyfaceMesh
Les procédures de définition d'un maillage à plusieurs faces et d'un maillage rectangulaire sont pratiquement identiques. Pour créer une polyface maillée,
spécifiez les coordonnées de tous ses sommets, puis définissez chaque face en entrant le numéro de chaque sommet de cette face. Au cours de la procédure
de création du maillage, vous pouvez rendre certaines arêtes invisibles ou les associer à différents calques ou couleurs.
Pour rendre une arête invisible, entrez le numéro des sommets sous forme de valeurs négatives. Pour de plus amples informations sur la création de polyfaces
maillées, reportez-vous à la méthode AddPolyfaceMesh du manuel ActiveX and VBA Reference .
Dans cet exemple, un maillage à plusieurs faces est créé dans l'espace objet. La direction de visualisation de la fenêtre active est mise à jour de façon à ce que
le caractère tridimensionnel du maillage soit plus facilement visible.
Sub Ch8_CreatePolyfaceMesh()
'Define the mesh vertices
Dim vertex(0 To 17) As Double
vertex(0) = 4: vertex(1) = 7: vertex(2) = 0
vertex(3) = 5: vertex(4) = 7: vertex(5) = 0
vertex(6) = 6: vertex(7) = 7: vertex(8) = 0
vertex(9) = 4: vertex(10) = 6: vertex(11) = 0
vertex(12) = 5: vertex(13) = 6: vertex(14) = 0
vertex(15) = 6: vertex(16) = 6: vertex(17) = 1
' Define the face list
Dim FaceList(0 To 7) As Integer
FaceList(0) = 1
FaceList(1) = 2
FaceList(2) = 5
FaceList(3) = 4
FaceList(4) = 2
FaceList(5) = 3
FaceList(6) = 6
FaceList(7) = 5
' Create the polyface mesh
Dim polyfaceMeshObj As AcadPolyfaceMesh
Set polyfaceMeshObj = ThisDrawing.ModelSpace.AddPolyfaceMesh _
(vertex, FaceList)
' Change the viewing direction of the viewport to
' better see the polyface mesh
Dim NewDirection(0 To 2) As Double
NewDirection(0) = -1
NewDirection(1) = -1
NewDirection(2) = 1
ThisDrawing.ActiveViewport.direction = NewDirection
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
ZoomAll
End Sub
Travail en 3D
Création de solides
Un solide (objet 3DSolid) représente le volume d' un objet. Le solide constitue le type de modèle 3D le moins ambigu qui donne le p lus d'informations sur l'objet.
D'autre part, les solides complexes sont plus faciles à construire et à manipuler que les modèles filaires ou les maillages.
Vous pouvez créer des solides à partir des figures élémentaires proposées par AutoCAD (parallélépipèdes, cônes, cylindres, sphères, tores et biseaux), en
extrudant un objet 2D sur une trajectoire ou en faisant pivoter un objet 2D autour d'un axe. Utilisez l'une des méthodes de création de solides suivantes :
De même que les maillages, les solides sont affichés comme des représentations filaires, jusqu'à ce que vous utilisiez les commandes CACHE, SHADE ou
RENDU. Vous pouvez analyser leurs propriétés mécaniques (volume, moments d'inertie, centre de gravité, etc.) Utilisez les propriétés suivantes pour analyser
des solides : MomentOfInertia, PrincipalDirections, PrincipalMoments, ProductOfInertia, RadiiOfGyration et Volume.
La propriété ContourlinesPerSurface définit le nombre de lignes de courbure utilisées pour visualiser les portions courbes de l'objet filaire. La propriété
RenderSmoothness ajuste le lissage des objets ombrés ou à lignes cachées.
Pour de plus amples informations sur la création de solides, reportez-vous à la section “Création d'objets 3D” du Manuel d'utilisation .
Dans cet exemple, un solide en forme de biseau est créé dans l'espace objet. La direction de visualisation de la fenêtre active est mise à jour de façon à ce que
le caractère tridimensionnel du solide soit plus facilement visible.
Sub Ch8_CreateWedge()
Dim wedgeObj As Acad3DSolid
Dim center(0 To 2) As Double
Dim length As Double
Dim width As Double
Dim height As Double
' Define the wedge
center(0) = 5#: center(1) = 5#: center(2) = 0
length = 10#: width = 15#: height = 20#
' Create the wedge in model space
Set wedgeObj = ThisDrawing.ModelSpace. _
AddWedge(center, length, width, height)
' Change the viewing direction of the viewport
Dim NewDirection(0 To 2) As Double
NewDirection(0) = -1
NewDirection(1) = -1
NewDirection(2) = 1
ThisDrawing.ActiveViewport.direction = NewDirection
ThisDrawing.ActiveViewport = ThisDrawing.ActiveViewport
ZoomAll
End Sub
Travail en 3D
Opérations d'édition en 3D
Cette section décrit différentes techniques d'édition d'objets 3D, notamment la rotation, la définition de réseaux et l a création de copies-miroirs.
Rotation en 3D
Travail en 3D
Rotation en 3D
La méthode Rotate permet de faire pivoter des objets en 2D par rapport à un point donné. La direction de la rotation est déterminée par le SCU. La méthode
Rotate3D fait pivoter des objets 3D autour d'un axe. La méthode Rotate3D requiert l a saisie de trois valeurs : les coordonnées SCG de deux points définissant
l'axe de rotation et l'angle de rotation en radians.
Pour faire pivoter des objets 3D, utilisez la méthode Rotate ou Rotate3D.
Pour de plus amples informations sur la rotation en 3D, reportez-vous à la section “Rotation des objets” du Manuel d'utilisation .
Dans cet exemple, une boîte 3D est créée. L'axe de rotation est ensuite défini et la boîte est pivotée de 30 degrés autour de cet axe.
Sub Ch8_Rotate_3DBox()
Dim boxObj As Acad3DSolid
Dim length As Double
Dim width As Double
Dim height As Double
Dim center(0 To 2) As Double
' Define the box
center(0) = 5: center(1) = 5: center(2) = 0
length = 5
width = 7
height = 10
' Create the box object in model space
Set boxObj = ThisDrawing.ModelSpace. _
AddBox(center, length, width, height)
' Define the rotation axis with two points
Dim rotatePt1(0 To 2) As Double
Dim rotatePt2(0 To 2) As Double
Dim rotateAngle As Double
rotatePt1(0) = -3: rotatePt1(1) = 4: rotatePt1(2) = 0
rotatePt2(0) = -3: rotatePt2(1) = -4: rotatePt2(2) = 0
rotateAngle = 30
rotateAngle = rotateAngle * 3.141592 / 180#
' Rotate the box
boxObj.Rotate3D rotatePt1, rotatePt2, rotateAngle
ZoomAll
End Sub
Travail en 3D
Création de réseaux 3D
La méthode ArrayRectangular permet de créer un réseau rectangulaire en 3 dimensions. Pour ce faire, vous devez spécifier le nombre de colonnes (direction X )
et de rangées (direction Y ), mais aussi le nombre de niveaux (direction Z ).
Pour de plus amples informations sur l'utilisation de réseaux d'objets en 3D, reportez-vous à la section “Création d'un réseau d'objets” du Manuel d'utilisation .
Dans cet exemple, un cercle est créé et utilisé pour créer un réseau rectangulaire de quatre lignes, quatre colonnes et trois niveaux de cercles.
Sub Ch8_CreateRectangularArray()
' Create the circle
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 2: center(1) = 2: center(2) = 0
radius = 0.5
Set circleObj = ThisDrawing.ModelSpace. _
AddCircle(center, radius)
' Define the rectangular array
Dim numberOfRows As Long
Dim numberOfColumns As Long
Dim numberOfLevels As Long
Dim distanceBwtnRows As Double
Dim distanceBwtnColumns As Double
Dim distanceBwtnLevels As Double
numberOfRows = 4
numberOfColumns = 4
numberOfLevels = 3
distanceBwtnRows = 1
distanceBwtnColumns = 1
distanceBwtnLevels = 4
' Create the array of objects
Dim retObj As Variant
retObj = circleObj.ArrayRectangular _
(numberOfRows, numberOfColumns, _
numberOfLevels, distanceBwtnRows, _
distanceBwtnColumns, distanceBwtnLevels)
ZoomAll
End Sub
Travail en 3D
La méthode Mirror3D permet de créer des copies-miroirs d'objets le long d'un plan de symétrie spécifié par trois points.
Pour de plus amples informations sur la création de copies-miroirs d'objets en 3D, reportez-vous à la section “Copie miroir d'objets” du Manuel d'utilisation .
Dans cet exemple, une boîte est créée dans l'espace objet. Une copie-miroir de cette boîte est ensuite faite le long d'un plan, et elle est colorée en rouge.
Sub Ch8_MirrorABox3D()
' Create the box object
Dim boxObj As Acad3DSolid
Dim length As Double
Dim width As Double
Dim height As Double
Dim center(0 To 2) As Double
center(0) = 5#: center(1) = 5#: center(2) = 0
length = 5#: width = 7: height = 10#
' Create the box (3DSolid) object in model space
Set boxObj = ThisDrawing.ModelSpace. _
AddBox(center, length, width, height)
' Define the mirroring plane with three points
Dim mirrorPt1(0 To 2) As Double
Dim mirrorPt2(0 To 2) As Double
Dim mirrorPt3(0 To 2) As Double
mirrorPt1(0) = 1.25: mirrorPt1(1) = 0: mirrorPt1(2) = 0
mirrorPt2(0) = 1.25: mirrorPt2(1) = 2: mirrorPt2(2) = 0
mirrorPt3(0) = 1.25: mirrorPt3(1) = 2: mirrorPt3(2) = 2
' Mirror the box
Dim mirrorBoxObj As Acad3DSolid
Set mirrorBoxObj = boxObj.Mirror3D _
(mirrorPt1, mirrorPt2, mirrorPt3)
mirrorBoxObj.Color = acRed
ZoomAll
End Sub
Travail en 3D
Edition de solides en 3D
Une fois un solide créé, vous pouvez l'utiliser pour concevoir des objets plus complexes en combinant les figures de base. Vous avez, par exemple, la
possibilité de joindre des solides, de soustraire un solide d'un autre ou de conserver uniquement leur volume commun (zone d'intersection). Pour effectuer ces
combinaisons, utilisez la méthode Boolean ou CheckInterference
Les solides peuvent également être modifiés en obtenant la section 2D d'un solide ou la création de coupes d' un solide en deux portions. Utilisez la méthode
SectionSolid pour rechercher les sections de solides, et la méthode SliceSolid pour diviser un solide en deux portions.
Dans cet exemple, une boîte et un cylindre sont créés dans l' espace objet. L'interférence entre les deux solides est ensuite recherchée, et un solide est créé sur
la base de cette interférence. Pour des besoins de visualisation, la boîte est en blanc, le cylindre en cyan, et le solide d'interférence en rouge.
Sub Ch8_FindInterferenceBetweenSolids()
' Define the box
Dim boxObj As Acad3DSolid
Dim length As Double
Dim width As Double
Dim height As Double
Dim center(0 To 2) As Double
center(0) = 5: center(1) = 5: center(2) = 0
length = 5
width = 7
height = 10
' Create the box object in model space
' and color it white
Set boxObj = ThisDrawing.ModelSpace. _
AddBox(center, length, width, height)
boxObj.Color = acWhite
' Define the cylinder
Dim cylinderObj As Acad3DSolid
Dim cylinderRadius As Double
Dim cylinderHeight As Double
center(0) = 0: center(1) = 0: center(2) = 0
cylinderRadius = 5
cylinderHeight = 20
' Create the Cylinder and
' color it cyan
Set cylinderObj = ThisDrawing.ModelSpace.AddCylinder _
(center, cylinderRadius, cylinderHeight)
cylinderObj.Color = acCyan
' Find the interference between the two solids
' and create a new solid from it. Color the
' new solid red.
Dim solidObj As Acad3DSolid
Set solidObj = boxObj.CheckInterference(cylinderObj, True)
solidObj.Color = acRed
ZoomAll
End Sub
Dans cet exemple, une boîte est créée dans l'espace objet. Cette boîte est ensuite coupée selon un plan défini par trois points. La coupe est renvoyée en tant
que solide 3D.
Sub Ch8_SliceABox()
' Create the box object
Dim boxObj As Acad3DSolid
Dim length As Double
Dim width As Double
Dim height As Double
Dim center(0 To 2) As Double
center(0) = 5#: center(1) = 5#: center(2) = 0
length = 5#: width = 7: height = 10#
' Create the box (3DSolid) object in model space
Set boxObj = ThisDrawing.ModelSpace. _
AddBox(center, length, width, height)
boxObj.Color = acWhite
' Define the section plane with three points
Dim slicePt1(0 To 2) As Double
Dim slicePt2(0 To 2) As Double
Dim slicePt3(0 To 2) As Double
slicePt1(0) = 1.5: slicePt1(1) = 7.5: slicePt1(2) = 0
slicePt2(0) = 1.5: slicePt2(1) = 7.5: slicePt2(2) = 10
slicePt3(0) = 8.5: slicePt3(1) = 2.5: slicePt3(2) = 10
' slice the box and color the new solid red
Dim sliceObj As Acad3DSolid
Set sliceObj = boxObj.SliceSolid _
(slicePt1, slicePt2, slicePt3, True)
sliceObj.Color = acRed
ZoomAll
End Sub
L'opération de traçage consiste à reproduire sur papier un dessin créé dans AutoCAD. Ce tracé peut représenter une simple vue du dessin ou un arrangement
plus complexe de fenêtres. Dans l'espace papier, vous pouvez créer des fenêtres dites fenêtres flottantes, lesquelles affichent différentes vues du dessin. Selon
vos besoins, vous pouvez tracer une ou plusieurs fenêtres ou à l'aide d'options, inclure ou exclure certains éléments du d essin et définir l'emplacement de
l'image sur le papier.
Présentations
Fenêtres
Traçage du dessin
L'espace objet constitue l'environnement du dessin dans lequel vous créez la géométrie de votre modèle. En principe, lorsque vous commencez à dessiner
dans l'espace objet, vous définissez les limites du dessin afin de déterminer l'étendue de l'environnement de dessin et vous utilisez des unités réelles.
L'espace papier correspond à la représentation sur papier de votre modèle tel qu'il va être tracé. Dans cet espace, vous pouvez définir des vues différentes du
dessin, les mettre à l'échelle indépendamment les unes des autres et les agencer telles que vous souhaitez qu'elles soient tracées. Vous pouvez ainsi obtenir
différentes représentations de votre dessin.
Présentations
Les présentations contiennent toute la géométrie du dessin. La géométrie de l'espace objet est contenue dans une seule présentation appelée modèle. Vous ne
pouvez pas renommer la présentation de l'espace objet, ni en créer une autre. Chaque dessin ne peut contenir qu'une seule présentation d'espace objet.
La géométrie de l'espace papier est également contenue dans des présentations. Un dessin peut contenir p lusieurs présentations d'espace papier, chacune
représentant une configuration différente à imprimer. Vous pouvez également modifier le nom des présentations en espace papier.
Dans l'Automatisation ActiveX ® , la collection ModelSpace contient toute la géométrie de la présentation d'espace objet. Un dessin pouvant contenir plusieurs
présentations d'espace papier, la collection PaperSpace désigne la dernière présentation active.
Pour de plus amples informations sur les présentations d'espace papier, reportez-vous à la section “Hachures, remplissages et n ettoyages” du Manuel
d'utilisation .
Présentations et blocs
Configurations de traceur
Présentations et blocs
Le contenu de toute présentation est réparti entre deux objets ActiveX différents : l'objet Layout et l'objet Block. Le premier contient les paramètres du tracé et
les propriétés visuelles de la présentation telle qu'elle apparaît dans l'interface utilisateur d'AutoCAD. Le second contient l a géométrie de la présentation.
Chaque objet Layout est associé à un seul et unique objet Block. Pour accéder à l'objet Block a ssocié à une présentation donnée, utilisez la propriété Block
Inversement, chaque objet Block est associé à un seul et unique objet Layout. Pour accéder à l'objet Layout associé à un bloc donné, utilisez la propriété
Layout de ce bloc.
Configurations de traceur
Un objet PlotConfiguration est semblable à un objet Layout, car ils contiennent tous deux des informations de tracé identiques. La différence entre les deux est
que l'objet Layout est associé à un objet Block contenant la géométrie à tracer. L'objet PlotConfiguration n'est pas associé à un objet Block donné. Il s'agit tout
simplement d'une collection nommée de paramètres de tracé, disponible pour être utilisée avec toutes les géométries.
Les paramètres de mise en page définissent la sortie finale du tracé. Ils déterminent notamment le format du papier, l'échelle du tracé, son origine et le nom du
périphérique de traçage. Une bonne maîtrise de ces paramètres garantit que la présentation sera tracée comme prévu. Vous pouvez modifier les paramètres
d'une présentation à l'aide des propriétés et méthodes de l'objet Layout
Le choix d'un format de p apier est fonction du traceur configuré pour votre système. Chaque traceur dispose d'une liste standard de formats de papier
disponibles. Vous pouvez modifier le format de papier d'une présentation en utilisant la propriété CanonicalMediaName
Vous pouvez également spécifier les unités de votre présentation à l'aide de la propriété PaperUnits Cette propriété requiert l'une de ces trois valeurs :
acInches, acMillimeters ou acPixels. Si le traceur est configuré pour une impression raster, vous devez indiquer la taille en pixels.
L'origine du tracé correspond à l'angle inférieur gauche de l'aire du tracé spécifiée et est défini à l'aide de la propriété PlotOrigin En principe, elle a les valeurs
(0, 0). Mais vous pouvez centrer le tracé sur la feuille de papier en attribuant la valeur TRUE à la propriété CenterPlot. Le centrage du tracé modifie son origine.
Lorsque vous préparez le traçage d'une présentation, vous pouvez spécifier l'aire du tracé afin de déterminer quels éléments il contiendra. Pour spécifier l'aire
du tracé, faites appel à la propriété PlotType Cette propriété requiert l'entrée de l'une des valeurs suivantes :
acDisplay
Imprime tout le contenu de l'espace objet courant. Cette option n'est pas disponible lorsque le tracé est effectué depuis u ne présentation en espace papier.
acExtents
Imprime tout le contenu de l'espace actuellement sélectionné.
acLimits
Imprime tout le contenu de l'espace courant.
acView
Imprime la vue désignée par la propriété ViewToPlot.
acWindow
Imprime tout le contenu de la fenêtre désignée par la méthode SetWindowToPlot.
acLayout
Imprime tous les éléments compris dans les marges du format de papier spécifié. Cette option n'est pas disponible lorsque vous i mprimez depuis l'espace
objet.
Lorsque vous créez une présentation en espace papier, l'option par défaut est acLayout.
En général, vous dessinez des objets grandeur nature. puis, au moment du traçage, de spécifier une échelle précise ou d'ajuster l'image en fonction du papier.
Vous pouvez spécifier une échelle standard ou personnalisée.
Pour définir une échelle standard, attribuez la valeur TRUE à la propriété UseStandardScale. Vous pouvez ensuite entrer l'échelle voulue dans la propriété
StandardScale
Pour définir une échelle personnalisée, attribuez la valeur FALSE à la propriété UseStandardScale. Vous pouvez ensuite entrer l'échelle voulue à l'aide de la
méthode SetCustomScale
La précision de l'échelle importe peu dans certains cas, notamment s'il s'agit simplement de tracer une première ébauche du dessin. Vous pouvez utiliser la
valeur acScaleToFit de la propriété StandardScale pour tracer la présentation au format maximal susceptible de tenir sur la feuille de papier.
Vous pouvez définir proportionnellement l'épaisseur des lignes d'une présentation dans la zone Echelle du tracé. En principe, les épaisseurs de ligne définissent
l'épaisseur de trait des objets tracés, indépendamment de l'échelle du tracé. La plupart du temps, l'échelle utilisée par défaut est 1:1 pour le traçage d'une
présentation. Cependant, pour tracer au format E une présentation dont l'échelle est définie pour un format A, vous pouvez par exemple faire en sorte que
l'échelle des épaisseurs de lignes soit ajustée à la nouvelle échelle du tracé.
Pour mettre l'épaisseur des lignes à l'échelle, attribuez la valeur TRUE à la propriété ScaleLineweights. Sinon, attribuez-lui la valeur FALSE.
Le nom du périphérique de traçage e st spécifié dans la propriété ConfigName Vous pouvez saisir le nom d'un périphérique opérationnel sur votre système. Si
vous ne spécifiez pas de nom, les tracés sont envoyés au périphérique défini par défaut sur votre système.
Fenêtres
Lorsque vous travaillez dans l'espace objet, vous tracez le dessin dans des fenêtres en mosaïque (appelées objets Viewport dans l'Automatisation ActiveX).
Vous pouvez afficher une ou plusieurs fenêtres à la fois. Lorsque vous modifiez le contenu de l'une des fenêtres, AutoCAD met automatiquement à jour les
autres fenêtres affichées à l'écran. En revanche, vous pouvez définir les paramètres d'agrandissement, de point de vue, de grille et d'accrochage
indépendamment pour chaque fenêtre.
Dans l'espace papier, vous travaillez dans des fenêtres flottantes (appelées objets PViewport dans l'Automatisation ActiveX) qui contiennent différentes vues du
modèle. Ces fenêtres sont utilisées comme des objets que vous déplacez, redimensionnez et façonnez afin d'obtenir la présentation souhaitée. La vue de
l'espace papier offre un avantage supplémentaire puisque vous pouvez y dessiner directement des objets, tels que des blocs ou des annotations, sans modifier
le modèle du dessin.
Pour de plus amples informations sur les fenêtres, reportez-vous aux sections “Définition des fenêtres de l'espace objet”.
Fenêtres flottantes
Fenêtres flottantes
Vous ne pouvez pas modifier le modèle dans l'espace papier. Pour accéder au modèle dans un objet PViewport, passez de l'espace papier à l'espace objet à
l'aide de la propriété ActiveSpace En p rocédant ainsi, vous pouvez remanier le modèle du dessin tout en visualisant sa présentation générale à l'écran. Les
fonctions de modification et de changement de vue disponibles pour les objets PViewport sont sensiblement les mêmes que celles des objets Viewport Elles
offrent cependant une plus grande marge de manœuvre au niveau de chaque vue. Vous pouvez, par exemple, geler ou désactiver les calques de certaines
fenêtres sans modifier la vue affichée dans les autres. Vous pouvez activer ou désactiver une fenêtre tout entière. Vous pouvez également aligner les vues de
plusieurs fenêtres et les mettre à l'échelle par rapport à la présentation générale du dessin.
L'illustration suivante montre les différentes possibilités d'affichage des vues d'un modèle dans l'espace papier. Chaque image représente une fenêtre flottante
(objet PViewport) contenant une vue donnée. Nous avons ainsi gelé le calque des cotes dans une vue. Notez que le cartouche, la bordure et l' annotation, créés
dans l'espace papier, n'apparaissent pas dans la vue de l'espace objet. Notez également que le calque contenant les bordures de la fenêtre a été désactivé.
Lorsque vous travaillez dans une fenêtre en mosaïque (objet Viewport), la propriété ActiveSpace doit toujours avoir la valeur acModelSpace. Dans une fenêtre
flottante (objet PViewport), en revanche, cette propriété peut avoir la valeur acModelSpace ou acPaperSpace, ce qui vous permet de passer de l'espace
papier à l'espace objet selon vos besoins.
PViewport ActiveSpace = Travailler dans les fenêtres flottantes afin de modifier le modèle du dessin ou de changer de vue. Vous pouvez désactiver ou
acModelspace geler les calques, dans les fenêtres de votre choix.
Fenêtre ActiveSpace = Travailler dans les fenêtres en mosaïque pour modifier les différentes vues du modèle.
acModelspace
Dans l'Automatisation ActiveX d'AutoCAD ® , la propriété ActiveSpace permet de contrôler la variable système TILEMODE. Lorsque vous définissez
ThisDrawing.ActiveSpace = acModelSpace, cela revient à activer TILEMODE (TILEMODE = on) et, lorsque vous définissez
ThisDrawing.ActiveSpace = acPaperSpace, cela revient à désactiver TILEMODE (TILEMODE = off).
De même, la propriété MSpace est équivalente aux commandes MSPACE et PSPACE d'AutoCAD. Lorsque vous définissez ThisDrawing.MSpace = TRUE,
cela revient à utiliser la commande ESPACEO : l'espace objet est activé. Lorsque vous définissez ThisDrawing.MSpace = FALSE, cela revient à utiliser la
commande ESPACEP : l'espace papier est activé.
Vous devez en outre appliquer la méthode Display avant d'attribuer la valeur TRUE à la propriété MSpace. Cette méthode initialise les paramètres graphiques
requis pour passer en espace objet. Dans AutoCAD, cette opération est effectuée en arrière-plan.Mais, dans l'interface de l'Automatisation ActiveX, le
programmeur en est responsable.
Remarque Pensez à activer l'affichage d'au moins un objet PViewport à l'aide de la méthode Display avant d'attribuer la valeur TRUE à la propriété MSpace.
Sinon, cette propriété produira une erreur.
Depuis l'espace objet, vous pouvez passer à la dernière présentation active de l'espace papier.
ThisDrawing.MSpace = FALSE
Lorsque vous activez l'espace papier, AutoCAD affiche l'icône de système de coordonnées utilisateur (SCU) dans le coin inférieur gauche de la zone graphique.
Les réticules indiquent que la zone d e présentation du dessin dans l'espace papier (et non pas les vues des fenêtres) peut être éditée.
De l'espace papier, vous pouvez basculer vers des fenêtres flottantes ou des fenêtres en mosaïque de l'espace objet.
ThisDrawing.MSpace = TRUE
Remarque Vous devez créer des fenêtres flottantes avant d'essayer de passer en espace objet.
La méthode AddPViewport permet de créer des fenêtres dans l'espace papier. Elle requiert la définition du centre, de la largeur et de la hauteur de la nouvelle
fenêtre. Avant de créer la fenêtre, u tilisez la propriété ActiveSpace pour définir l'espace papier comme espace courant (ce qui est en principe effectué en
attribuant la valeur 0 à l a variable TILEMODE).
Une fois l'objet PViewport créé, vous pouvez définir les propriétés de la vue, notamment la direction de visée (propriété Direction), la longueur de l'objectif pour
les vues en perspective (propriété LensLength) et l'affichage de la grille (propriété GridOn Vous pouvez également définir les propriétés de la fenêtre, comme le
calque (propriété Layer), le type de ligne (propriété Linetype) et la mise à l'échelle du type de ligne (propriété LinetypeScale
Dans l'exemple suivant, AutoCAD passe en espace papier, crée une fenêtre flottante, définit la vue et active la fenêtre.
Sub Ch9_SwitchToPaperSpace()
' Set the active space to paper space
ThisDrawing.ActiveSpace = acPaperSpace
' Create the paperspace viewport
Dim newVport As AcadPViewport
Dim center(0 To 2) As Double
center(0) = 3.25
center(1) = 3
center(2) = 0
Set newVport = ThisDrawing.PaperSpace. _
AddPViewport(center, 6, 5)
' Change the view direction for the viewport
Dim viewDir(0 To 2) As Double
viewDir(0) = 1
viewDir(1) = 1
viewDir(2) = 1
newVport.direction = viewDir
' Enable the viewport
newVport.Display True
' Switch to model space
ThisDrawing.MSpace = True
' Set newVport current
' (not always necessary but a good idea)
ThisDrawing.ActivePViewport = newVport
' Zoom Extents in model space
ZoomExtents
' Turn model space editing off
ThisDrawing.MSpace = False
' ZoomExtents in paperspace
ZoomExtents
End Sub
L'ordre des étapes dans le code précédent est important. En principe, les opérations sont exécutées dans le même ordre que sur la ligne de commande
d'AutoCAD. Les seules opérations imprévues sont la définition de la vue et l'activation de la fenêtre.
Remarque Pour définir ou modifier l'aspect de la vue (direction de visée, longueur d'objectif, etc.), vous devez désactiver la méthode Display ( FALSE) de l'objet
Viewport et, avant de définir la fenêtre courante, activer la méthode Display ( TRUE).
L'exemple suivant prend le premier exemple de l a section "Création et activation d'une fenêtre flottante" et le complète pour créer quatre fenêtres flottantes et
définir dans chacune d'elles une vue de dessus, de face, de droite et isométrique. Chaque vue est mise à l'échelle à la moitié de l'espace papier. Pour garantir
que ces fenêtres contiennent des objets, vous pouvez créer une sphère solide en 3D avant d'essayer cet exemple.
Sub Ch9_FourPViewports()
Dim topVport, frontVport As AcadPViewport
Dim rightVport, isoVport As AcadPViewport
Dim pt(0 To 2) As Double
Dim viewDir(0 To 2) As Double
ThisDrawing.ActiveSpace = acPaperSpace
ThisDrawing.MSpace = True
' Take the existing PViewport and make it the topVport
pt(0) = 2.5: pt(1) = 5.5: pt(2) = 0
Set topVport = ThisDrawing.ActivePViewport
'No need to set Direction for top view
topVport.center = pt
topVport.width = 2.5
topVport.height = 2.5
topVport.Display True
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = topVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and setup frontVport
pt(0) = 2.5: pt(1) = 2.5: pt(2) = 0
Set frontVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 0: viewDir(1) = 1: viewDir(2) = 0
frontVport.direction = viewDir
frontVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = frontVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and setup rightVport
pt(0) = 5.5: pt(1) = 5.5: pt(2) = 0
Set rightVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 1: viewDir(1) = 0: viewDir(2) = 0
rightVport.direction = viewDir
rightVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = rightVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
'Create and set up isoVport
pt(0) = 5.5: pt(1) = 2.5: pt(2) = 0
Set isoVport = ThisDrawing.PaperSpace. _
AddPViewport(pt, 2.5, 2.5)
viewDir(0) = 1: viewDir(1) = 1: viewDir(2) = 1
isoVport.direction = viewDir
isoVport.Display acOn
ThisDrawing.MSpace = True
ThisDrawing.ActivePViewport = isoVport
ZoomExtents
ZoomScaled 0.5, acZoomScaledRelativePSpace
'Finish: Perform a regen in all viewports
ThisDrawing.Regen True
End Sub
Pour changer la vue d'un objet Viewport, vous devez être en espace objet et la fenêtre doit être active.
2. Modifiez le dessin.
Dans l'espace papier, vous pouvez également créer des objets, tels que des annotations, des cotes et des cartouches. Toutefois, vous devez attribuer la valeur
FALSE à la propriété ActiveSpace et activer l'espace papier à l'aide de la propriété MSpace. Les objets créés dans l'espace papier ne sont visibles que dans cet
espace.
Vous pouvez définir de manière précise les facteurs d'échelle de chaque partie du dessin avant d'envoyer celui-ci vers un traceur. La mise à l'échelle des vues
par rapport à l'espace papier permet d'obtenir une échelle uniforme pour chacune des vues affichées. La vue de l'espace papier illustrée ci-après contient
plusieurs fenêtres, chacune associée à une vue et une échelle différentes. Pour obtenir une mise à l'échelle précise lors du traçage du dessin, vous devez
définir l'échelle de chaque vue par rapport à l'espace papier et non par rapport à la vue précédente ou au modèle grandeur nature.
Lorsque vous travaillez dans l'espace papier, le facteur d'échelle représente le rapport entre les dimensions du tracé et la taille réelle du modèle affiché dans les
fenêtres. Pour calculer cette échelle, il suffit de diviser les unités de l'espace papier par les unités de l'espace objet. Par exemple, dans le cas d'un dessin
rapporté à l'échelle 1/4, indiquez une u nité de l'espace papier pour quatre unités de l'espace objet.
Utilisez la méthode ZoomScaled pour mettre à l'é chelle des fenêtres par rapport aux unités de l'espace papier. Cette méthode requiert la saisie de trois valeurs :
la fenêtre à mettre à l'échelle, le facteur d'échelle et le mode d'application du facteur d'échelle. La troisième entrée est facultative et détermine de quelle f açon
l'échelle est appliquée.
Pour spécifier une échelle par rapport aux unités de l'espace papier, entrez la constante acZoomScaledRelativePSpace pour cette valeur.
Comme le montrent les illustrations, si vous spécifiez une échelle de 2 par rapport aux unités de l'espace papier, l'échelle de la fenêtre sera égale aux unités de
l'espace papier multipliées par deux. Si vous spécifiez une échelle de .5 t oujours par rapport aux unités de l 'espace papier, l'échelle de la fenêtre sera égale aux
unités de l'espace papier divisées par d eux. Le dessin reproduit sur papier sera donc deux fois plus petit que le modèle d'origine.
AutoCAD propose deux méthodes permettant de mettre à l'échelle n'importe quel type de ligne. Vous pouvez définir l'échelle par rapport aux unités de l'espace
(papier ou objet) dans lequel vous a vez créé l'objet. La seconde méthode consiste à définir une échelle uniforme par rapport aux unités de l'espace papier. L a
variable système PSLTSCALE permet d'appliquer la même échelle aux types de lignes des objets affichés dans différentes fenêtres, l'échelle de zoom variant
d'une fenêtre à l'autre. Cette variable redéfinit également l'affichage des lignes dans des vues 3D.
Dans l'exemple suivant, nous avons utilisé la variable système PSLTSCALE pour effectuer une mise à l'échelle uniforme du type de ligne dans l'espace papier.
Vous pouvez remarquer que ce type de ligne possède la même échelle dans les deux fenêtres bien que l'échelle de zoom des objets soit différente.
Si votre dessin contient des faces 3 D, des mailles, des objets extrudés, des surfaces ou des solides, vous pouvez exécuter un tracé depuis l'espace papier en
utilisant les options Comme affiché, Filaire, Caché et Rendu. Les fenêtres ombrées et rendues sont affichées en modes Aperçu du tracé, Tracé et Tracé dans
un fichier avec ombrage et rendu intégral.
Pour définir une option de traçage d e fenêtre ombrée dans l'espace papier, utilisez la propriété ShadePlot de l'objet PViewport
Remarque Pour masquer des lignes sur les tracés des fenêtres de l'espace objet (objets Viewport), utilisez la propriété PlotHidden de l 'objet Layout Cette
propriété requiert une valeur booléenne : TRUE pour supprimer les lignes cachées, FALSE pour les dessiner.
Traçage du dessin
Vous pouvez tracer le dessin dans l'espace objet ou tracer l'une de vos présentations d'espace papier préparées. Il est souvent p référable d'effectuer le tracé
depuis l'espace objet lorsque vous voulez visualiser ou vérifier le dessin avant de créer une présentation d'espace papier. Une fois le modèle prêt, vous pouvez
préparer et tracer une présentation d'espace papier.
Remarque La variable système BACKGROUNDPLOT doit être définie sur 0 pour qu'un script puisse tracer plusieurs tâches.
Le traçage implique l'utilisation de deux objets Automatisation ActiveX : l'objet Layout et l'objet Plot. Le premier contient les paramètres de tracé d'une
présentation donnée. Le second contient les méthodes et propriétés qui initient et contrôlent une séquence de traçage.
Traçage de base
Traçage de base
PlotToFile
Trace dans un fichier.
PlotToDevice
Trace vers un traceur ou une imprimante.
DisplayPlotPreview
Affiche un aperçu du tracé spécifié.
QuietErrorMode
Active le mode d'erreur muet pour le rapport d'erreurs du tracé.
En principe, lorsque vous tracez un dessin volumineux comme un plan d'étage, vous pouvez spécifier l'échelle dans laquelle convertir les unités de dessin
réelles en pouces ou millimètres tracés. Toutefois, lorsque vous tracez dans l'espace objet, les paramètres utilisés par défaut si aucun autre paramètre n'est
spécifié sont les suivants : tracé sur l'imprimante système, tracé de la vue courante, ajustement au format du papier, rotation de 0 et décalage de 0,0. Pour
modifier les paramètres du tracé, changez les propriétés de l'objet Layout associé à l'espace objet.
Dans cet exemple, l'utilisateur vérifie d'abord que l'espace actif est l'espace objet. Puis il définit plusieurs paramètres de tracé. Enfin, le tracé est envoyé via la
méthode PlotToDevice
Sub Ch9_PrintModelSpace()
' Verify that the active space is model space
If ThisDrawing.ActiveSpace = acPaperSpace Then
ThisDrawing.MSpace = True
ThisDrawing.ActiveSpace = acModelSpace
End If
' Set the extents and scale of the plot area
ThisDrawing.ModelSpace.Layout.PlotType = acExtents
ThisDrawing.ModelSpace.Layout. _
StandardScale = acScaleToFit
' Set the number of copies to one
ThisDrawing.Plot.NumberOfCopies = 1
' Initiate the plot
ThisDrawing.Plot.PlotToDevice
End Sub
Le nom du périphérique de traçage e st spécifié dans la propriété ConfigName Ce périphérique peut être remplacé dans la méthode PlotToDevice en spécifiant
un fichier PC3.
Vous pouvez tracer une présentation de l'espace p apier. Vous pouvez tracer la présentation active comme indiqué dans la section "Traçage en espace objet"
ou spécifier le nom de la présentation à tracer.
Avec l'expérience, vous utiliserez au mieux les nombreuses fonctions avancées d'AutoCAD permettant d'améliorer vos applications.
Vous pouvez inclure dans un dessin des images raster telles que des photographies aériennes, des photographies satellite et numériques, ainsi que des
images de rendu informatique. Pour de plus amples informations sur les images raster en plus des informations présentées dans cette section, reportez-vous au
Manuel d'utilisation .
En plus de l'amélioration de l' image visuelle d'un dessin, AutoCAD propose plusieurs fonctions destinées à aider à organiser les données, permettant ainsi
d'étendre l'intelligence des objets dans un dessin.
AutoCAD ® permet d'ajouter des images raster aux dessins vectoriels AutoCAD, puis de visualiser et de tracer le fichier obtenu.
Délimitation d'images
Vous pouvez placer les images dans un fichier de dessin bien qu'elles ne fassent pas vraiment partie du fichier. L'image est liée au fichier de dessin par
l'intermédiaire d'un chemin d'accès ou d'un ID de document de gestion de données. Vous pouvez modifier ou supprimer ces chemins d'accès à n'importe quel
moment. Pour attacher une image, créez un objet Raster dans le dessin à l'aide de la méthode AddRaster. Cette méthode requiert la saisie de quatre valeurs :
le nom du fichier image à attacher, le point d'insertion où placer l'image dans le dessin, le facteur d'échelle de l'image et l'angle de rotation de l'image.
Souvenez-vous que l'objet Raster représente une liaison indépendante vers l'image, et non l'image elle-même.
Une fois une image attachée, vous p ouvez l'attacher à nouveau plusieurs fois, en créant ainsi un objet Raster pour chaque attachement. Chaque attachement
possède son propre contour de délimitation et ses propres paramètres de luminosité, de contraste, d'estompe et de transparence. Chaque image peut être
sectionnée en plusieurs portions que vous pouvez réorganiser indépendamment dans le dessin.
Vous pouvez définir le facteur d'échelle de l'image raster lorsque vous créez l'objet Raster. Ainsi, l'échelle des objets de l'image correspond à celle des objets
créés dans le dessin AutoCAD. Lorsque vous sélectionnez une image à attacher, l'image est insérée selon un facteur d'échelle d'1 unité de mesure d'image
correspondant à 1 unité de mesure AutoCAD. Pour définir le facteur d'échelle de l'image, vous devez connaître l'échelle de la géométrie sur l'image, ainsi que
l'unité de mesure (pouces, pieds, etc.) à utiliser pour définir une unité AutoCAD. Le fichier image doit contenir des informations sur la résolution définissant les
PPP (ou nombre de points par pouce) ainsi que le nombre de pixels de l'image.
Si une image comporte des informations sur l a résolution, AutoCAD les combine avec le facteur d'échelle et l'unité de mesure AutoCAD que vous avez indiquée
afin de mettre à l'échelle l'image dans votre dessin. Par exemple, s'il s'agit d'une image raster numérisée dont l'échelle est de 1 pouce pour 50 pieds ou 1:600,
et que le dessin AutoCAD est configuré de sorte qu'une unité représente 1 pouce, mettez à 600 le paramètre ScaleFactor de la méthode AddRaster.
AutoCAD insère alors l'image selon une échelle qui aligne les objets de l'image avec la géométrie vectorielle du dessin.
Remarque Si aucune information de résolution n'est définie avec le fichier image attaché, AutoCAD calcule la largeur d'origine de l'image en tant qu'une unité.
Après insertion, la largeur de l'image en unités AutoCAD est égale au facteur d'échelle.
Dans cet exemple, une image raster est ajoutée dans l'espace objet. L'exemple utilise le fichier watch.jpg , qui se trouve dans le répertoire Sample. Si cette
image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin d'accès et un nom de fichier appropriés pour la
variable imageName.
Sub Ch10_AttachingARaster()
Dim insertionPoint(0 To 2) As Double
Dim scalefactor As Double
Dim rotationAngle As Double
Dim imageName As String
Dim rasterObj As AcadRasterImage
imageName = "C:/Program Files/Répertoire AutoCAD/sample/watch.jpg '
insertionPoint(0) = 5
insertionPoint(1) = 5
insertionPoint(2) = 0
scalefactor = 2
rotationAngle = 0
On Error GoTo ERRORHANDLER
' Attach the raster image in model space
Set rasterObj = ThisDrawing.ModelSpace.AddRaster _
(imageName, insertionPoint, _
scalefactor, rotationAngle)
ZoomAll
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Vous pouvez gérer le nom d'une image raster, son nom de fichier et son chemin d'accès à l'aide des propriétés de l'objet Raster.
La propriété ImageFile permet d'interroger ou de modifier le chemin d'accès et le nom de fichier d'une image. Le chemin d'accès défini par cette propriété est le
chemin d'accès dans lequel AutoCAD recherche l'image.
Si AutoCAD ne trouve pas le dessin (par exemple, si vous avez déplacé le fichier vers un autre répertoire que celui enregistré avec la propriété ImageFile), il
supprime les informations de chemin relatives ou absolues du nom (par exemple, \images\tree.tga ou c:\projet\images\tree.tga devient tree.tga ) et recherche les
chemins définis via la méthode SetProjectFilePath de l'objet Preferences. Si le dessin ne se trouve pas dans ces chemins, AutoCAD essaie à nouveau le
premier chemin d'accès.
Vous pouvez supprimer le chemin d'accès du nom de fichier ou spécifier un chemin d'accès relatif en redéfinissant la propriété ImageFile.
La modification du chemin d'accès dans la propriété ImageFile n'affecte pas les paramètres du chemin de recherche des fichiers de projet.
Les noms d'image ne sont pas nécessairement identiques au nom de fichier des images. Lorsque vous associez une image à un dessin, AutoCAD utilise le
nom du fichier sans son extension comme nom d'image. Vous pouvez changer le nom d'image sans modifier le nom de fichier.
Le fichier image est représenté par la propriété ImageFile sur l'objet Raster. La modification de la propriété ImageFile modifie l'image dans le dessin. Le nom de
l'image est représenté par la propriété Name, et la modification de celle-ci modifie uniquement le nom de l'image et non son fichier associé.
Toute image possède un contour. Lorsque vous attachez une image à un dessin, son contour hérite des paramètres courants des propriétés, notamment les
paramètres couleur, calque, type de ligne et échelle du type de ligne. S'il s'agit d'une image à deux tons, la couleur de l'image et la couleur du contour sont
identiques.
De même qu'avec d'autres objets AutoCAD, vous pouvez modifier les images et les propriétés de leurs contours. Vous pouvez notamment effectuer les
opérations suivantes :
En cachant un contour d'image, vous évitez tout déplacement ou modification accidentelle de l'image, ainsi que le traçage ou l'affichage du contour. Lorsque les
contours des images sont cachés, les images délimitées restent affichées dans les limites spécifiées ; seuls les contours sont concernés. Les opérations
d'affichage et de masquage des contours s'appliquent à toutes les images attachées à votre dessin.
Pour afficher ou masquer les contours d'une image, utilisez la propriété ClippingEnabled.
Remarque Cette propriété affecte uniquement le contour de l'image. Pour visualiser une modification dans l 'image lors de l'activation ou de la désactivation de
cette propriété, observez de près le petit contour entourant l'image.
Vous pouvez changer la couleur et le type de ligne des contours de l'image, ainsi que le calque de l'image à l'aide des propriétés suivantes :
Layer
Spécifie le calque de l'image.
Color
Spécifie la couleur du contour de l'image.
Linetype
Spécifie le type de ligne de l'image.
Vous pouvez modifier l'échelle, la rotation, l'emplacement, la largeur et la hauteur d'une image à l'aide des méthodes et propriétés suivantes :
ScaleEntity
Met l'image à l'échelle.
Rotate
Fait pivoter l'image.
Origin
Spécifie l'emplacement de l'image.
Width
Spécifie la largeur de l'image en pixels.
Height
Spécifie la hauteur de l'image en pixels.
ImageWidth
Spécifie la largeur de l'image en unités de base de données.
ImageHeight
Spécifie la hauteur de l'image en unités de base de données.
ShowRotation
Détermine si l'effet de rotation de l'image raster est affiché.
La visibilité de l'image affecte la vitesse pour redessiner en masquant les images dans la session de dessin en cours. Les images ainsi masquées ne sont pas
affichées ni tracées; seul le contour du dessin est affiché. Pour masquer des images, donnez à la propriété ImageVisibility la valeur FALSE. Pour afficher à
nouveau les images, donnez-lui la valeur TRUE
Les images raster à deux tons comprennent uniquement une couleur de premier plan et une couleur d'arrière-plan. Lorsque vous attachez une image à deux
tons, les pixels du premier plan de l'image héritent des paramètres de couleur du calque courant. Outre les modifications que vous pouvez apporter à n'importe
quelle image attachée, vous pouvez modifier les images à deux tons en changeant la couleur du premier plan et en activant puis en désactivant la transparence
de l'arrière-plan.
Remarque Les images à deux tons et leurs contours sont toujours de couleur identique.
Pour modifier la couleur de premier plan d'une image à deux t ons, utilisez la propriété Color. Pour activer et désactiver la transparence, utilisez la propriété
Transparency.
Dans AutoCAD, vous pouvez régler la luminosité, le contraste et l'estompe de l'image à l'écran ainsi qu'à la sortie tracée sans affecter le fichier d'image raster
initial.
Brightness
Spécifie le niveau de luminosité d'une image.
Contrast
Spécifie le niveau de contraste d'une i mage.
Fade
Spécifie le niveau d'estompe d'une image.
Délimitation d'images
Vous pouvez délimiter une zone d'image en vue d'un affichage ou d'un traçage. Le contour de délimitation doit être un rectangle ou un polygone 2D dont les
sommets figurent dans les contours de l'image. Plusieurs instances de la même image peuvent avoir des contours différents
Pour modifier un contour de délimitation existant, répétez les étapes précédentes. L'ancien contour est supprimé et remplacé par le nouveau.
Vous pouvez afficher le contour de d élimitation d'une image, ou cacher ce contour e t afficher les contours initiaux de l'image. Pour masquer un contour de
délimitation et afficher l'image d'origine, définissez la propriété ClippingEnabled sur FALSE. Pour afficher l'image délimitée, définissez la propriété
ClippingEnabled sur TRUE.
Dans cet exemple, une image raster est ajoutée dans l'espace objet. Ensuite, l'image est délimitée en fonction du contour de délimitation. L'exemple utilise le
fichier downtown.jpg , qui se trouve dans le répertoire Sample. Si cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent,
indiquez un chemin d'accès et un nom de fichier appropriés pour la variable imageName.
Sub Ch10_ClippingRasterBoundary()
Dim insertionPoint(0 To 2) As Double
Dim scalefactor As Double
Dim rotationAngle As Double
Dim imageName As String
Dim rasterObj As AcadRasterImage
imageName = "C:\AutoCAD\sample\downtown.jpg"
insertionPoint(0) = 5
insertionPoint(1) = 5
insertionPoint(2) = 0
scalefactor = 2
rotationAngle = 0
On Error GoTo ERRORHANDLER
' Creates a raster image in model space
Set rasterObj = ThisDrawing.ModelSpace.AddRaster _
(imageName, insertionPoint, _
scalefactor, rotationAngle)
ZoomAll
' Establish the clip boundary with an array of points
Dim clipPoints(0 To 9) As Double
clipPoints(0) = 6: clipPoints(1) = 6.75
clipPoints(2) = 7: clipPoints(3) = 6
clipPoints(4) = 6: clipPoints(5) = 5
clipPoints(6) = 5: clipPoints(7) = 6
clipPoints(8) = 6: clipPoints(9) = 6.75
' Clip the image
rasterObj.ClipBoundary clipPoints
' Enable the display of the clip
rasterObj.ClippingEnabled = True
ThisDrawing.Regen acActiveViewport
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
AutoCAD propose plusieurs fonctions vous permettant de gérer les objets d'un dessin. Grâce aux blocs, vous pouvez organiser et manipuler de nombreux
objets comme un seul élément. Les attributs a ssocient les éléments d'information avec les blocs de vos dessins, les numéros de référence e t les prix par
exemple.
L'utilisation de références externes AutoCAD permet d'attacher des dessins entiers au dessin courant ou de les superposer. Ainsi, les modifications apportées
au dessin de référence apparaissent dans le dessin courant lorsque vous ouvrez ce dernier.
Utilisation d'attributs
Un bloc est un ensemble d'objets regroupés de sorte qu'ils ne forment plus qu'un seul objet et constituent ce qu'on appelle une référence de bloc. AutoCAD
permet d'insérer une référence de bloc dans le dessin, de la mettre à l'échelle et de lui appliquer une rotation. Vous pouvez également décomposer un bloc afin
d'en modifier un à un les éléments, et créer ainsi un nouvel objet lorsque vous reconstituez le bloc. AutoCAD met à jour toutes les futures occurrences de ce
bloc en fonction de sa définition.
Les blocs peuvent être définis à partir d'objets initialement dessinés sur des calques différents à l'aide de couleurs et de types de lignes distincts. Vous pouvez
conserver les informations relatives aux calques, aux couleurs et aux types de lignes des objets dans un bloc. Lorsque vous insérez celui-ci dans le dessin,
chaque objet reste sur son calque d'origine et conserve sa couleur et son type de ligne initial.
Pour de plus amples informations sur l'utilisation de blocs, reportez-vous à la section “Création et insertion de symboles (blocs)” du Manuel d'utilisation .
Définition de blocs
Insertion de blocs
Définition de blocs
Pour créer un bloc, utilisez la méthode Add. Cette méthode requiert la saisie de deux valeurs : l'emplacement où ajouter le bloc dans le dessin et le nom du bloc
à créer.
Une fois le bloc créé, vous pouvez lui ajouter tout objet géométrique ou un autre bloc. Vous pouvez ensuite insérer une occurrence du bloc dans le dessin. Un
bloc inséré est un objet appelé référence de bloc.
Vous pouvez également créer un bloc à l'aide de la méthode WBlock qui permet de grouper des objets dans un fichier dessin distinct. Le fichier dessin peut être
ensuite utilisé comme définition de bloc pour d'autres dessins. AutoCAD considère comme définition de bloc tout dessin que vous insérez dans un autre.
Pour de plus amples informations sur la définition de blocs, reportez-vous à la section “Création de blocs” du Manuel d'utilisation .
Insertion de blocs
La méthode InsertBlock vous permet d'insérer des blocs ou des dessins entiers dans le dessin courant. La méthode InsertBlock requiert la saisie de six
valeurs : le point d'insertion, le nom du bloc ou du dessin à insérer, les facteurs d'échelle de X, Y et Z, et l'angle de ro tation.
Un dessin constitue une référence de bloc lorsque vous l'insérez intégralement dans un autre dessin. Lorsque vous renouvelez cette opération, AutoCAD utilise
la définition du bloc (c'est-à-dire, la description géométrique de ce bloc) et modifie simplement les paramètres de position, d'échelle et de rotation. Si vous
modifiez le dessin d'origine après son i nsertion, vos modifications n'auront aucun effet sur le bloc inséré. Si vous souhaitez que le bloc inséré reflète les
changements effectués, vous pouvez le redéfinir en insérant de nouveau le dessin d'origine. Pour ce faire, utilisez la méthode InsertBlock.
Si vous insérez un dessin en tant que bloc, le nom de fichier est automatiquement utilisé en tant que nom du bloc. Une fois le bloc créé, vous pouvez modifier
son nom à l'aide de la propriété Name.
AutoCAD attribue par défaut les coordonnées (0, 0, 0) comme point de base aux dessins insérés. Vous pouvez modifier le point de base d'un dessin en ouvrant
le dessin d'origine et en utilisant la méthode SetVariable pour spécifier un point de base d'insertion différent pour la variable système INSBASE. AutoCAD
appliquera le nouveau point de base lors de l'insertion suivante du dessin.
Si le dessin inséré contient des objets PaperSpace, ceux-ci ne sont pas inclus dans la définition du bloc du dessin courant. Pour utiliser ces o bjets dans un
autre dessin, ouvrez le dessin d'origine et convertissez-les en bloc à l'aide de la méthode Add. Vous pouvez insérer le dessin dans un autre dans l'espace
papier ou dans l'espace objet.
Une référence de bloc ne peut pas être itérée pour rechercher les objets d'origine qui la composent. Toutefois, vous pouvez itérer la définition du bloc d'origine,
ou alors décomposer la référence de bloc en ses composants d'origine.
Vous pouvez également insérer un réseau de blocs à l'aide de la méthode AddMInsertBlock. Cette méthode n'insère pas un bloc unique dans le dessin, comme
le fait la méthode InsertBlock, mais insère en revanche un réseau du bloc spécifié. Cette méthode renvoie un objet MInsertBlock.
Pour de plus amples informations sur l'insertion d e blocs, reportez-vous à la section “Insertion de blocs” du Manuel d'utilisation .
Cet exemple définit un bloc et ajoute un cercle à la définition de bloc. Ensuite, le bloc est inséré dans le dessin comme référence de bloc.
Sub Ch10_InsertingABlock()
' Define the block
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.Blocks.Add _
(insertionPnt, "CircleBlock")
' Add a circle to the block
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0
center(1) = 0
center(2) = 0
radius = 1
Set circleObj = blockObj.AddCircle(center, radius)
' Insert the block
Dim blockRefObj As AcadBlockReference
insertionPnt(0) = 2
insertionPnt(1) = 2
insertionPnt(2) = 0
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
ZoomAll
MsgBox "The circle belongs to " & blockRefObj.ObjectName
End Sub
Remarque A la fin de l'opération d'insertion, le système de coordonnées général (SCG) du fichier externe est aligné parallèlement au plan XY du système de
coordonnées utilisateur (SCU) dans le dessin courant. Il suffit donc de modifier le paramètre SCU, avant d'insérer la référence de bloc d'un fichier externe, pour
redéfinir son orientation dans l'espace.
Pour décomposer une référence de bloc, utilisez la méthode Explode. Grâce à la décomposition d'une référence de bloc, vous pouvez modifier le bloc, ou
ajouter ou supprimer les objets qui le composent.
Cet exemple crée un bloc et ajoute un cercle à la définition du bloc. Ensuite, le bloc est inséré dans le dessin comme référence de bloc. La référence de bloc est
ensuite décomposée et les objets résultants sont affichés a vec les types d'objets correspondants.
Sub Ch10_ExplodingABlock()
' Define the block
Dim blockObj As AcadBlock
Pour redéfinir un bloc, utilisez l'une des méthodes ou propriétés de l'objet Block. Lorsque vous redéfinissez un bloc, toutes les références à celui-ci dans le
dessin sont immédiatement mises à jour en fonction de la nouvelle définition.
La redéfinition affecte les insertions précédentes et futures d'un bloc. Les attributs de valeur constante sont supprimés et remplacés par ceux que vous
définissez. En revanche, les attributs de variable ne subissent aucune modification, même si la nouvelle définition du bloc ne contient aucun attribut.
Cet exemple crée un bloc et ajoute un cercle à la définition du bloc. Ensuite, le bloc est inséré dans le dessin comme référence de bloc. Le cercle dans la
définition de bloc est mis à jour, de même que la référence du bloc.
Sub Ch10_RedefiningABlock()
' Define the block
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.Blocks.Add _
(insertionPnt, "CircleBlock")
' Add a circle to the block
Dim circleObj As AcadCircle
Dim center(0 To 2) As Double
Dim radius As Double
center(0) = 0
center(1) = 0
center(2) = 0
radius = 1
Set circleObj = blockObj.AddCircle(center, radius)
' Insert the block
Dim blockRefObj As AcadBlockReference
insertionPnt(0) = 2
insertionPnt(1) = 2
insertionPnt(2) = 0
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
(insertionPnt, "CircleBlock", 1#, 1#, 1#, 0)
ZoomAll
' Redefine the circle in the block,
Utilisation d'attributs
Un attribut définit une étiquette (également appelée libellé) permettant d'indiquer, de manière interactive, le texte à associer à un bloc. Vous pouvez, par
exemple, entrer des numéros de référence, des tarifs, des commentaires et les noms des propriétaires.
Vous pouvez extraire les informations de référence d'attribut d'un dessin et les utiliser dans un tableur ou une base de données, pour créer une nomenclature.
AutoCAD permet d'associer plusieurs attributs à un bloc, à condition que vous définissiez une étiquette pour chacun d'entre eux. Vous pouvez également définir
des attributs constants. Comme ils ont la même valeur dans chaque occurrence du bloc, vous pouvez insérer le bloc sans entrer de valeur.
Les attributs peuvent être invisibles, c'est-à-dire qu'ils n'apparaissent pas à l'écran ou qu'ils ne sont pas tracés. Toutefois, les informations sur la référence
d'attribut sont stockées dans le fichier dessin.
Pour de plus amples informations sur l'utilisation d'attributs, reportez-vous à la section “Présentation des attributs de bloc” du Manuel d'utilisation .
Pour créer une référence d'attribut, vous devez d 'abord créer une définition d'attribut sur un bloc à l'aide de la méthode AddAttribute. Cette méthode requiert la
saisie de six valeurs : la hauteur du texte de l'attribut, le mode Attribut, une chaîne de message, le point d'insertion, la chaîne d'étiquette et la valeur par défaut
de l'attribut.
La valeur du mode est facultative. Le mode de l'attribut peut être spécifié via la saisie de cinq constantes:
acAttributeModeNormal
Indique que le mode courant de chaque attribut est mis à jour.
acAttributeModeInvisible
Les valeurs des attributs n'apparaîtront pas au moment de l'insertion du bloc. La commande ATTECRAN est prioritaire sur le mode Invisible.
acAttributeModeConstant
Affecte aux attributs une valeur fixe pour les insertions de bloc.
acAttributeModeVerify
Demande une vérification de la valeur des attributs lors de l'insertion du bloc.
acAttributeModePreset
Définit l'attribut sur sa valeur par défaut lorsque vous insérez un bloc contenant un attribut prédéfini. La valeur ne peut pas être modifiée dans ce mode.
Vous pouvez n'entrer aucune option ou bien entrer une combinaison ou l'ensemble des options. Pour spécifier une combinaison d'options, ajoutez les
constantes ensemble. Par exemple, vous pouvez entrer acAttributeModeInvisible + acAttributeModeConstant.
La chaîne de message s'affiche lors de l'insertion d'un bloc contenant l'attribut. La valeur par défaut de cette chaîne est la chaîne de l'étiquette. Entrez
acAttributeModeConstant pour le mode afin de désactiver le message.
La chaîne de l'étiquette identifie chaque occurrence de l'attribut. Tous les caractères peuvent être utilisés à l'exception des espaces et des points d'e xclamation.
AutoCAD convertit les minuscules en majuscules.
Une fois la définition d'attribut spécifiée dans un bloc, l'insertion du bloc via la méthode InsertBlock permet de spécifier une valeur différente pour la référence de
l'attribut.
Une définition d'attribut est associée au bloc au moment de sa création. Les définitions d'attribut créées dans l'espace objet ou l'espace papier ne sont
attachées à aucun bloc donné.
Cet exemple crée un bloc auquel il ajoute un attribut. Ensuite, le bloc est inséré dans le dessin.
Sub Ch10_CreatingAnAttribute()
' Define the block
Dim blockObj As AcadBlock
Vous pouvez utiliser les méthodes et propriétés d'un objet Attribute pour modifier l'attribut. Certaines propriétés d'un attribut incluent les suivantes :
Alignment
Spécifie l'alignement horizontal et vertical de l'attribut.
Backward
Spécifie la direction du texte de l'attribut.
FieldLength
Spécifie la longueur du champ de l'attribut.
Height
Indique la hauteur de l'attribut.
InsertionPoint
Spécifie le point d'insertion de l'attribut.
Mode
Spécifie le mode de l'attribut.
PromptString
Indique la chaîne de texte constituant le message de l'attribut.
Rotation
Spécifie la rotation de l'attribut.
ScaleFactor
Spécifie le facteur d'échelle de l'attribut.
TagString
Indique la chaîne de texte constituant l'étiquette de l'attribut.
Certaines des méthodes disponibles pour l'édition de l'attribut incluent les suivantes :
ArrayPolar
Crée un réseau polaire.
ArrayRectangular
Crée un réseau rectangulaire.
Copy
Copie l'attribut.
Erase
Efface l'attribut.
Mirror
Crée une copie-miroir de l'attribut.
Move
Déplace l'attribut.
Rotate
Cet exemple crée un bloc auquel il ajoute un attribut. Ensuite, le bloc est inséré dans le dessin. Le texte d'attribut est alors mis à jour et s'affiche de droite à
gauche.
Sub Ch10_RedefiningAnAttribute()
' Define the block
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.Blocks.Add _
(insertionPnt, "BlockWithAttribute")
' Add an attribute to the block
Dim attributeObj As AcadAttribute
Dim height As Double
Dim mode As Long
Dim prompt As String
Dim insertionPoint(0 To 2) As Double
Dim tag As String
Dim value As String
height = 1
mode = acAttributeModeVerify
prompt = "New Prompt"
insertionPoint(0) = 5
insertionPoint(1) = 5
insertionPoint(2) = 0
tag = "New Tag"
value = "New Value"
Set attributeObj = blockObj.AddAttribute(height, mode, _
prompt, insertionPoint, tag, value)
' Insert the block, creating a block reference
' and an attribute reference
Dim blockRefObj As AcadBlockReference
insertionPnt(0) = 2
insertionPnt(1) = 2
insertionPnt(2) = 0
Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
(insertionPnt, "BlockWithAttribute", 1#, 1#, 1#, 0)
' Redefine the attribute text to display backwards.
attributeObj.Backward = True
attributeObj.Update
End Sub
Les méthodes GetAttributes et GetConstantAttributes permettent d'extraire les informations d'attribut d'un dessin. La méthode GetAttributes renvoie un réseau
des références d'attribut attachées à un bloc, en plus de leurs valeurs courantes. La méthode GetConstantAttributes renvoie un réseau des attributs constants
attachés au bloc ou à la référence externe. Les attributs renvoyés par cette méthode sont les définitions d'attributs constants, pas les références d'attribut.
Les fichiers gabarits ne sont pas requis pour l'extraction des informations d'attribut, et aucun fichier d'informations d'attribut n'est créé. Il suffit d'itérer le réseau
des références d'attribut, à l'aide des propriétés TagString et TextString des références d'attribut, pour examiner les informations d'attribut.
La propriété TagString représente l'étiquette individuelle de la référence d'attribut. La propriété TextString contient la valeur de la référence d'attribut.
Pour plus d'informations sur l'extraction des informations d'attributs, reportez-vous à la section “Extraction de données des attributs d e bloc” du Manuel
d'utilisation .
Cet exemple crée un bloc auquel il ajoute un attribut. Ensuite, le bloc est inséré dans le dessin. Les données d'attribut sont ensuite renvoyées et affichées dans
une boîte de message. Elles sont alors mises à jour en fonction de la référence de bloc avant d'être à nouveau renvoyées et affichées.
Sub Ch10_GettingAttributes()
' Create the block
Dim blockObj As AcadBlock
Dim insertionPnt(0 To 2) As Double
insertionPnt(0) = 0
insertionPnt(1) = 0
insertionPnt(2) = 0
Set blockObj = ThisDrawing.Blocks.Add _
(insertionPnt, "TESTBLOCK")
' Define the attribute definition
Dim attributeObj As AcadAttribute
Une référence externe (Xréf) relie un dessin au dessin courant. Lorsque vous insérez un dessin sous forme de bloc, la définition du bloc et tous les éléments
associés sont enregistrés dans la base de données de dessins courante. Il n'est pas mis à jour si vous modifiez le dessin d'origine. En revanche, lorsque vous
insérez un dessin sous forme de Xréf, celle-ci est mise à jour lorsque vous apportez des modifications au dessin d'origine. Par conséquent, un dessin qui
contient des xréfs reflète toujours les dernières modifications apportées à chaque fichier de référence externe.
Une Xréf constitue une entité unique dans le dessin courant, au même titre qu'une référence de bloc. Sachez cependant que les Xréfs n'augmentent pas
sensiblement la taille du fichier contenant le dessin courant et qu'elles ne peuvent pas être décomposées. Tout comme les blocs, vous pouvez imbriquer
plusieurs références externes rattachées au dessin.
Pour de plus amples informations sur les xréfs, reportez-vous à la section “Attache, mise à jour et liaison des références externes” du Manuel d'utilisation .
Attachement de xréfs
Détachement de Xréfs
Rechargement de Xréfs
Liaison de Xréfs
Lors de l'ouverture ou du tracé d'un dessin, AutoCAD recharge chacune des xréfs, de sorte que leur contenu corresponde à la dernière version du dessin de
référence. Une fois des modifications apportées à un fichier de références externes et le fichier enregistré, les autres utilisateurs peuvent immédiatement
visualiser les modifications en rechargeant la xréf.
Attachement de xréfs
L'attachement d'une xréf lie un dessin (le fichier de références ou xréf) au dessin courant. Lorsqu'un dessin référence une xréf, AutoCAD attache uniquement la
définition de la xréf au dessin, à la différence d'un bloc normal, où la définition et le contenu du bloc sont stockés avec le dessin courant. AutoCAD lit le dessin
de référence pour déterminer les éléments à afficher dans le dessin courant. Si le fichier de référence est introuvable ou altéré, ses données n'apparaissent
pas. A chaque ouverture d'un dessin, AutoCAD charge tous les objets graphiques et non graphiques (tels que les calques, les types de lignes, les styles d e
texte) à partir des fichiers de références. Si la variable VISRETAIN est activée, AutoCAD enregistre toutes les informations de calque dépendant de références
externes qui ont été mises à jour dans le dessin courant.
Vous pouvez ainsi attacher une xréf autant de fois que vous le souhaitez et attribuer à chaque occurrence une n ouvelle position, une nouvelle échelle ou une
nouvelle rotation. Vous pouvez également contrôler les calques dépendants et les propriétés des types de lignes définies dans cette xréf.
Pour attacher une xréf, utilisez la méthode AttachExternalReference. Cette méthode requiert la saisie du chemin d'accès et du nom du fichier dessin à
référencer, le nom utilisé par la xréf dans le dessin courant, le point d'insertion, l'échelle et les informations de rotation de la xréf. La méthode
AttachExternalReference renvoie l'objet ExternalReference créé.
Pour de plus amples informations sur l'association de xréfs, reportez-vous à la section “Attachement de ré férences externes” du Manuel d'utilisation .
Dans cet exemple, tous les blocs du dessin courant sont affichés avant et après avoir ajouté une référence externe. L'exemple utilise l e fichier 3D House.dwg ,
qui se trouve dans le répertoire Sample. Si cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin
d'accès et un nom de fichier appropriés pour la variable PathName.
Sub Ch10_AttachingExternalReference()
On Error GoTo ERRORHANDLER
Dim InsertPoint(0 To 2) As Double
Dim insertedBlock As AcadExternalReference
Dim tempBlock As AcadBlock
Dim msg As String, PathName As String
' Define external reference to be inserted
InsertPoint(0) = 1
InsertPoint(1) = 1
InsertPoint(2) = 0
PathName = "C:/Program Files/AutoCAD 2007/sample/3D House.dwg"
' Display current Block information for this drawing
GoSub ListBlocks
' Add the external reference to the drawing
Set insertedBlock = ThisDrawing.ModelSpace. _
AttachExternalReference(PathName, "XREF_IMAGE", _
InsertPoint, 1, 1, 1, 0, False)
ZoomAll
' Display new Block information for this drawing
GoSub ListBlocks
Exit Sub
ListBlocks:
msg = vbCrLf ' Reset message
For Each tempBlock In ThisDrawing.Blocks
msg = msg & tempBlock.Name & vbCrLf
Suivant
MsgBox "The current blocks in this drawing are: " & msg
Return
ERRORHANDLER:
MsgBox Err.Description
End Sub
Superposition de xréfs
Superposition de xréfs
La superposition est comparable à l'attachement, sauf lorsqu'un dessin est attaché ou superposé. Toute autre superposition imbriquée est ignorée et, par
conséquent, non affichée. En d'autres termes, les superpositions imbriquées ne sont pas lues.
Pour superposer une xréf, définissez le paramètre Overlay de la méthode AttachExternalReference sur TRUE.
Détachement de Xréfs
Vous pouvez supprimer une définition de xréf p our enlever complètement les xréfs du dessin. Vous pouvez également effacer les occurrences des xréfs
individuelles. La suppression de la définition d'une xréf supprime tous les symboles dépendants associés à celle-ci. Si toutes les occurrences d'une xréf sont
effacées du dessin, AutoCAD supprime la définition de la référence externe lors de la prochaine ouverture du dessin.
Pour supprimer l'attachement d'une xréf, utilisez la méthode Detach. Vous ne pouvez pas détacher une xréf imbriquée.
Dans cet exemple, une référence externe est attachée puis détachée. L'exemple utilise le fichier 3D House.dwg , qui se trouve dans le répertoire Sample. Si
cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin d'accès et un nom de fichier appropriés pour la
variable PathName.
Sub Ch10_DetachingExternalReference()
On Error GoTo ERRORHANDLER
' Define external reference to be inserted
Dim xrefHome As AcadBlock
Dim xrefInserted As AcadExternalReference
Dim insertionPnt(0 To 2) As Double
Dim PathName As String
insertionPnt(0) = 1
insertionPnt(1) = 1
insertionPnt(2) = 0
PathName = "c:/AutoCAD 2007/sample/3D House.dwg"
' Add the external reference
Set xrefInserted = ThisDrawing.ModelSpace. _
AttachExternalReference(PathName, "XREF_IMAGE", _
insertionPnt, 1, 1, 1, 0, False)
ZoomAll
MsgBox "The external reference is attached."
' Detach the external reference definition
Dim name As String
name = xrefInserted.name
ThisDrawing.Blocks.Item(name).Detach
MsgBox "The external reference is detached."
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Rechargement de Xréfs
Si un utilisateur modifie un dessin d e référence externe alors que vous travaillez sur un dessin hôte auquel cette xréf est attachée, vous pouvez mettre à jour le
dessin de référence externe à l'aide de la méthode Reload. Lorsque vous procédez a u rechargement, le dessin de référence externe sélectionné est mis à jour
dans le dessin hôte. En o utre, si vous avez désactivé une xréf, vous pouvez choisir de recharger le dessin de référence externe à tout moment.
Dans cet exemple, une référence externe est attachée, puis rechargée. L'exemple utilise le fichier 3D House.dwg , qui se trouve dans le répertoire Sample. Si
cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin d'accès et un nom de fichier appropriés pour la
variable PathName
Sub Ch10_ReloadingExternalReference()
On Error GoTo ERRORHANDLER
' Define external reference to be inserted
Dim xrefHome As AcadBlock
Dim xrefInserted As AcadExternalReference
Dim insertionPnt(0 To 2) As Double
Dim PathName As String
insertionPnt(0) = 1
insertionPnt(1) = 1
insertionPnt(2) = 0
PathName = "c:/AutoCAD 2007/sample/3D House.dwg"
' Add the external reference to the block
Set xrefInserted = ThisDrawing.ModelSpace. _
AttachExternalReference(PathName, "XREF_IMAGE", _
insertionPnt, 1, 1, 1, 0, False)
ZoomAll
MsgBox "The external reference is attached."
' Reload the external reference definition
ThisDrawing.Blocks.Item(xrefInserted.name).Reload
MsgBox "The external reference is reloaded."
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Pour décharger une xréf, utilisez la méthode Unload. Lorsque vous déchargez un fichier de références non utilisé dans le dessin courant, les performances
d'AutoCAD sont améliorées car il n'a pas besoin de lire ni d'afficher les objets inutiles des dessins ou les informations sur la table des symboles. Les objets de
la xréf et ceux des xréfs imbriquées ne sont pas affichés dans le dessin courant jusqu'à ce que la xréf soit rechargée.
Dans cet exemple, une référence externe est attachée, puis déchargée. L'exemple utilise le fichier 3D House.dwg , qui se trouve d ans le répertoire Sample. Si
cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin d'accès et un nom de fichier appropriés pour la
variable PathName
Sub Ch10_UnloadingExternalReference()
On Error GoTo ERRORHANDLER
' Define external reference to be inserted
Dim xrefHome As AcadBlock
Dim xrefInserted As AcadExternalReference
Dim insertionPnt(0 To 2) As Double
Dim PathName As String
insertionPnt(0) = 1
insertionPnt(1) = 1
insertionPnt(2) = 0
PathName = "c:/AutoCAD 2007/sample/3D House.dwg"
' Add the external reference
Set xrefInserted = ThisDrawing.ModelSpace. _
AttachExternalReference(PathName, "XREF_IMAGE", _
insertionPnt, 1, 1, 1, 0, False)
ZoomAll
MsgBox "The external reference is attached."
' Unload the external reference definition
ThisDrawing.Blocks.Item(xrefInserted.name).Unload
MsgBox "The external reference is unloaded."
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
Liaison de Xréfs
Grâce à la méthode Bind, vous pouvez lier une xréf à un dessin, c'est-à-dire l'intégrer à celui-ci de manière permanente. Les informations sur les références
externes deviennent un bloc. Lorsque le dessin de référence externe est mis à jour, la Xréf ajoutée n'est pas mise à jour. Ce processus ajoute la base de
données entière d'un dessin, y compris tous ses symboles dépendants.
Les symboles dépendants sont des objets nommés tels que des blocs, des styles de cotation, des calques, des types de lignes et des styles de texte. La liaison
de la xréf permet d'utiliser des objets nommés de la xréf dans le dessin courant.
La méthode Bind ne requiert qu'un paramètre : bPrefixName. Si bPrefixName est défini sur TRUE, les noms de symbole du dessin de la xréf sont précédés
dans le dessin courant par <nom_bloc>$x$, x étant un entier automatiquement incrémenté pour éviter l'écrasement des définitions de bloc existantes. Si le
paramètre bPrefixName est défini sur FALSE, les noms de symboles du dessin de la xréf sont fusionnés dans le dessin courant sans préfixe. Si des noms
dupliqués existent, AutoCAD utilise les symboles définis dans le dessin local. Si vous n'êtes pas sûr que vos dessins contiennent des noms de symbole
dupliqués, nous vous conseillons de définir le p aramètre bPrefixName sur TRUE.
Pour de plus amples informations sur la liaison des xréfs, reportez-vous à la section “Archivage des dessins contenant des références externes (liées)” du
Manuel d'utilisation.
Dans cet exemple, une référence externe est attachée, puis liée au dessin. L'exemple utilise le fichier 3D House.dwg , qui se trouve dans le répertoire Sample.
Si cette image ne figure pas sur votre système ou si elle se trouve dans un répertoire différent, indiquez un chemin d'accès et un nom de fichier appropriés pour
la variable PathName
Sub Ch10_BindingExternalReference()
On Error GoTo ERRORHANDLER
' Define external reference to be inserted
Dim xrefHome As AcadBlock
Dim xrefInserted As AcadExternalReference
Dim insertionPnt(0 To 2) As Double
Dim PathName As String
insertionPnt(0) = 1
insertionPnt(1) = 1
insertionPnt(2) = 0
PathName = "c:/AutoCAD 2007/sample/3D House.dwg"
' Add the external reference
Set xrefInserted = ThisDrawing.ModelSpace. _
AttachExternalReference(PathName, "XREF_IMAGE", _
insertionPnt, 1, 1, 1, 0, False)
ZoomAll
MsgBox "The external reference is attached."
' Bind the external reference definition
ThisDrawing.Blocks.Item(xrefInserted.name).Bind False
MsgBox "The external reference is bound."
Exit Sub
ERRORHANDLER:
MsgBox Err.Description
End Sub
L'Automatisation ActiveX ne propose aucune méthode de délimitation des contours de blocs et xréfs. Utilisez la commande XDELIM d'AutoCAD ou envoyez-la à
AutoCAD via la méthode SendCommand.
En combinant l'option de chargement sur demande et l'enregistrement des dessins avec des index, vous pouvez améliorer les performances des dessins
contenant des références externes. Le chargement sur demande fonctionne en conjonction avec les variables système XLOADCTL et INDEXCTL. Lorsque
vous l'activez, si des index ont été enregistrés dans les dessins de référence, AutoCAD ne charge en mémoire que les données du dessin de référence q ui sont
nécessaires à la régénération du dessin courant. En d'autres termes, les dessins référencés sont lus “sur demande.”
Pour bénéficier pleinement des avantages du chargement sur demande, vous devez d'abord enregistrer les dessins que vous avez référencés avec des index
d'espace ou de calque. Les avantages du chargement sur demande se remarquent notamment :
lorsque vous délimitez la xréf pour en afficher une petite fraction et qu'un index d'espace est enregistré dans l e dessin de référence externe ;
lorsque vous gelez plusieurs calques de la xréf et que le dessin est enregistré avec un index de calque.
Pour activer le chargement sur demande, utilisez la propriété XRefDemandLoad. Si vous activez le chargement sur demande avec l'option
acDemandLoadEnabledWithCopy, AutoCAD copie temporairement le fichier de référence externe et charge sur demande le fichier temporaire. Vous pouvez
alors charger la xréf sur demande et autoriser les modifications du dessin de référence initial. Lorsque vous désactivez le chargement sur demande, AutoCAD lit
l'intégralité du fichier de références sans tenir compte de l'affichage des calques ou d es occurrences de délimitation.
Pour activer les index d'espace et de calque, définissez la variable système INDEXCTL à l'aide de la méthode SetVariable. Les paramètres suivants
s'appliquent à la variable système INDEXCTL :
Par défaut, INDEXCTL est paramétrée sur 0 lorsque vous créez un nouveau dessin AutoCAD.
Pour de plus amples informations sur le chargement sur demande et les xréfs, reportez-vous à la section “Amélioration des performances avec des xréfs
volumineuses” du Manuel d'utilisation .
Vous pouvez utiliser les données étendues (xdata) dans le but de lier des informations à des objets dans un dessin.
Dans cet exemple, l'utilisateur doit sélectionner des objets dans le dessin. Les objets sélectionnés sont placés dans un jeu de sélection et les données étendues
spécifiées sont attachées à tous les objets de la sélection.
Sub Ch10_AttachXDataToSelectionSetObjects()
' Create the selection set
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Add("SS1")
' Prompt the user to select objects
sset.SelectOnScreen
' Define the xdata
Dim appName As String, xdataStr As String
appName = "MY_APP"
xdataStr = "This is some xdata"
Dim xdataType(0 To 1) As Integer
Dim xdata(0 To 1) As Variant
' Define the values for each array
'1001 indicates the appName
xdataType(0) = 1001
xdata(0) = appName
'1000 indicates a string value
xdataType(1) = 1000
xdata(1) = xdataStr
' Loop through all entities in the selection
' set and assign the xdata to each entity
Dim ent As Object
For Each ent In sset
ent.SetXData xdataType, xdata
Next ent
End Sub
L'exemple suivant affiche les données étendues attachées à l'exemple précédent. Si vous attachez des données étendues autres que des chaînes (type 1000),
vous devez réviser ce code
Sub Ch10_ViewXData()
' Find the selection created in previous example
Dim sset As Object
Set sset = ThisDrawing.SelectionSets.Item("SS1")
' Define the xdata variables to hold xdata information
Dim xdataType As Variant
Dim xdata As Variant
Dim xd As Variant
'Define index counter
Dim xdi As Integer
xdi = 0
' Loop through the objects in the selection set
' and retrieve the xdata for the object
Dim msgstr As String
Dim appName As String
Dim ent As AcadEntity
appName = "MY_APP"
For Each ent In sset
msgstr = ""
xdi = 0
De nombreuses tâches de programmation vont au-delà de l a simple utilisation du modèle d'objet ActiveX d 'AutoCAD. Ce chapitre explique brièvement comment
créer des boîtes de dialogue, gérer des erreurs, contrôler le focus et distribuer votre application à d'autres utilisateurs.
Distribution d'applications
Dans ce chapitre, il est fait davantage appel à VBA. Les termes suivants vous aideront à comprendre et à utiliser l'environnement VBA.
Projet
Ensemble de feuilles et de modules regroupés dans un seul fichier.
Module
Groupe de sous-programmes et de fonctions (le plus souvent associés les uns aux autres).
Macro
Sous-programme ou fonction publique. Les macros vous sont présentées comme d es composants exécutables de votre projet.
Boîte de dialogue
Moyen par lequel des informations sont affichées et regroupées pendant l'exécution d'une application.
Forme
Conteneur des contrôles de boîte de dialogue.
Les feuilles sont les blocs de base à partir desquels vous créez d es boîtes de dialogue personnalisées pour votre application. Les feuilles personnalisées
permettent de fournir des informations aux utilisateurs, d'en obtenir ou de faire en sorte que les utilisateurs contrôlent le fonctionnement de l'application.
Les feuilles sont identiques à la toile d'un artiste et sont vierges au départ. Pour remplir la toile, il faut une palette ; dans ce cas, il s'agit de la boîte à outils des
contrôles. En tant que peintre, vous disposez les contrôles voulus de la boîte à outils sur la feuille. Vous pouvez ajouter autant de contrôles que vous le
souhaitez. Vous pouvez également ajuster, à tout moment, la taille et les propriétés des contrôles et de la feuille elle-même. Enfin, vous attribuez des
fonctionnalités (codes) aux contrôles pour "donner vie" à la feuille.
Bien que Visual Basic 6 prenne en charge plusieurs types de feuilles, VBA ne prend en charge que les feuilles de type UserForm. Cela signifie que certaines
feuilles créées et exportées dans Visual Basic 6 ne peuvent pas être importées dans VBA.
Les feuilles de type UserForm (appelées feuilles dans le présent manuel) peuvent être modales ou sans mode. C'est la propriété ShowModal de la feuille qui
détermine ceci. Les feuilles Modal affichées dans l'application exécutée doivent être fermées pour que l'utilisateur puisse effectuer une autre action dans
l'application. Pour de plus amples informations sur l'utilisation des feuilles modales, reportez-vous à la section Feuilles modales .
Feuilles modales
Lorsque vous créez une feuille, vous êtes en mode Création. Ce mode permet d'exécuter les opérations suivantes :
Dès que l'application est lancée, la feuille est en mode Exécution. Dans ce mode, vous ne pouvez pas ajuster la feuille directement. Toutefois, elle apparaît
dans l'interface utilisateur d'AutoCAD et l'utilisateur peut interagir avec elle dans le cadre d'une utilisation normale de l'application.
Vous pouvez ajouter facilement des contrôles à une feuille. Il suffit de sélectionner le contrôle voulu dans la boîte à outils des contrôles et en le faisant glisser
sur la feuille. Lorsque vous relâchez le bouton de la souris, une copie du contrôle est placée sur la feuille. Vous pouvez alors changer sa position et sa taille.
Vous pouvez copier autant de contrôles que vous le souhaitez.
Outre la méthode par glisser-déposer mentionnée précédemment, il existe d'autres façons de placer des contrôles sur une feuille.
Pour redimensionner un contrôle, sélectionnez-le en cliquant une fois dessus. Lorsque vous sélectionnez un contrôle, sa bordure devient visible. Pour le
redimensionner, sélectionnez l'une des poignées de redimensionnement qui apparaît sur sa bordure et faites-la glisser jusqu'à la position souhaitée. Lorsque
vous relâchez la poignée, le contrôle est redimensionné. (Vous pouvez redimensionner une feuille de la même façon.)
Pour déplacer ou redimensionner plusieurs contrôles à la fois, sélectionnez chacun d'eux en maintenant la touche MAJ enfoncée. Tous les contrôles sont mis
en surbrillance. Vous pouvez les déplacer ou les redimensionner en tant que groupe.
VBA fournit plusieurs contrôles de formatage qui vous aideront à mettre en page votre feuille. Ces contrôles se trouvent dans le menu Format de
l'environnement VBA IDE. Ils vous permettent d'aligner des contrôles les uns par rapport aux autres, de créer deux ou plusieurs contrôles de même taille, de
changer l'espacement entre les contrôles et de les centrer sur la feuille.
N'oubliez pas, lorsque vous utilisez des contrôles de formatage, que vous pouvez sélectionner plusieurs contrôles à la fois en appuyant sur la touche MAJ.
Les propriétés définissent les différentes caractéristiques d'un contrôle comme sa taille, sa forme, sa couleur, son étiquette et ses valeurs par défaut. Vous
pouvez définir les propriétés d'un contrôle en mode création dans la fenêtre Propriétés.
Vous pouvez également modifier la propriété d'un contrôle, lors de l'exécution, en écrivant le code d'accès à cette propriété. Reportez-vous à la documentation
de Microsoft pour savoir comment changer la propriété d'un contrôle au moment de l'exécution.
Maintenant que la feuille a l'aspect souhaité, vous pouvez ajouter du code derrière les contrôles. Pour accéder à la fenêtre Code d'un contrôle, il suffit de cliquer
deux fois sur ce contrôle dans la fenêtre Form. La fenêtre Code apparaît avec un sous-programme créé pour ce contrôle et son événement par défaut.
Vous pouvez ajouter du code à cet événement ou choisir un autre événement dans la liste déroulante affichée en haut à droite de la fenêtre.
A présent, la conception de la feuille est parfaite et un code entièrement fonctionnel est défini derrière chaque contrôle. La dernière étape consiste à rechercher
la feuille qui sera affichée sur l'écran de l'utilisateur à l'exécution. La méthode VBA Show permet d'afficher la feuille. Elle peut être appelée à partir d'un module
de code de votre application.
La feuille que vous avez créée étant modale par défaut, l'utilisateur ne peut pas interagir directement avec AutoCAD tant que la feuille est affichée. Par
exemple, il ne peut pas sélectionner un point ou un objet dans le dessin tant que la feuille est à l'écran. Pour permettre à l'utilisateur d'accéder au dessin
AutoCAD, utilisez la méthode VBA Hide. Cette méthode masque la feuille et octroie à l'utilisateur un accès limité à AutoCAD. Lorsque vous appliquez cette
méthode, n'oubliez pas que la feuille n'est pas déchargée de la mémoire. Elle conserve ses valeurs actuelles tant qu'elle e st masquée.
Le sous-programme (et par conséquent, l'affichage de la feuille) peut être appelé en tant que macro depuis la commande EXECVBA ou un menu AutoCAD.
Il vous arrivera parfois de charger u ne feuille en mémoire pendant l'exécution mais de ne pas l'afficher. Cela se produit notamment pour mieux contrôler à quel
moment le chargement survient dans l'application ou pour obtenir un accès, par programmation, à la feuille sans pour autant l'afficher sur l'écran de l'utilisateur.
Pour charger une feuille sans l'afficher, utilisez la méthode VBA Load. La méthode Show peut être ensuite utilisée pour rendre la feuille visible au moment voulu
pendant l'exécution de l'application. Souvenez-vous que l'utilisateur ne peut pas interagir sur la feuille t ant qu'elle est invisible.
Si vous appelez la méthode Show et que la feuille n'a pas été chargée, elle le sera automatiquement.
Vous souhaiterez aussi parfois décharger une feuille spécifique. Lorsqu'une feuille est déchargée, elle est supprimée de la mémoire et toute la mémoire qui lui
était allouée est libérée. Jusqu'à ce que la feuille soit rechargée à l'aide de la méthode Load ou Show, un utilisateur ne peut pas interagir dessus et elle ne peut
pas être traitée par programmation. Vous pouvez décider de décharger une feuille lorsque vous savez qu'elle ne sera plus utilisée dans l'application, et
récupérer la mémoire qui lui était a llouée.
La méthode Hide n'effectue pas de déchargement. Si l'exécution de votre application se termine et qu'une feuille n'a pas été déchargée, elle le sera
automatiquement. Le tableau suivant compare les méthodes VBA Show, Hide, Load et Unload :
Feuilles modales
Lorsque vous donnez le type modal à une boîte de dialogue dans AutoCAD VBA, l'utilisateur doit y répondre pour pouvoir exécuter un autre composant de
l'application. Aucun autre code n'est exécuté tant que la boîte de dialogue modale n'est pas refermée via la méthode Hide ou Unload. C'est pourquoi, le
développeur de l'application doit prêter une attention toute particulière à la façon et au moment où ces boîtes de dialogue sont mises en œuvre.
Ainsi, une boîte de dialogue peut demander à l'utilisateur de sélectionner un objet dans le dessin AutoCAD. Pour que l'utilisateur puisse effectivement
sélectionner l'objet dans la fenêtre de l'a pplication AutoCAD, vous devez masquer la feuille en faisant appel à la méthode Hide. Une fois l'objet sélectionné,
vous pouvez utiliser la méthode Show pour réafficher la feuille avec toutes ses données actuelles, puis poursuivre l'exécution de l'application.
Remarque Bien que d'autres feuilles soient désactivées dans l'application lorsqu'une boîte de dialogue modale est affichée, d'autres applications ne le sont pas.
La plupart des environnements de développement disposent, par défaut, d'une fonction de gestion des erreurs. Dans VB et VBA, la réaction par défaut à une
erreur consiste à afficher un message d'erreur et à fermer l'application. Cette réaction étant appropriée dans la phase de développement d'une application, elle
n'est pas efficace pour l'utilisateur final. Il existe, en effet, des erreurs que vous voulez ignorer ou pour lesquelles vous souhaitez apporter des solutions
spécifiques. Pour d'autres, vous souhaiterez supprimer le message d'erreur qui les accompagne ou simplement contrôler le message affiché sur l'écran de
l'utilisateur. Par ailleurs, la fermeture automatique de l'application est rarement acceptable pour l'utilisateur final.
En règle générale, la gestion des erreurs est nécessaire lorsqu'une entrée utilisateur est obligatoire ou lorsque des E/S de fichier sont utilisées. Même si vous
savez que le fichier requis existe et est disponible, il existe peut-être d'autres conditions susceptibles de provoquer des erreurs et auxquelles vous n'avez pas
pensé.
Remarque La plupart des exemples de code fournis dans la documentation d'AutoCAD ne font pas appel à la fonction de récupération d'erreurs. Ainsi, ils sont
plus simples et spécifiques. Toutefois, comme dans tous l es langages de programmation, la récupération et le traitement adéquats des erreurs jouent un rôle
essentiel dans le bon fonctionnement d'une application.
Il existe trois types d'erreurs différents que vous êtes susceptible de rencontrer dans vos applications : erreurs de compilation, erreurs d'exécution et erreurs
logiques.
Les erreurs de compilation se produisent lors de la construction de l'application. Il s'agit essentiellement d'erreurs de syntaxe, de problèmes d'étendue des
variables ou de fautes de frappe. Dans VBA, ces types d'erreur sont détectés par l'environnement de développement. Lorsque vous entrez une ligne de code
incorrecte, elle est mise en surbrillance et un message d'erreur s'affiche pour vous signaler le problème. Les erreurs de compilation doivent être corrigées
avant l'exécution de l'application.
Les erreurs d'exécution sont plus difficiles à détecter et à corriger. Elles se produisent lors de l'exécution du code et impliquent souvent la réception
d'informations de l'utilisateur. Par exemple, si l'application demande à l'utilisateur d'entrer le nom d'un dessin et que l'utilisateur entre un nom qui n'existe pas,
une erreur d'exécution se produit. Pour traiter ce type d'erreur efficacement, vous devez prévoir quels types de problème risquent de se produire, les détecter
Vous trouverez des informations sur la détection et la correction de ces trois types d'erreur dans la documentation de votre environnement de développement.
Les erreurs propres à AutoCAD tombent dans la catégorie des erreurs d'exécution et sont traitées plus en détails dans la présente documentation.
Dans VB et VBA, les erreurs d'exécution sont récupérées via l'instruction On Error. Cette instruction crée un piège pour le système. Lorsqu'une erreur
survient, détourne automatiquement le traitement vers le système de gestion des erreurs spécifiquement conçu à cet effet. Cela signifie que le système de
gestion des erreurs par défaut du programme n'est pas utilisé.
L'instruction On Error Resume Next est utilisée lorsque vous voulez ignorer des erreurs. Elle récupère l'erreur, et au lieu d'afficher un message d'erreur et
de mettre fin au programme, elle passe à la ligne de code suivante et poursuit le t raitement. Supposons que vous souhaitiez créer un sous-programme pour
effectuer une itération dans l'espace objet et changer la couleur de chaque entité. Vous savez qu'AutoCAD va produire une erreur si vous essayez de colorer
une entité figurant sur un calque verrouillé. Or, au lieu de fermer le programme, vous pouvez ignorer l'entité figurant sur le calque verrouillé et continuer à traiter
les autres entités. L'instruction On Error Resume Next permet d'effectuer cette opération.
L'instruction On Error GoTo Label est utilisée lorsque vous voulez créer un module explicite de gestion des erreurs. Elle récupère l'erreur, et au lieu
d'afficher un message d'erreur et de mettre fin au programme, elle passe directement à un endroit spécifique du code. Ce dernier peut ensuite répondre à
l'erreur de la façon la plus appropriée pour votre application. Par exemple, vous pouvez poursuivre l'exemple ci-dessus et afficher un message contenant le
descripteur de chaque entité figurant sur le calque verrouillé.
Le sous-programme suivant itère l'espace objet et affiche chaque entité en rouge. Essayez d'exécuter ce sous-programme sur un dessin comportant plusieurs
entités, certaines d'entre elles figurant sur un calque verrouillé. Commentez ensuite l'instruction On Error Resume Next et exécutez de nouveau le sous-
programme. Vous remarquerez que le sous-programme se termine lorsqu'il atteint la première entité figurant sur le calque verrouillé.
Sub Ch11_ColorEntities()
Dim entry As Object
On Error Resume Next
For Each entry In ThisDrawing.ModelSpace
entry.Color = acRed
Next entry
End Sub
Le sous-programme suivant itère l'espace objet et affiche chaque entité en rouge. Pour chaque entité du calque verrouillé, le module de gestion des erreurs
affiche un message d'erreur personnalisé et le descripteur de cette entité. Essayez d'exécuter ce sous-programme sur un dessin comportant plusieurs entités,
certaines d'entre elles figurant sur un calque verrouillé. Commentez ensuite l'instruction On Error GoTo MyErrorHandling et exécutez de nouveau le
sous-programme. Vous remarquerez que le sous-programme se termine lorsqu'il atteint la première entité figurant sur le calque verrouillé.
Sub Ch11_ColorEntities2()
Dim entry As Object
On Error GoTo MyErrorHandler
For Each entry In ThisDrawing.ModelSpace
entry.Color = acRed
Next entry
' Important! Exit the subroutine before the error handler
Exit Sub
MyErrorHandler:
Msgbox entry.EntityName + " is on a locked layer." + _
" The handle is: " + entry.Handle
Resume Next
End Sub
L'instruction On Error GoTo 0 annule le module de gestion des erreurs actif. Les instructions On Error Resume Next et On Error GoTo Label restent
en vigueur jusqu'à la fin du sous-programme, jusqu'à ce qu'un autre module de gestion des erreurs soit déclaré ou que le module actif soit annulé via
l'instruction On Error GoTo 0.
Que faire après avoir récupéré une erreur ? Tout dépend de la nature de l'application et de l'erreur.
VB et VBA fournissent des informations sur le type d'erreur récupérée à l'aide de l'objet Err. Cet objet comporte plusieurs propriétés : Number, Description,
Source, HelpFile, HelpContext et LastDLLError. Ces propriétés contiennent les informations de l'erreur la plus actuelle. Les propriétés Number et Description
sont les plus importantes. La première contient le code d'erreur unique associé à l'erreur et la seconde, le message d'erreur qui serait normalement affiché.
Dans le module de gestion des erreurs, vous pouvez comparer la propriété Number de l'erreur à une valeur prévue. Cela vous aidera à déterminer la nature de
l'erreur qui s'est produite. En effet, si vous connaissez la nature d'une erreur, vous pouvez prendre les mesures qui s'imposent.
Les méthodes d'entrée utilisateur créent un certain nombre d'opérations de récupération d'erreurs car elles impliquent que l' utilisateur entre un certain type de
données. Si l'utilisateur essaie d'entrer un autre type de données, AutoCAD rejette l'entrée et invite l'utilisateur à saisir les d onnées adéquates. L'utilisation de la
méthode InitializeUserInput avec des fonctions d'entrée utilisateur permet de mieux contrôler l es entrées utilisateur, mais peut également introduire d'autres
conditions qui doivent être vérifiées par le système de récupération d'erreurs. Pour obtenir un exemple de fonction de récupération d'erreurs requise avec
certains types d'entrées utilisateur, reportez-vous à la section Demande d'entrée utilisateur.
Bien que VBA ne prenne pas en charge la création d'exécutables, il n'offre pas de protection par mot de passe de l'affichage de feuilles, de classes et de
modules sur la base d'un projet. Cette fonction de protection de projet se trouve dans le menu VBA IDE. Choisissez Outils » Propriétés du projet » Protection.
Vous pouvez exécuter une macro VBA depuis une barre d'outils ou un menu AutoCAD en changeant la propriété Macro de cette barre d'outils ou de ce menu.
Cette propriété doit avoir la valeur
-VBARUN fichier.dvb!module.macro
où fichier est le nom du fichier, module le nom du module contenant la macro à exécuter et macro le nom de la macro. Le nom de fichier n'est requis que si le
fichier n'est pas chargé dans la session active d'AutoCAD. Si un nom de fichier est spécifié, le fichier est chargé.
Pour de plus amples informations sur la modification des menus et des barres d'outils, reportez-vous à la section Personnalisation des menus et barres d'outils .
Lorsque VBA est exécuté, il recherche un projet appelé acad.dvb dans le répertoire d'AutoCAD. Ce fichier est automatiquement chargé en tant que projet par
défaut.
Vous pouvez charger explicitement, au démarrage, un projet autre que celui par défaut ( acad.dvb ) en utilisant la commande CHARGVBA. L'exemple de code
suivant utilise le fichier de démarrage d'AutoLISP pour charger VBA et un projet VBA appelé myproj.dvb au démarrage d'AutoCAD. Lancez notepad.exe et
ajoutez les lignes suivantes au fichier acad.lsp :
(defun S::STARTUP()
)
Vous pouvez exécuter automatiquement une macro du fichier acad.dvb en l'appelant à l'aide de la version ligne de commande de la commande EXECVBA
depuis un utilitaire de démarrage d'AutoCAD comme acad.lsp . Ainsi, pour exécuter automatiquement la macro intitulée drawline, enregistrez cette macro
drawline dans le fichier acad.dvb . Lancez notepad.exe et ajoutez les lignes suivantes au fichier acad.lsp :
(defun S::STARTUP()
(command "_-vbarun" "drawline")
)
Vous pouvez exécuter automatiquement une macro au chargement de VBA en la nommant AcadStartup. Toute macro du fichier acad.dvb , appelée
AcadStartup, est exécutée automatiquement au chargement de VBA.
Une option de la boîte de dialogue Ouvrir un projet VBA vous permet d'ouvrir automatiquement l'environnement de développement interactif (IDE). Sélectionnez
la case Ouvrir l'éditeur Visual Basic, en bas à gauche de la boîte de dialogue, pour ouvrir automatiquement l'environnement VBA IDE au chargement d'un projet
VBA. Cette option reste activée jusqu'à ce que vous supprimiez la coche de la case.
Remarque Pour accéder à la boîte de dialogue Ouvrir un projet VBA, entrez CHARGVBA sur la ligne de commande. La boîte de dialogue s'ouvre et vous
pouvez choisir le projet à charger. Si la boîte de dialogue n'apparaît pas, la variable système FILEDIA est sans doute désactivée. Cette variable active et
désactive l'affichage des boîtes de dialogue. Pour réactiver la variable FILEDIA, attribuez-lui la valeur 1.
Il s'agit de l'état dans lequel se trouve AutoCAD lorsque aucun dessin n'est ouvert. Plusieurs points doivent être pris en considération lorsque vous utilisez VBA
sans document ouvert dans AutoCAD.
L'objet ThisDrawing n'est pas défini avec un état sans document ouvert. Par conséquent, toute tentative d'utilisation de cet objet ThisDrawing produira
une erreur.
De même, les objets dépendants des documents ne sont pas définis avec un état sans document ouvert. Il s'agit notamment des objets qui se trouvent en
dessous de l'objet Document dans le modèle d'objet d'AutoCAD. L'utilisation d'objets indépendants des documents, comme Application ou MenuBar, est
autorisée.
En état sans document ouvert, AutoCAD n'a pas de ligne de commande. Lorsque AutoCAD est dans cet état, toute tentative d'accès à la ligne de commande
d'AutoCAD produit une erreur.
Distribution d'applications
Vous devez choisir l'option de distribution adaptée à votre application. Les applications compatibles avec le dessin actif et n'utilisant pas d'autres dessins sont
souvent incorporées au dessin. Lorsque vous incorporez l'application au dessin, vous êtes sûr qu'elle est chargée et disponible pour l'utilisateur lorsque le
dessin est ouvert.
Il est préférable d'enregistrer, dans un fichier de projet VBA, les applications qui sont utilisées par de nombreuses personnes, qui sont mises à jour
fréquemment, qui ouvrent et ferment d'autres dessins ou qui ne sont pas fréquemment utilisées. Ainsi, vous disposez d'un point central pour l'application, et
Pour de plus amples informations sur les projets incorporés et les fichiers de projet VBA, reportez-vous à la section Définition des projets VBA intégrés et
globaux .
Les applications Visual Basic 6, ou toute autre application hors processus, ne peuvent pas être enregistrées dans un dessin AutoCAD. Elles sont compilées
dans des exécutables autonomes (EXE).
La technologie ActiveX vous permet d'échanger facilement des informations avec d 'autres applications AutoCAD ou compatibles ActiveX, comme Microsoft
Excel ou Microsoft Word. Ce chapitre étudie certaines des procédures de base concernant l'interaction d'AutoCAD avec d'autres applications.
Les applications Visual LISP ® ont accès à l'ensemble de la gamme d'objets ActiveX ® . Elles peuvent appeler les méthodes ActiveX, définir et extraire les
propriétés correspondantes. En outre, les applications Visual LISP peuvent exécuter des macros VBA par l'intermédiaire de la commande VBARUN
Les applications ActiveX et VBA peuvent exécuter les applications Visual LISP par l'intermédiaire de la méthode SendCommand. Celle-ci permet aux
applications ActiveX et VBA d'envoyer une commande à la ligne de commande AutoCAD.
Pour de plus amples informations sur l'accès aux objets ActiveX via Visual LISP, voir le manuel AutoLISP Developer's Guide .
La technologie ActiveX d'AutoCAD ® vous permet d'échanger facilement des informations avec d 'autres applications compatibles ActiveX, comme Microsoft
Excel ou Microsoft Word. Grâce à cette fonctionnalité, vous pouvez recueillir, enregistrer et présenter des informations AutoCAD dans des formats autres que le
dessin AutoCAD. Vous pouvez également lire dans AutoCAD des informations issues de ces applications afin de contrôler la création ou la manipulation des
objets AutoCAD. Par exemple, vous pouvez créer une nomenclature dans une feuille de calcul Microsoft Excel à partir d'objets issus d'un dessin AutoCAD.
Vous avez déjà appris à écrire du code en utilisant le modèle d'objet ActiveX d'AutoCAD. L'échange d'informations avec d'autres applications compatibles
ActiveX suppose que vous référenciez le modèle d'objet ActiveX d'une autre application et que vous écriviez le code nécessaire à l'utilisation de ces objets.
Remarque Dans ce chapitre, vous trouverez une brève introduction aux fonctionnalités de programmation entre applications. Ces informations n'étant pas
spécifiques à AutoCAD, vous les trouverez également dans la documentation Microsoft et les guides de programmation indépendants.
Pour écrire du code capable d'accéder à une autre application, il faut que VBA mette les objets de l'autre application à votre disposition. Pour ce faire, définissez
une référence dans la bibliothèque d'objets de l'autre application. Il s'agit d'un fichier enregistré sur votre ordinateur qui contient tous les objets, méthodes,
propriétés, constantes et événements définis en fonction de cette application.
Pour référencer une bibliothèque d'objets, vous devez accéder à l'environnement VBA IDE. Lorsque vous avez activé cet environnement, dans le menu Outils,
choisissez l'option Références. Cette option affiche une boîte de dialogue qui contient la liste de toutes les bibliothèques d'objets trouvées par VBA sur votre
ordinateur. Il suffit de sélectionner une bibliothèque de la liste pour la référencer. Les bibliothèques dont les cases à cocher sont sélectionnées sont déjà
référencées dans le projet courant. Par exemple, pour ajouter la bibliothèque d'objets Microsoft Excel, sélectionnez l'entrée correspondante dans la liste.
Une fois que vous avez créé une référence à la bibliothèque d' objets d'une autre application, vous pouvez utiliser l'Explorateur d'objets de VBA pour afficher la
liste de tous les objets de l'application.
Remarque Vous devez définir une référence pour chaque projet VBA qui utilisera ce modèle d'objet. La définition d'une référence à un projet ne s'applique pas
automatiquement à un autre projet. Cela pourrait nuire aux performances.
Une fois que vous avez référencé l a bibliothèque d'objets d'une application, vous devez créer une instance d'application. En d'autres termes, vous devez
démarrer l'autre application par programmation de sorte que votre code puisse traiter des objets autorisés.
Pour cela, vous devez commencer par déclarer une variable qui représentera l'autre application. Vous devez procéder comme avec les objets inhérents, en
faisant appel à une instruction Dim. Indiquez le type d'application dans l'instruction Dim. Dans l'exemple suivant, l'instruction Dim déclare une variable d'objet de
type Excel.Application:
Une fois la variable déclarée, utilisez l'i nstruction Set avec le mot clé New pour définir la variable comme une instance active de l'application. Par exemple,
l'instruction Set suivante définit la variable déclarée ci-dessus comme application Excel. Le mot clé New lance une nouvelle session Excel.
Remarque Certaines applications n'autorisent qu'une seule instance active de l'application à la fois. L'utilisation du mot clé New dans une telle application
permet de définir une référence à l'instance existante et de lancer une nouvelle session de l'application.
Vous venez de référencer la bibliothèque d'objets et de créer une instance de l'application. Vous pouvez maintenant créer des objets et les manipuler dans cette
application. Tous les objets, méthodes et propriétés définis par le modèle d'objet sont disponibles. Par exemple, si l'on reprend les déclarations de variable de la
section précédente, la ligne de code suivante vous permet de voir la session Excel :
ExcelAppObj.Visible = TRUE
Nous vous conseillons d'apprendre à utiliser le modèle d'objet de l'application pour laquelle vous écrivez du code. Vous pouvez faire appel à l'Explorateur
d'objets de VBA ou au fichier d'aide de l'application pour en savoir plus sur le modèle d'objet que vous référencez.
L'application que vous lancez par programmation consomme une partie d e la mémoire de votre ordinateur. Nous vous conseillons de quitter l'application lorsque
vous n'en avez plus besoin afin de libérer les ressources système.
Bien que tous les modèles d'objet soient différents, la plupart possèdent une méthode Quit issue de l'objet application pouvant être utilisée pour quitter
proprement l'application. Par exemple, si l'on reprend les déclarations de variable de la section précédente, la ligne de code suivante permet de quitter Excel:
ExcelAppObj.Application.Quit
Remarque En revanche, l'application ne prend pas nécessairement fin si vous supprimez la variable d'objet ou que vous l'utilisez dans un contexte trop large.
Vous devez toujours quitter l'application en faisant appel à la méthode appropriée pour assurer une parfaite élimination des données superflues enregistrées
dans la mémoire.
Ce sous-programme trouve toutes les références de bloc dans le dessin courant. Il recherche ensuite les attributs associés à ces références et affiche ceux qu'il
trouve dans un tableur Excel. Procédez comme suit pour exécuter cet exemple :
1. Ouvrez un dessin qui contient des références de bloc et des attributs. (Par exemple, le dessin sample/activeX/attrib.dwg contient des références de bloc.)
2. A l'aide de la commande VBAIDE d'AutoCAD, ouvrez l'environnement VBA IDE.
3. Dans le menu Outils » Références de l'environnement VBA IDE, sélectionnez Microsoft Excel 8.0 Object Model.
4. Copiez le sous-programme suivant dans la fenêtre de code VBA et exécutez-le.
Sub Ch12_Extract()
Dim Excel As Excel.Application
Dim ExcelSheet As Object
Dim ExcelWorkbook As Object
Dim RowNum As Integer
Dim Header As Boolean
Dim elem As AcadEntity
Dim Array1 As Variant
Dim Count As Integer
' Launch Excel.
Set Excel = New Excel.Application
' Create a new workbook and find the active sheet.
Set ExcelWorkbook = Excel.Workbooks.Add
Set ExcelSheet = Excel.ActiveSheet
ExcelWorkbook.SaveAs "Attribute.xls"
RowNum = 1
Header = False
' Iterate through model space finding
' all block references.
For Each elem In ThisDrawing.ModelSpace
With elem
' When a block reference has been found,
' check it for attributes
If StrComp(.EntityName, "AcDbBlockReference", 1) _
= 0 Then
If .HasAttributes Then
' Get the attributes
Array1 = .GetAttributes
' Copy the Tagstrings for the
' Attributes into Excel
For Count = LBound(Array1) To UBound(Array1)
If Header = False Then
If StrComp(Array1(Count).EntityName, _
"AcDbAttribute", 1) = 0 Then
ExcelSheet.Cells(RowNum, _
Count + 1).value = _
Array1(Count).TagString
End If
End If
Next Count
RowNum = RowNum + 1
La plupart des applications Windows ® peuvent accéder aux procédures API de Windows. Ces procédures vous permettent d'améliorer les fonctionnalités de
votre application.
En effet, grâce aux API de Windows, vous pouvez obtenir des informations sur le système courant, telles que les a utres programmes installés ou exécutés sur
votre ordinateur, l'emplacement des informations enregistrées et les paramètres de contrôle en vigueur. Vous pouvez également accéder aux commandes de
manette de jeu, multimédia et sonores. Ces commandes représentent quelques-unes des nombreuses fonctionnalités fournies par les API de Windows.
Si vous souhaitez utiliser une API de Windows, vous devez d'abord la déclarer dans votre application. Pour ce faire, utilisez l'instruction Declare. Pour que
l'instruction Declare fonctionne correctement, vous devez spécifier certaines informations:
Le nom de la bibliothèque de liaisons dynamiques (DLL, Dynamic Link Library) contenant la procédure que vous voulez utiliser
Le nom de la procédure tel qu'il apparaît dans la DLL
Le nom de la procédure tel que vous voulez l'utiliser dans votre application
Les paramètres que la procédure compte recevoir
Le type de donnée de la valeur renvoyée (si la procédure que vous appelez est une fonction)
Vous pouvez placer l'instruction Declare dans n'importe quel module VBA. Si vous la placez dans un module standard, tout module de votre application pourra
accéder à la procédure, à moins que vous ne limitiez sa portée en utilisant le mot clé Private. Si vous placez Declare dans un module de classe ou de feuille,
la procédure ne sera disponible que dans ce module. Une fois la procédure déclarée, vous pouvez l'appeler en suivant la procédure habituelle dans votre
application.
Il est difficile d'utiliser correctement l'instruction Declare. En revanche, il est très facile d'employer Declare à mauvais escient et d'obtenir des résultats
catastrophiques. Pour éviter tout problème désastreux, enregistrez toutes les informations des applications actives avant de tester une nouvelle instruction
Declare.
Pour vous aider à bien maîtriser cette instruction Declare, Microsoft propose un fichier donnant la liste des déclarations les plus usitées. Ce fichier, qui
s'intitule Win32api.txt , est fourni avec Visual Basic 6 et Office. Vous p ouvez y rechercher la procédure qui vous intéresse et copier dans votre code l'instruction
Declare fournie.
La documentation VBA de Microsoft contient des informations sur l'instruction Declare et un exemple d' utilisation. La source Microsoft Windows API
Reference, enregistrée sur le CD de Microsoft Developer N etwork, fournit des informations sur toutes les procédures disponibles dans les API de Windows. Le
livre de Dan Appleman, Visual Basic Programmer's Guide to the Win32 API , propose également d'excellentes informations aux programmeurs Visual Basic 6.
Ce didacticiel explique comment utiliser ActiveX et Visual Basic pour Applications (VBA), et comment ajouter une macro à AutoCAD. Il porte plus
particulièrement sur l'architecture paysagère, mais les concepts qui y sont traités peuvent être appliqués à tous les domaines.
Il est destiné à l'utilisateur AutoCAD avancé qui est un programmeur VBA novice.
Analyse de l'environnement
Définition de l'objectif
Obtention d'entrée
Exécution du code
Exécution de la macro
Analyse de l'environnement
Ce didacticiel requiert l'environnement de développement intégré VBA AutoCAD ® (VBA IDE). Ce dernier est installé automatiquement lorsque vous
sélectionnez l'option Complète du programme d'installation d'AutoCAD. Si vous avez sélectionné l'option Personnalisée lors de l'installation d'AutoCAD, il se
peut que VBA IDE ne soit pas installé ; si tel est le cas, il vous faudra lancer à nouveau le programme d'installation d'AutoCAD pour l'installer.
Définition de l'objectif
Votre objectif dans le cadre de ce didacticiel est de développer une nouvelle macro pour AutoCAD permettant de dessiner un sentier de jardin et d'agrémenter
ce dernier de dalles en béton rondes. Votre nouvelle macro aura la séquence d'invite suivante :
Command: gardenpath
Start point of path: L'utilisateur définira le point de départ
Endpoint of path: L'utilisateur définira l'extrémité
Half width of path: L'utilisateur définira un nombre
Radius of tiles: L'utilisateur définira un nombre
Spacing between tiles: L'utilisateur définira un nombre
Votre macro invite d'abord l'utilisateur à entrer le point de départ et l'extrémité afin de définir le trait d'axe d'un sentier. Elle l'invite, ensuite, à entrer la demi-
largeur du sentier et le rayon des dalles rondes. Enfin, l'utilisateur entre l 'espacement entre les dalles. On utilise la demi-largeur du sentier plutôt que sa largeur
totale car la première est plus facile à visualiser depuis le trait d'axe du sentier.
Vous développez la macro Gardenpath (sentier de jardin) à l'aide d'une série de fonctions et de sous-programmes. De nombreux sous-programmes requièrent
la manipulation d'angles. Dans la mesure où ActiveX définit les angles en radians mais que la plupart des utilisateurs le fait en degrés, commencez par créer
une fonction qui convertit ces derniers en radians.
Notez que dès que vous appuyez sur ENTREE après avoir entré la ligne Function dtr(a As Double) As Double, End Function est ajouté
automatiquement. Ainsi, tous les sous-programmes et fonctions ont une instruction End associée.
Considérez à présent le code. D'abord, la constante pi est définie comme égale à la valeur 3.14159. Cela vous permet d'utiliser le mot pi au lieu de taper
3.14159 chaque fois que vous devez utiliser cette valeur.
Vous définissez ensuite une fonction dénommée dtr (diminutif pour "degrees to radians", degrés en radians). La fonction dtr comprend un argument, à
savoir a, qui est l'angle en degrés. Le résultat est obtenu en divisant l'angle en degrés par 180, puis en multipliant cette valeur par pi. La ligne
commençant par une apostrophe est un commentaire ; VBA ignore tout le texte d 'une ligne figurant après une apostrophe.
Cette fonction peut à présent être utilisée dans d'autres sous-programmes du projet.
4. Enregistrez votre travail. Cliquez sur Fichier » Enregistrer Global1. Dénommez le projet gardenpath.dvb .
Ajoutez ensuite une fonction afin de calculer la distance entre les points.
Obtention d'entrée
La macro Gardenpath demande à l'utilisateur d'indiquer l'endroit où dessiner le sentier, la largeur de ce dernier, la largeur des dalles en béton et l 'espacement
qu'il doit y avoir entre elles. Vous définissez un sous-programme qui soumet l'ensemble de ces requêtes à l'utilisateur, puis qui calcule des nombres à utiliser
dans le reste de la macro.
Dans ce sous-programme, vous utilisez les méthodes d'entrée utilisateur trouvées dans l'objet Utility
Déclaration de variables
Déclaration de variables
Le sous-programme suivant utilise plusieurs variables. Toutes les variables doivent être déclarées afin que le sous-programme puisse y accéder.
Dans la fenêtre Code de VBA IDE, entrez le code suivant, immédiatement après la ligne Const pi = 3.14159:
Considérez à présent les deux listes déroulantes situées en haut de la fenêtre Code. Ces dernières, dénommées zone Objet et zone Procédure, affichent
respectivement les termes (Général) et (Déclarations). Elles indiquent la section du code dans lequel vous travaillez et vous permettent de passer rapidement à
une autre section, simplement en sélectionnant cette dernière dans la liste. La section (Déclarations) sert à déclarer les variables que vous prévoyez d'utiliser
dans plusieurs sous-programmes.
Le sous-programme gpuser demande à l'utilisateur les i nformations permettant de dessiner un sentier de jardin. Entrez le code suivant après la fonction
distance:
Dans le sous-programme gpuser, la ligne Dim varRet As Variant déclare la variable varRet. Cette variable n'étant utilisée que dans ce sous-
programme, elle peut être déclarée ici localement, plutôt que dans la section (Declarations).
La ligne suivante, varRet = ThisDrawing.Utility.GetPoint( , "Start point of path: "), appelle la méthode GetPoint. Le caractère de
soulignement figurant dans la ligne a pour objet de faciliter la lecture d'une ligne longue et indique à VBA de lire la ligne suivante comme si elle se trouvait sur la
même ligne. Vous pouvez supprimer le caractère de soulignement en plaçant l'ensemble du code sur la même ligne.
Pour accéder à la méthode GetPoint, vous devez d'abord parcourir l'objet ThisDrawing qui représente l'objet en cours d'utilisation. Après être entré dans
ThisDrawing, vous devez saisir un point ( .), ce qui signifie que vous allez accéder à quelque chose dans cet objet. Une fois le point saisi, vous devez entrer
Utility et un autre point. Une fois de plus, vous allez accéder à quelque chose dans l'objet Utility. Enfin, entrez GetPoint, qui est le nom de la méthode que
vous appelez.
La méthode GetPoint comprend deux paramètres. Le premier paramètre, facultatif, ne sera pas utilisé. Laissez-le vide et ne tapez qu'une virgule pour marquer
son emplacement. Le second paramètre, également facultatif, est l'invite. Pour celui-ci, vous avez entré une chaîne i nvitant l'utilisateur à saisir le point de
départ. Ce dernier est placé dans la variable varRet. Les trois lignes suivantes du sous-programme copient le point retourné par l'utilisateur dans l e tableau
sp.
La méthode GetDistance permet d'obtenir la demi-largeur du sentier ( hwidth), le rayon des dalles ( trad) et l'espacement entre ces dernières ( tspac). Cette
méthode comprend deux paramètres. Le premier est un point de base. Vous devez fournir le point de départ pour cette valeur. Le second paramètre est l' invite,
pour laquelle vous fournissez une chaîne invitant l' utilisateur à effectuer l'action appropriée. La méthode GetDistance s'illustre par le fait qu'elle puisse retourner
aussi bien une valeur entrée sur la ligne de commande que la distance entre un point sélectionné dans AutoCAD et le point de départ.
Le sous-programme se met à calculer plusieurs variables utilisées ultérieurement dans la macro. La variable pangle, définie sur l'angle entre le point de départ
et l'extrémité, peut être trouvée à l'aide de la méthode AngleFromXAxis La largeur du sentier est calculée en multipliant la demi-largeur par deux. La variable
plength, définie sur la longueur d u sentier, peut être trouvée à l'aide de la fonction Distance entrée précédemment. Enfin, calculez et enregistrez l'angle du
sentier à plus et moins 90 degrés respectivement dans angp90 et angm90.
L'illustration suivante indique la façon dont les variables obtenues par gpuser définissent les dimensions du sentier.
Maintenant que vous connaissez l'emplacement et la largeur du sentier, vous pouvez en dessiner les contours. Ajoutez le code suivant sous le sous-programme
gpuser:
Ce sous-programme permet de dessiner les contours du sentier à l'aide de la méthode AddLightweightPolyline Cette méthode requiert la saisie d'un paramètre :
un tableau de points constituant la polyligne. Vous devez trouver tous les points constituant l'objet Polyligne et les placer dans un tableau dans l'ordre où ils
doivent être dessinés. Pour cette polyligne, les points requis sont les coins du sentier.
Pour trouver les coins du sentier, utilisez la méthode PolarPoint Celle-ci permet de trouver un point étant un angle et une distance d'un point de base définis.
Commencez par le point de départ ( sp) et recherchez le premier coin du sentier, en travaillant dans le sens inverse des aiguilles d'une montre. Ce coin se
trouve à mi-largeur du sentier ( hwidth) et à -90 degrés de l'angle du sentier. Dans la mesure où vous souhaitez dessiner un rectangle fermé pour figurer le
sentier, ce point devient le premier et le dernier du tableau. Par conséquent, les coordonnées X et Y retournées par la méthode PolarPoint sont déplacés aux
première et dernière positions du tableau de points.
La recherche des autres coins du sentier s'effectue de la même manière à l'aide de la longueur et de la largeur du sentier ( plength et width), ainsi que de
son angle. Chaque fois que la méthode PolarPoint est appelée, les coordonnées retournées ( varRet) sont copiées dans le tableau de points.
Une fois tous les coins identifiés dans le tableau de points, la méthode AddLightweightPolyline est appelée. Notez que cette méthode est appelée depuis l'objet
ModelSpace Si vous deviez exécuter cette macro, vous constaterez également que la polyligne n'est pas encore visible dans AutoCAD. Elle ne le sera pas
avant que vous ne mettiez à jour l'affichage, ce que vous ferez ultérieurement.
Maintenant que vous avez développé le sous-programme d'entrée utilisateur et le sous-programme permettant de dessiner le contour, vous êtes prêt à
agrémenter le sentier de dalles rondes. Cette tâche requiert de recourir à la géométrie.
Dans la fenêtre Code de VBA IDE, entrez le code suivant, après le sous-programme drawout:
' Place one row of tiles the given distance along path
' and possibly offset it
Private Sub drow(pd As Double, offset As Double)
Dim pfirst(0 To 2) As Double
Dim pctile(0 To 2) As Double
Dim pltile(0 To 2) As Double
Dim cir As AcadCircle
Dim varRet As Variant
varRet = ThisDrawing.Utility.PolarPoint( _
sp, pangle, pd)
pfirst(0) = varRet(0)
pfirst(1) = varRet(1)
pfirst(2) = varRet(2)
varRet = ThisDrawing.Utility.PolarPoint( _
pfirst, angp90, offset)
pctile(0) = varRet(0)
pctile(1) = varRet(1)
pctile(2) = varRet(2)
pltile(0) = pctile(0)
pltile(1) = pctile(1)
pltile(2) = pctile(2)
Do While distance(pfirst, pltile) < (hwidth - trad)
Set cir = ThisDrawing.ModelSpace.AddCircle( _
pltile, trad)
varRet = ThisDrawing.Utility.PolarPoint( _
pltile, angp90, (tspac + trad + trad))
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Boucle
varRet = ThisDrawing.Utility.PolarPoint( _
pctile, angm90, tspac + trad + trad)
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Do While distance(pfirst, pltile) < (hwidth - trad)
Set cir = ThisDrawing.ModelSpace.AddCircle( _
pltile, trad)
varRet = ThisDrawing.Utility.PolarPoint( _
pltile, angm90, (tspac + trad + trad))
pltile(0) = varRet(0)
pltile(1) = varRet(1)
pltile(2) = varRet(2)
Boucle
End Sub
' Draw the rows of tiles
Private Sub drawtiles()
Dim pdist As Double
Dim offset As Double
pdist = trad + tspac
offset = 0
Do While pdist <= (plength - trad)
drow pdist, offset
pdist = pdist + ((tspac + trad + trad) * Sin(dtr(60)))
If offset = 0 Then
offset = (tspac + trad + trad) * Cos(dtr(60))
Else
offset = 0
End If
Boucle
End Sub
Pour comprendre comment ces sous-programmes fonctionnent, reportez-vous à l'illustration suivante. Le sous-programme drow dessine une rangée de dalles
dans le sentier sur une distance définie par son premier argument et la décale perpendiculairement au sentier à une distance définie par son second argument.
Vous souhaitez décaler les dalles sur des rangées alternées afin de couvrir plus d'espace et d'obtenir une disposition plus esthétique.
Le sous-programme drow trouve l'emplacement de la première rangée à l'aide de la méthode PolarPoint lui permettant de se déplacer le long du sentier sur la
distance définie par le premier argument. Il utilise ensuite cette méthode pour décaler la rangée perpendiculairement au sentier et à l'instruction Puis, le sous-
programme utilise l'instruction While pour continuer à dessiner des cercles jusqu'aux bords de ce dernier. La méthode PolarPoint de la première instruction
While passe à l'emplacement de la dalle suivante en conservant une distance de deux rayons de dalles ( trad) et un espacement entre les dalles ( tspac).
Une seconde boucle while dessine ensuite les dalles de la rangée dans l'autre direction jusqu'à ce que l'autre bord soit atteint.
Le sous-programme drawtiles appelle drow à plusieurs reprises pour dessiner les rangées de dalles. Le sous-programme While loop passe dans
l'ensemble du sentier, en appelant drow pour chaque rangée. Les dalles des rangées adjacentes forment des triangles équilatéraux, comme indiqué dans
l'illustration précédente. Les coins de ces triangles équivalent à deux fois le rayon des dalles plus l'espacement qui sépare ces dernières. Ainsi, par
trigonométrie, la distance entre les rangées du sentier correspond au sinus de 60 degrés multiplié par cette quantité et le décalage des rangées impaires au
cosinus de 60 degrés multiplié par cette quantité.
L'instruction If est utilisée dans drawtiles pour décaler toutes les autres rangées. Si le décalage est égal à 0, définissez-le sur l'espacement entre le centre
des dalles multiplié par le cosinus d e 60 degrés, comme expliqué préalablement. Dans le cas contraire, définissez-le sur 0. Ceci permet de l'appliquer en
alternance sur les rangées, selon vos désirs.
Vous êtes prêt à combiner les sous-programmes dans la macro Gardenpath. Dans la fenêtre Code de VBA IDE, entrez le code suivant, après le sous-
programme drawtiles:
Le sous-programme path appelle gpuser pour rassembler les entrées nécessaires. La méthode GetVariable est ensuite utilisée pour obtenir les valeurs
actuelles des variables système BLIPMODE et CMDECHO ; elle enregistre ces valeurs sous sblip et scmde. Puis, le sous-programme utilise la méthode
SetVariable pour définir ces deux variables système sur 0, en désactivant, ce faisant, les marques et la confirmation des commandes. Le sentier est ensuite
dessiné à l'aide des sous-programmes drawout et drawtiles. Enfin, la méthode SetVariable sert à rétablir les valeurs d'origine des variables système.
Vous remarquerez peut-être qu'il s'agit du seul sous-programme entré ne commençant pas par un mot-clé personnel, ce qui garantit qu'il ne peut être appelé
qu'à partir du module actuel. Dans la mesure où l'utilisateur doit pouvoir disposer du sous-programme gardenpath, il vous est recommandé de supprimer le
mot-clé personnel.
Exécution du code
Dans le menu Outils d'AutoCAD, cliquez sur Macro » Macros. Dans la boîte de dialogue Macros, sélectionnez ThisDrawing.gardenpath et cliquez sur Pas à pas.
VBA IDE s'affiche en premier plan, la première ligne de la macro gardenpath en surbrillance. Il s'agit de la ligne de code sur le point d'être exécutée. Pour ce
faire, appuyez sur F8. La ligne de code suivante à être exécutée est le sous-programme gpuser. Pour exécuter le sous-programme gpuser, appuyez à
nouveau sur F8.
Vous êtes à présent au début du programme gpuser. Appuyez encore une fois sur F8 pour mettre en surbrillance la première méthode GetPoint. Avant
d'exécuter cette ligne, ouvrez la fenêtre Variables locales en cliquant sur Affichage » Variables locales. La fenêtre apparaît en bas de VBA IDE. Toutes les
variables locales et leur valeur s'y affichent pendant l'exécution de la macro.
Appuyez à présent sur F8 pour exécuter la méthode GetPoint Notez que la surbrillance disparaît et qu'aucun nouveau code n'est présenté. La méthode
GetPoint attend en effet que l'utilisateur entre un point dans AutoCAD. Basculez vers la fenêtre AutoCAD. Vous apercevez l'invite que vous avez définie dans
l'appel GetPoint de la ligne de commande. Entrez un point.
Le contrôle retourne à présent à la macro. La ligne suivant l 'appel de la méthode GetPoint est mise en surbrillance. Poursuivez l'exécution du code en appuyant
sur F8. Rappelez-vous de basculer vers la fenêtre AutoCAD lorsque vous entrez les informations.
Exécution de la macro
Vous n'avez pas besoin d'exécuter le code lorsque vous exécutez la macro. Vous pouvez exécuter la macro à partir du menu Outils en cliquant sur Macro »
Macros, en sélectionnant une macro, puis en cl iquant sur Exécuter. Ceci vous permet de voir le flux d'exécution de la façon dont un utilisateur le verrait.
Exécutez la macro depuis AutoCAD, en entrant les valeurs suivantes :
Cet exemple doit permettre de dessiner un sentier de jardin comme indiqué dans la figure suivante :
Vous pouvez faire des essais avec l a macro Gardenpath en définissant les différentes entrées.
La macro Gardenpath a été écrite pour accepter les saisies sur la ligne de commande. Pour ajouter des boîtes de dialogue, utilisez les feuilles de VBA IDE.
Copiez d'abord la version finale de gardenpath.dvb dans un autre fichier, gpdialog.dvb . Faites glisser ensuite gpdialog.dvb dans AutoCAD.
La boîte de dialogue que vous créez contient deux boutons d'option (si vous en sélectionnez un, l'autre est effacé) permettant de choisir la forme de la dalle :
cercle ou polygone. Cette boîte de d ialogue comporte également trois zones de texte permettant la saisie des valeurs numériques suivantes : le rayon des
mosaïques, l'espacement entre les mosaïques et le nombre de côtés de la mosaïque (disponible uniquement si l e bouton de l'option Polygone est sélectionné).
Pour définir les propriétés des contrôles propres aux cases d'option
1. Sur la feuille utilisateur, sélectionnez le contrôle OptionButton1. Dans le menu Affichage, cliquez sur Fenêtre Propriétés et modifiez les propriétés
suivantes pour OptionButton1 :
(Name) = gp_poly
Caption = Polygon
ControlTipText = Polygon Tile Shape
Accelerator = P
2. Dans la feuille utilisateur, sélectionnez le contrôle OptionButton2. Dans la fenêtre Propriétés, modifiez les propriétés suivantes pour OptionButton2 :
(Name) = gp_circ
Caption = Circle
ControlTipText = Circle Tile Shape
Accelerator = I
Pour définir les propriétés des contrôles propres aux zones de texte
1. Sur la feuille utilisateur, sélectionnez le contrôle TextBox1. Dans la fenêtre Propriétés, modifiez la propriété suivante pour TextBox1 :
(Name) = gp_trad
2. Sur la feuille utilisateur, sélectionnez le contrôle TextBox2. Dans la fenêtre Propriétés, modifiez la propriété suivante pour TextBox2 :
(Name) = gp_tspac
3. Sur la feuille utilisateur, sélectionnez le contrôle TextBox3. Dans la fenêtre Propriétés, modifiez la propriété suivante pour TextBox3 :
(Name) = gp_tsides
Pour définir les propriétés des contrôles propres aux boutons de commande et de la fenêtre de feuille
1. Sur la feuille utilisateur, sélectionnez le contrôle CommandButton1. Dans la fenêtre Propriétés, modifiez les propriétés suivantes pour CommandButton1 :
(Name) = accept
Caption = OK
ControlTipText = Accept the options
Accelerator = O
Default = True
2. Sur la feuille utilisateur, sélectionnez le contrôle CommandButton2. Dans la fenêtre Propriétés, modifiez les propriétés suivantes pour CommandButton2 :
(Name) = cancel
Caption = Cancel
ControlTipText = Cancel the operation
Accelerator = C
3. Sélectionnez la feuille utilisateur en cliquant sur son arrière-plan, à distance de tout contrôle. Dans la fenêtre Propriétés, modifiez les propriétés suivantes
pour la feuille :
(Name) = gpDialog
Caption = Garden Path
Votre feuille doit à présent ressembler à cela :
Dans VBA IDE, la fenêtre Projet contient le nom et l'emplacement du projet, un dossier appelé Objets AutoCAD et un dossier appelé Feuilles . (Vous pouvez
avoir à cliquer sur Basculer les dossiers pour afficher ces derniers.) Lorsque vous ouvrez le dossier Objets AutoCAD (qui peut être déjà ouvert), vous apercevez
une icône de dessin et le nom ThisDrawing. Lorsque vous ouvrez le dossier Feuilles (qui peut être déjà ouvert), vous apercevez une icône de feuille et le nom
gpDialog, à savoir la feuille que vous avez créée.
Vous pouvez utiliser la fenêtre Projet pour parcourir le code et vous aider à identifier l'emplacement où vous travaillez. A titre d'exemple, pour afficher le code
associé à la feuille que vous avez créée, mettez en surbrillance gpDialog dans la fenêtre Projet et cliquez sur Afficher le code.
Mettez à présent ThisDrawing en surbrillance dans la fenêtre Projet. Vous pouvez afficher le code en cliquant sur Afficher le code. Tout le code que vous
avez déjà entré se trouve dans cette fenêtre.
Maintenant que vous avez créé une boîte de dialogue, vous pouvez modifier le code ou en ajouter.
Dans la mesure où le code de la feuille accède à trad et tspac, vous devez mettre à j our leur définition afin de les rendre publiques. Les variables
personnelles sont uniquement disponibles dans le module où elles sont définies ; par conséquent, elles doivent devenir publiques. De plus, vous avez
ajouté tsides pour le nombre de côtés des dalles en forme de polygone et tshape pour le choix effectué par l'utilisateur en ce qui concerne la forme
des dalles, à savoir cercle ou polygone.
3. Passez au sous-programme gpuser. Supprimez les deux lignes indiquant le rayon des dalles et l'espacement entre chacune d 'elles, car ces informations
proviennent de la feuille. Supprimez notamment les entrées suivantes :
trad = ThisDrawing.Utility. _
GetDistance(sp, "Radius of tiles: ")
tspac = ThisDrawing.Utility. _
GetDistance(sp, "Spacing between tiles: ")
4. Ajoutez les lignes permettant de charger et d'afficher la feuille. Ajoutez les lignes suivantes à la place de celles supprimées à l'étape 3 :
Load gpDialog
gpDialog.Show
5. Ajoutez un sous-programme à la fin du fichier de code qui dessine les dalles rondes ou celles en forme de polygone :
'Draw the tile with the designated shape
Sub DrawShape(pltile)
Dim angleSegment As Double
Dim currentAngle As Double
Dim angleInRadians As Double
Dim currentSide As Integer
Dim varRet As Variant
Dim aCircle As AcadCircle
Dim aPolygon As AcadLWPolyline
ReDim points(1 To tsides * 2) As Double
'Branch based on the type of shape to draw
Select Case tshape
Case "Circle"
Set aCircle = ThisDrawing.ModelSpace. _
AddCircle(pltile, trad)
Case "Polygon"
angleSegment = 360 / tsides
currentAngle = 0
For currentSide = 0 To (tsides - 1)
angleInRadians = dtr(currentAngle)
varRet = ThisDrawing.Utility.PolarPoint(pltile, _
angleInRadians, trad)
points((currentSide * 2) + 1) = varRet(0)
points((currentSide * 2) + 2) = varRet(1)
currentAngle = currentAngle + angleSegment
Next currentSide
Set aPolygon = ThisDrawing.ModelSpace. _
AddLightWeightPolyline(points)
aPolygon.Closed = True
End Select
End Sub
Ce sous-programme utilise une instruction Select Case pour contrôler le programme basé sur le type de forme à dessiner. La variable tshape sert à
déterminer le type de forme.
6. Passez ensuite au sous-programme drow. Recherchez les deux occurrences de la ligne suivante :
Set cir = ThisDrawing.ModelSpace.AddCircle(pltile, trad)
Modifiez ces lignes pour dessiner la dalle de forme appropriée, comme suit :
DrawShape (pltile) ' Updated
Vous devez à présent supprimer le code relatif à la création de la dalle ronde et appeler le sous-programme DrawShape afin de dessiner la forme appropriée à
la place.
Notez que les sous-programmes gp_poly_Click() et gp_circ_Click() sont dénommés d'après les deux contrôles d'option que vous avez ajoutés
précédemment, avec l'addition de _Click. Ces sous-programmes sont exécutés automatiquement lorsque l'utilisateur clique sur le contrôle respectif.
Notez également que la zone Objet répertorie les contrôles figurant sur la feuille, classés par ordre alphabétique sous la propriété de nom (Name).
3. Placez votre curseur sur la ligne Private Sub gp_poly_Click() et ouvrez la zone Procédure.
Vous apercevez une liste de tous les événements auxquels vous pouvez répondre pour le contrôle d'option gp_poly. Les deux sous-programmes que
vous avez entrés gèrent l'événement Click. Vous pouvez également ajouter du code pour répondre à l'événement DblClick qui s'exécute
automatiquement lorsque l'utilisateur clique deux fois sur le contrôle. Vous pouvez ajouter du code pour tous les événements répertoriés. Ces types de
sous-programmes sont appelés gestionnaires d'événements.
Considérez le code que vous avez entré pour ces deux gestionnaires d'événements. Le premier gestionnaire d'événement répond à l'événement Click
du contrôle d'option gp_poly. La première ligne de code active la zone de texte destinée au nombre de côtés. Cette dernière n'est disponible que pour
les polygones ; elle n'est donc pas activée si vous n'avez pas sélectionné le contrôle Polygon. La ligne de code suivante définit la variable tshape sur
Polygon.
Le second gestionnaire d'événements répond à l'événement Click du contrôle d'option gp_circ. Ce gestionnaire désactive la zone de texte destinée au
nombre de côtés et définit la variable tshape sur Circle.
4. Ajoutez le gestionnaire d'événements suivant pour le bouton OK :
Private Sub accept_Click()
If ThisDrawing.tshape = "Polygon" Then
ThisDrawing.tsides = CInt(gp_tsides.text)
If (ThisDrawing.tsides < 3#) Or _
(ThisDrawing.tsides > 1024#) Then
MsgBox "Enter a value between 3 and " & _
"1024 for the number of sides."
Exit Sub
End If
End If
ThisDrawing.trad = CDbl(gp_trad.text)
ThisDrawing.tspac = CDbl(gp_tspac.text)
If ThisDrawing.trad < 0# Then
MsgBox "Enter a positive value for the radius."
Exit Sub
End If
If (ThisDrawing.tspac < 0#) Then
MsgBox "Enter a positive value for the spacing."
Exit Sub
End If
GPDialog.Hide
End Sub
Ce code vérifie si le choix final de forme portait sur un polygone. Si tel est le cas, il récupère le nombre de côtés à partir du contrôle gp_tsides. La
valeur entrée par l'utilisateur est stockée dans la propriété de texte (Text). Dans la mesure où elle l'est sous la forme d'une chaîne de texte, vous devez
convertir cette dernière en un nombre entier é quivalent, à l'aide de la fonction CInt. Une fois ceci fait, le gestionnaire d'événements vérifie la plage de la
valeur pour s'assurer qu'elle est comprise entre 3 et 1024. Si tel n'est pas le cas, un message s'affiche et le gestionnaire d'événements est interrompu sur-
le-champ. Il en résulte qu'un message s'affiche et que l'utilisateur a la possibilité de modifier la valeur. Une fois que ce dernier a cliqué à nouveau sur le
bouton OK, ce gestionnaire d'événements se déclenche et vérifie à nouveau la valeur.
La macro obtient les valeurs relatives au rayon et à l'espacement, mais celles-ci sont des doubles, elles ne sont pas des nombres entiers et elles sont
obtenues à l'aide de la fonction CDbl. Ces valeurs sont également testées pour s'assurer qu'elles sont positives.
Une fois les valeurs obtenues et vérifiées, l'instruction gpDialog.Hide masque la feuille, en retournant l e contrôle au sous-programme qui l'a appelée
en premier.
5. Ajoutez le gestionnaire d'événements suivant pour le bouton Annuler :
Private Sub cancel_Click()
Unload Me
Fin
End Sub
Ce code définit les valeurs initiales de la feuille et de la variable tsides. La variable tsides doit être définie sur un nombre positif supérieur à 3, même si
l'utilisateur sélectionne un cercle. Pour mieux comprendre ce point, reportez-vous au sous-programme DrawShape que vous avez entré p récédemment. Il
contient une variable appelée points définie à l'aide du nombre de côtés du polygone. Celle-ci a une mémoire allouée qu'une forme de polygone ait été
requise ou pas. Pour cette raison, tsides doit avoir une plage valide définie pour elle. L'utilisateur est libre de modifier cette valeur durant l'exécution de la
macro.
La plupart des fonctionnalités de l'interface Visual LISP se retrouvent dans les interfaces ActiveX et VBA. Cette annexe sert de référence aux développeurs qui
connaissent déjà bien Visual LISP et qui souhaitent découvrir les fonctionnalités équivalentes dans ActiveX et VBA.
Le tableau suivant compare les fonctions Visual LISP avec les fonctions et les opérateurs équivalents d'ActiveX ® , de VBA et de Visual Basic 6. Les fonctions
équivalentes de l'Automatisation ActiveX sont signalées par la mention “AutoCAD.Application”et celles de Visual Basic 6 sont énumérées en tant que fonction
ou opérateur.