Aller au contenu

(gile)

Moderateurs
  • Compteur de contenus

    12 247
  • Inscription

  • Dernière visite

  • Jours gagnés

    209

Tout ce qui a été posté par (gile)

  1. Bonjour et bienvenue, Si tu veux de l'aide pour un programme ObjectARX / .NET, tu devrais montrer ce que tu as déjà fait.
  2. Toute la documentation du développeur AutoCAD : https://help.autodesk.com/view/OARX/2018/ENU/ Tu peux remplacer 2018 par 2019, 2020, 2021 ou 2022 pour les versions d'AutoCAD plus récentes (mais ça ne devrait pas changer grand chose en VBA).
  3. As-tu attentivement lu, décortiqué, analysé le code donné ici ? les réponses à tes question y sont.
  4. Salut, Dans un script, soit tu charges le LISP suivant et tu appelles la "commande LISP" XXX (tu peux la renommer comme tu veux). (defun c:xxx (/ e l) (if (and (setq e (cdr (assoc -2 (tblsearch "BLOCK" "INFO-LOCAL_100_200")))) (setq l (tblobjname "LAYER" "0-INFO-LOCAL")) ) (while e (setpropertyvalue e "LayerId" l) (setq e (entnext e)) ) ) (princ) ) soit tu mets directement dans le script l'expression suivante : (if (and (setq e (cdr (assoc -2 (tblsearch "BLOCK" "INFO-LOCAL_100_200")))) (setq l (tblobjname "LAYER" "0-INFO-LOCAL")) ) (while e (setpropertyvalue e "LayerId" l) (setq e (entnext e)) ) )
  5. (gile)

    Copier 100+

    Petit rappel : lorsque l'argument requis pour la fonction command est un nombre ou une liste de nombres, il peut être spécifié indifféremment sous la forme d'un entier, d'un réel , d'une liste de nombres ou d'une chaîne de caractères. Utiliser des nombres ou des listes de nombre évite les rtos, strcat et autres fonctions de traitement des chaînes.
  6. As-tu lu les liens données dans mon dernier message ?
  7. C'est juste de l'analyse logique de l'énoncé pour ranger des instructions données dans le désordre (ça ressemble à ce qu'on fait quand on essaye de répondre à certains message sur les forums). Question connaissances, ça ne fait appel qu'aux multiples des nombres entiers ce qui devrait être acquis en quatrième. Après, c'est un jeu de logique, et puisqu'il s'agit de former les jeunes générations à la programmation, parait-il, c'est un excellent exercice.
  8. => entre 200 et 288 => divisible par 6 => divisible par 12 Les nombres entre 200 et 288 divisibles par 12 sont : 204, 216, 228, 240, 252, 264, 276, 288 Restent : 204, 240, 264 Restent 204 et 264.
  9. Je ne suis pas certain de comprendre exactement la demande, mais s'il s'agit de modifier le calque des entités d'une définition de bloc, tu peux utiliser Edit_Bloc sur cette page.
  10. Difficile de répondre à tes dernières questions avec si peu d'information (on n'est pas dans ta tête). Si tu as du mal à coder avec la liaison tardive (As Object), tu peux le faire en liaison anticipée (As AcadApplication, As AcadDocument, As AcadLayer, etc) avec les bibliothèques (ou directement dans AutoCAD) et quand tu es satisfait avec le fonctionnement de ton code, tu remplaces tous les types AutoCAD* par Object et tu peux supprimer les références aux bibliothèques. (CF Liaison anticipée et liaison tardive et Early ou Late Binding).
  11. Il me semble avoir précisément répondu à la demande dans cette réponse. ^C^C-typeligne;CH;<NomDuTypeDeLigne>;"D:/Rep1/Rep2/FichTL.lin";;^C^C
  12. (gile)

    Copier 100+

    Salut, J'imagine que si tu veux sélectionner d'abord, puis lancer la commande ensuite (sélection nom-verbe), c'est que tu travailles avec la variable système PICKFIRST à 1. Dans ce cas l'expression (setq ss (ssget)) dans ton code prendra la sélection courante s'il y en a une ou te demandera de sélectionner des objets. (defun c:C+ (/ ss) (if (setq ss (ssget)) (command-s "_.copy" ss "" "_Displacement" '(0. 100.)) ) (princ) ) Si tu veux que ta routine fonctionne quelle que soit la valeur de PICKFIRST, il faut explicitement d'abord essayer s'il existe une sélection avec l'option "_I" de ssget et ensuite appeler ssget sans option s'il n'y en a pas. (defun c:C+ (/ ss) (if (or (setq ss (ssget "_I")) (setq ss (ssget)) ) (command-s "_.copy" ss "" "_Displacement" '(0. 100.)) ) (princ) )
  13. Salut, Tu remplaces 'CACHE' par le nom du type de ligne, 'acadiso.lin' par le chemin de ton fichier entre guillemets en remplaçant les \ par des / et tu supprimes les bbcodes.
  14. Salut, Quand la propriété Alignment est différente de acAlignmentLeft, il faut spécifier la propriété TextAlignmentPoint.
  15. Je suis têtu, j'ai testé. La macro suivante dans Excel ouvre une nouvelle session d'AutoCAD (dernière version utilisée sur le poste), crée le calque "TOTO" et le rend courant ; et ceci sans aucune référence aux bibliothèques AutoCAD. Sub Test() Dim acadApp As Object On Error Resume Next Set acadApp = CreateObject("AutoCAD.Application") If 0 < Err.Number Then Err.Clear MsgBox ("Impossible de créer une instance de 'AutoCAD.Application'.") Exit Sub End If acadApp.Visible = True Dim doc As Object Set doc = acadApp.ActiveDocument Dim color As Object Set color = acadApp.GetInterfaceObject("AutoCAD.AcCmColor." & Left(acadApp.Version, 2)) color.SetRGB 80, 100, 244 Dim layer As Object Set layer = doc.layers.Add("TOTO") layer.TrueColor = color doc.ActiveLayer = layer End Sub
  16. @didier Merci pour ta proposition mais je pense que ce n'est pas nécessaire. De plus, si tu postes sur le forum VBA, les résultats risquent de ne pas être très représentatifs...
  17. Merci @didier et @lecrabe ce que vous dites confirme bien ce que je pensais.
  18. @DenisHen Il me semble bien que : 1. Comme dit plus haut, tu n'as pas besoin de connaître la version d'AutoCAD, ni si le module VBA est installé sur cette version. Comme avec d'autre langages (.NET, Python, ...), tu peux accéder l'application AutoCAD via ActiveX sans spécifier la version : Dim acadApp As Object On Error Resume Next Set acadApp = CreateObject("AutoCAD.Application") If 0 < Err.Number Then Err.Clear() MsgBox("Impossible de créer une instance de 'AutoCAD.Application'.") Exit Sub End If Dim ThisDrawing As Object = acadApp.ActiveDocument 2. Un programme VBA, que ce soit du VBA Excel ou de VBA AutoCAD, ne fonctionnera pas sur une version LT. Ces versions sont bridées pour ne supporter aucune programmation. Ceci dit, je persiste à penser que créer des calques dans AutoCAD devrait logiquement se faire depuis AutoCAD...
  19. Salut, Depuis de nombreuses versions maintenant (2008 ? 2012 ?), le module VBA doit être installé séparément pour pouvoir créer ou exécuter des programmes VBA dans AutoCAD. Je ne suis pas très porté sur les sondages mais je serais curieux de savoir combien d'utilisateurs de version pleines (ou verticales) ont installé ou pas ce module.
  20. Denis, j'ai vraiment le sentiment que tu te compliques la vie parce que tu prends problème dans le mauvais sens. Si tu veux utiliser le VBA pour faire communiquer AutoCAD et Excel, il serait beaucoup plus simple de le faire depuis AutoCAD, ce qui résoudrait tes soucis de version de bibliothèque (qui serait forcément installée sur le poste pour pouvoir utiliser le programme). Sinon, depuis Excel, la solution de générer un script est, à mon sens, la plus simple et elle permettrait de lancer ce script dans les versions LT comme dans les versions pleines sur lesquelles le module VBA n'est pas installé (ce qui représente très probablement la grande majorité).
  21. Ces numéros de version (release number) valent pour toutes les versions d'AutoCAD (LT, Vanilla et verticaux). Les clés enfant donne les identifiants locaux (LocaleId) et de produit (ProductId). Par exemple AutoCAD-5101:40C pour AutoCAD 2020(5), Vanilla (01), français (40C). Voir ce sujet.
  22. Es-tu sûr de ça ? La librairie n'a-t-elle pas juste besoin d'être chargée dans l'IDE ?
  23. Pour trouver les versions d'AutoCAD installées sur un poste, tu peux lire la base de registre (HKEY_CURRENT_USER (ou HKEY_LOCAL_MACHINE)\SOFTWARE\Autodesk\AutoCAD.
  24. Salut Francine, Ceci devrait répondre à ta demande : (defun c:FRANCINE (/ ss i lst rot pt p) (if (setq ss (ssget '((0 . "DIMENSION") (-4 . "<NOT") (-4 . "&") (70 . 7) (-4 . "NOT>")))) (progn (repeat (setq i (sslength ss)) (setq lst (cons (ssname ss (setq i (1- i))) lst)) ) (setq rot (getpropertyvalue (car lst) "Rotation")) (if (vl-every '(lambda (d) (= (getpropertyvalue d "Rotation") rot)) lst) (if (setq pt (getpoint "\nSpécifiez le point d'alignement: ")) (foreach d lst (if (= rot 0.) (setpropertyvalue d "TextPosition/X" (car pt)) (setpropertyvalue d "TextPosition/Y" (cadr pt)) ) ) ) (prompt "\nCôtes horizontales et verticales mélangées.") ) ) ) (princ) )
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité