-
Compteur de contenus
161 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par tyrese69_
-
Bonjour, Jette un coup d'oeil au forum FR d'Autodesk et l'utilisation d'un champ aire. C'est ce que tu veux faire mais en lisp ! Daniel OLIVES
-
Bonjour à tous, J'ai retrouvé celà dans mes sauvegardes ! Il y a un sujet également en vlisp avec des polylignes converties en région ! avec des champs aires, sur le forum FR autodesk ! Daniel OLIVES Option Explicit ' ' Ce programme utilise le contour type région pour placer ' en chaque centre de gravité un texte correspondant au numéro du local ' et au dessous le texte correspondant à la surface. ' L001 ' 10.0 m2 ' Aprés lancement du programme, à la demande de choix des objets ' sélectionner manuellement les objets régions dans l'ordre désirer ' pour la numérotation. ' 'Remarque: L'échelle du dessin est supposée être en mètres (1) ' dans le cas contraire il suffit d'adapter les différents paramètres ' ' ' 'paramètres en dur : 'hauteur de texte CG_RObj_txt_loc = 0.25 'hauteur de texte CG_RObj_txt_surf = 0.25 'décalage entre les deux textes = -0,4 ' 'Le 16/02/2003 Daniel Olivès daniel.olives@numericable.fr ' 'Toute amélioration ou remarque est la bienvenue ! 'Ce programme est mon premier programme en VBA Autocad, merci d'avance 'de vos conseils à venir ! Sub Main() Dim RObj As AcadEntity 'Objet région autocad Dim CG_RObj_txt_loc As AcadText 'Texte Nom du local mis en forme Dim CG_RObj_txt_surf As AcadText 'Texte Nom de la surface mis en forme Dim SSObj As AcadSelectionSet 'Jeu de sélection Dim Centroid As Variant 'centre de gravité CG(centroid) Dim Nb_RObj As Integer 'Nombre de régions sélectionnées Dim RObj_txt_loc As String 'Texte nom du local Dim RObj_txt_surf As String 'Texte surface du local Dim Location(0 To 2) As Double 'définition du point d'insertion Dim Aire As Double 'variable surface Dim Area As AcadEntity 'Objet Surface Autocad Randomize Timer Set SSObj = ThisDrawing.SelectionSets.Add(Str(Rnd)) SSObj.SelectOnScreen ' Nb_RObj = 1 'initialisation du nombre de régions For Each RObj In SSObj If RObj.ObjectName = "AcDbRegion" Then 'Test si l'objet est une région Aire = RObj.Area 'Récupération de la surface Centroid = RObj.Centroid 'Récupération du centre de gravité ' 'première ligne de texte centrée au milieu du CG Location(0) = Centroid(0) Location(1) = Centroid(1) RObj_txt_loc = "L" & Format(Nb_RObj, "000") 'Mise en forme N° indice du local Lxxx Set CG_RObj_txt_loc = ThisDrawing.ModelSpace.AddText(RObj_txt_loc, Location, 0.25) 'Alignement centré au milieu CG_RObj_txt_loc.Alignment = 10 'Alignement centré au milieu CG_RObj_txt_loc.TextAlignmentPoint = Location 'ligne obligatoire sinon texte en 0,0,0 ' 'deuxième ligne de texte centrée au milieu du CG + décalage en Y de -0.4 Location(0) = Centroid(0) Location(1) = Centroid(1) - 0.4 RObj_txt_surf = Format(Aire, "## ##0.0") & " m2" 'Mise en forme surface du local x xxx.xx Set CG_RObj_txt_surf = ThisDrawing.ModelSpace.AddText(RObj_txt_surf, Location, 0.25) 'Alignement centré au milieu CG_RObj_txt_surf.Alignment = 10 'Alignement centré au milieu CG_RObj_txt_surf.TextAlignmentPoint = Location 'ligne obligatoire sinon texte en 0,0,0 'ThisDrawing.ModelSpace.AddText "S=" & Aire, Location, 2 ' Nb_RObj = Nb_RObj + 1 'incrémentation du nombre de régions End If Next RObj 'région suivante End Sub
-
Bonjour à tous, Une autre particularité des FSO, c'est l'accés aux infos des bulles de l'explorateur, en y incluant les propriétés des fichiers AutoCAD par exemple ! Daniel OLIVES
-
bonsoir, En stage de programmation VBA avancée, il m'a été fortement déconseillé d'utiliser les "send.Command", il est vrai que plus on s'en passe et mieux le debuggage ce passe. Le VBA et le lisp étant asynchrones, il faut prévoir les commandes automatiques d'autoCAD, qui démarrent sans prévenir et qui viennent pertuber les beaux programmes mis au point en phase stable. a l'usage, pour des applications professionnelles, en vb, j'essaye de faire le maximun de test, mais parfois 2 ans aprés, il rest e des buggs particuliers, version d'autoCAD, environnemnt différent etc... Mais j'aimerias bien avoir l'avis d'autres utilisateurs ? Daniel OLIVES
-
Bonjour, En VBA ce module de class permet de passer des paramètres entre le lisp et le VBA : AutoCAD 2006 --> VL.Application.16 Une recherche sur le forum US VBA d'Autodesk donnera quelques exemples d'utisation. le passage de paramètres entre le lisp et le VBA ce fait de facons asynchrone, il faut donc être prudent ! Le VBA permet le contrôle de fin de routine lisp ! Le module de class ci aprés permet de lire des variables définies dans une routine lisp ! Daniel OLIVES ' VLAX.CLS v1.4 (Last updated 8/27/2001) ' Copyright 1999-2001 by Frank Oquendo ' ' Permission to use, copy, modify, and distribute this software ' for any purpose and without fee is hereby granted, provided ' that the above copyright notice appears in all copies and ' that both that copyright notice and the limited warranty and ' restricted rights notice below appear in all supporting ' documentation. ' ' FRANK OQUENDO (THE AUTHOR) PROVIDES THIS PROGRAM "AS IS" AND WITH ' ALL FAULTS. THE AUTHOR SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY ' OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. THE AUTHOR ' DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE ' UNINTERRUPTED OR ERROR FREE. ' ' Use, duplication, or disclosure by the U.S. Government is subject to ' restrictions set forth in FAR 52.227-19 (Commercial Computer ' Software - Restricted Rights) and DFAR 252.227-7013©(1)(ii) ' (Rights in Technical Data and Computer Software), as applicable. ' ' VLAX.cls allows developers to evaluate AutoLISP expressions from ' Visual Basic or VBA ' ' Notes: ' All code for this class module is publicly available througout various posts ' at news://discussion.autodesk.com/autodesk.autocad.customization.vba. I do not ' claim copyright or authorship on code presented in these posts, only on this ' compilation of that code. In addition, a great big "Thank you!" to Cyrille Fauvel ' demonstrating the use of the VisualLISP ActiveX Module. ' ' Dependencies: ' Use of this class module requires the following application: ' 1. VisualLISP Private VL As Object Private VLF As Object Private Sub Class_Initialize() Set VL = ThisDrawing.Application.GetInterfaceObject("VL.Application.16") Set VLF = VL.ActiveDocument.Functions End Sub Private Sub Class_Terminate() Set VLF = Nothing Set VL = Nothing End Sub Public Function EvalLispExpression(lispStatement As String) Dim sym As Object, RET As Object, retVal Set sym = VLF.Item("read").funcall(lispStatement) On Error Resume Next retVal = VLF.Item("eval").funcall(sym) If Err Then EvalLispExpression = "" Else EvalLispExpression = retVal End If End Function Public Sub SetLispSymbol(symbolName As String, value) Dim sym As Object, RET, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) RET = VLF.Item("set").funcall(sym, symValue) EvalLispExpression "(defun translate-variant (data) (cond ((= (type data) 'list) (mapcar 'translate-variant data)) ((= (type data) 'variant) (translate-variant (vlax-variant-value data))) ((= (type data) 'safearray) (mapcar 'translate-variant (vlax-safearray->list data))) (t data)))" EvalLispExpression "(setq " & symbolName & "(translate-variant " & symbolName & "))" EvalLispExpression "(setq translate-variant nil)" End Sub Public Function GetLispSymbol(symbolName As String) Dim sym As Object, RET, symValue symValue = value Set sym = VLF.Item("read").funcall(symbolName) GetLispSymbol = VLF.Item("eval").funcall(sym) End Function Public Function GetLispList(symbolName As String) As Variant Dim sym As Object, list As Object Dim Count, elements(), i As Long Set sym = VLF.Item("read").funcall(symbolName) Set list = VLF.Item("eval").funcall(sym) Count = VLF.Item("length").funcall(list) ReDim elements(0 To Count - 1) As Variant For i = 0 To Count - 1 elements(i) = VLF.Item("nth").funcall(i, list) Next GetLispList = elements End Function Public Sub NullifySymbol(ParamArray symbolName()) Dim i As Integer For i = LBound(symbolName) To UBound(symbolName) EvalLispExpression "(setq " & CStr(symbolName(i)) & " nil)" Next End Sub Ou passage de paramètres par les variables users1 à 5 Exemple avec la fonction open qui nécessite un paramètre non transmissible directement en lisp ou script Option Explicit Function vbopen(ParamFile As Variant) ThisDrawing.Application.Documents.Open ParamFile End Function ' Sub vbsubopen() ' Sous routine de lancement de la function avec paramètre Dim VarUsers1 As Variant VarUsers1 = ThisDrawing.GetVariable("users1") If VarUsers1 <> "" Then vbopen VarUsers1 End If End Sub Dans un script ou sur la ligne de commande pour essai (command "filedia" "0") (command "users1" "Chemin+nomdufichier") (command "_-vbarun" "C:/Essai.dvb!Mod_cmdopen.vbsubopen") (command "filedia" "1")
-
Bonjour, Désolé pour le retard mais c'est le boulot ! Voici un extrait d'une routine de mise en page automatique selon les dimensions d'un cadre inséré dans une présentation ! Une vue est créer pour un canonical name User257 (A0), Sans fenêtre, mais c'est pas bien compliqué d'ajouter celle ci et l'échelle de zoom (z= n XP) Espace papier normailé en "mm". Aprés un test des blocs insérés dans l'espace papier , For Each objElem In objPresentation.Block '.PaperSpace ' si l'élément est un bloc With objElem If .EntityType = acBlockReference Then Select Case UCase(.name) . . . Case "6000_CADRE_A0" CoinBasX = -971.7047: CoinBasY = 0 CoinHautX = 217.3: CoinHautY = 889.93 If objPresentation.name <> "Model" _ Then objPresentation.name = "A0_" & objPresentation.name ' " " = "User257" If objPresentation.name <> "Model" _ Then objPresentation.CanonicalMediaName = "User257" objPresentation.SetCustomScale 1, 1 objPresentation.PaperUnits = acMillimeters ' unité papier FlagImp = FlagImp + 1 . . . . . ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 03 pt1(0) = CoinBasX: pt1(1) = CoinBasY: pt1(2) = 0 pt2(0) = CoinHautX: pt2(1) = CoinHautY: pt2(2) = 0 ' Transfert point 3D vers point 2D ptz1(0) = pt1(0) ptz2(0) = pt2(0) ptz1(1) = pt1(1) ptz2(1) = pt2(1) ThisDrawing.Application.ZoomWindow pt1, pt2 ' zoom fenêtre ' Cas ou tous les points à zéro, pas de fenêtre ! If ptz1(0) = 0 And ptz2(1) = 0 And ptz1(1) = 0 And ptz2(1) = 0 Then MsgBox "Il n'y a pas de cadre bloc dans cette présentation" Else objPresentation.PlotType = acWindow ' Présentation fenêtre objPresentation.SetWindowToPlot ptz1, ptz2 ThisDrawing.Regen acAllViewports ' pour prise en compte Cette méthode permet quel que soit le traceur utilisé, de l'identifié et de paramétrer les présentations, juste à l'aide de la taille du cadre inséré ! Daniel OLIVES
-
Bonsoir, Créer une vue en vba est tout à fait possible ! Dans l'aide au développeur il y a des exemples. Cherche "view vba" Daniel OLIVES
-
Bonjour, ce lien donne une routine qui permet d'avoir tous les formats et traceurs installés ! http://discussion.autodesk.com/thread.jspa?messageID=5102204 Daniel OLIVES
-
Bonsoir à tous, J'ai un problème avec la méthode : CanonicalMediaName il semble que celà ne fonctionne pas avec AutoCAD 2006, ou bien je m' y prend mal. Si je lis ces valeur stockées dansd le dessin, elles sont de la forme : "User268", "User1211" etc... et non pas "A3" , "A0" ou autre chaine de carractères ascii. Quelqu'un a t'il plus d'infos ? Daniel OLIVES Lyon
-
Juste un extrait de l'aide : Lorsque XLOADCTL a la valeur 2, une copie de chaque fichier de dessin référencé est stockée dans le dossier spécifié par la variable système XLOADPATH ou dans le dossier de fichiers temporaires (défini dans la boîte de dialogue Options). Par ailleurs, les xréfs se chargent plus rapidement lorsque vous travaillez en réseau : l'amélioration des performances prend tout son sens lorsque vous ouvrez des dessins comportant un grand nombre de xréfs. Daniel
-
Avec la version complète, en bas à droite de l'écran s'affiche un petit message qui indique que quelqu'un a modifié l'xref "toto" utilisée dans votre dessin et qu'lle nécessite un rechargement ! Cette action est dynamique. Une programmation est nécessaire dans le cas où les noms des fichiers on changés (issus d'une armoire à plan avec indice automatique !) @+ Daniel
-
Bonjour, Depuis les versions récentes d'AutoCAD cette fonction est intégrée ! Daniel
-
Récupérerle point d\'insertion d\'un bloc
tyrese69_ a répondu à un(e) sujet de Marc Blancher dans VBA et VB
D'abord bonjour à tous désolé, j'ai envoyé mon message un peu vite ! Encore toutes mes excuses ! Daniel -
Récupérerle point d\'insertion d\'un bloc
tyrese69_ a répondu à un(e) sujet de Marc Blancher dans VBA et VB
Ce code marche bien pour l'espace objet mais en remplacant Model par Paper le fonctionnment n'est pas le même. Comment obtient on la couche du bloc "Cartouche" dans l'espace papier ? Daniel Sub coucheBloc() Dim ObjBloc As AcadBlockReference Dim StrNomBloc As String StrNomBloc = "Cartouche" For Each ObjBloc In ThisDrawing.ModelSpace If ObjBloc.Name = StrNomBloc Then couche = ObjBloc.Layer MsgBox couche End If Next End Sub -
environnement développement LISP
tyrese69_ a répondu à un(e) sujet de assouma82 dans Pour aller plus loin en LISP
Bonjour, Depuis longtemps je souhaitais utiliser l'éditeur Visual lisp intégré à AutoCAD ! Ca y est enfin ! Comme pour le VBA , point d'arrêt, pas à pas etc . Quel bonheur. J'étais passer au VBA juste pour cela, maintenant je debugg mes lisp et vlisp sans aucuins problèmes. Entre l'aide d'AutoCAD et le site Afralisp, j'y suis arrivé. Enfin il fallait juste consacrer une paire d'heures, pour gagner un temps précieux. Daniel OLIVES -
Bonjour, C'est professionnel. Je suis à Lyon mais je peux me déplacer. Si c'est une formation de groupe, c'est moins onéreux, sinon à voir ? Daniel
-
Bonjour, Je suis à la recherche d'une formation sur le Visual Lisp (ou Vba) pour AutoCAD. DAns les deux cas, j'ai qqs connaissances mais je souhaite pouvoir utiliser l'éditeur de vlisp que ne connais pas du tout. Quelles sont les possibilités de formation, tarifs et dates possibles pour 2006. Daniel OLIVES
-
Bonsoir, Il n'est jamais trop tard pour une réponse ou un complément ! http://www.tgsoft.ch/German/products_g.htm Ce lien donne un viewer allemand il est trés bien fait ! (et gratuit si l'on n'imprime pas !) Un patch francais existe me semble t'il. Daniel OLIVES
-
En lisp je ne sait pas, mais en diesel il y a les RTEXT des express tools ! Daniel
-
Bonsoir, Merci à Patrick_35 et Bruno V. pour leur aide. Le programme lisp qui suit met bien le chemin et le noms du fichier des xrefs contenus dans le dessin courant, dans un fichier texte nommé listexref ;début (defun c:getxref (/ ablock_path) (vl-load-com) (setq activedocument (vla-get-activedocument (vlax-get-Acad-Object))) (setq theblocks (vla-get-blocks activedocument)) (setq theList '()) (setq filexref (open "C:\\Program Files\\cache\\listexref.txt" "w")) (vlax-for item theblocks (setq yesxref (vlax-get-property item 'isXref)) (if (= yesxref :vlax-true) (progn (setq ablock (vlax-get-property item 'Name)) (setq ablock_path (findfile (vlax-get-property ITEM 'PATH))) (setq prxref ablock_path) ;(setq nam_dwg_xref (cdr (assoc 1 (tblsearch "BLOCK" prxref)))) ;(print nam_dwg_xref) (write-line prxref filexref) (setq theList (append (list ablock) theList)) ) ) ) (close filexref) ) Si fichier n'existe pas, il est créé. Pour poursuivre un peut plus loin dans la démarche, il se peut que les xrefs soient en chemin relatif(, sans le chemin !) Dans ce cas là une erreure surviens. ; erreur: type d'argument incorrect: stringp nil Quelle en est l'origine ? Merci pour vos remarques et commentaires éventuels ! Daniel :yltype:
-
Bonsoir, Mes faibles connaissances en vlisp (et lisp!) m'empêchent de bien intégrer au lisp suivant : ;début (defun c:getxref () (vl-load-com) (setq activedocument (vla-get-activedocument (vlax-get-Acad-Object))) (setq theblocks (vla-get-blocks activedocument)) (setq theList '()) (setq filexref (open "C:\\temp\\listexref.txt" "w")) (vlax-for item theblocks (setq yesxref (vlax-get-property item 'isXref)) (if (= yesxref :vlax-true) (progn (setq ablock (vlax-get-property item 'Name)) (setq prxref ablock) (write-line prxref filexref) (setq theList (append (list ablock) theList)) ) ) ) (close filexref) ) ;fin les éléments transmis, pour non pas mettre dans le fichier texte les noms des xrefs, mais les chemins et noms de fichier, voir même seulement le noms des fichiers seulement et celà sans sélection ! Cette étape correspond a la première phase de mes recherches : créer une liste des fichiers en xref ! La seconde étant liée à mon autre post, qui correspond à la fonction inverse lire un fichier texte des fichiers à mettre en xref, en remplacement de ceux existant en fonction de leeur indice de révision (Non testée encore. Chaque étape, l'une aprés l'autre!) Daniel (Je me met à lire les différents tutoriels en ma possession mais les débuts sont lents ! De la persévérence devra être nécessaire !)
-
Bonsoir, Merci pour l'aide, je vais essayer ! Daniel
-
Re bonjour, Voici le lien http://www.afralisp.com/newsletter/2002/2002-11.htm Bonuscad, j'ai essayé d'ajouter ta ligne de code mais, je doit mal m'y prendre, car en réponse, j'ai une attente de sélection ? Daniel
-
Re bonjour, Pour rendre à César ce qui lui reviens, l'extrait du code proviens d'une copie d'un code issu du site Afralisp forum code66 html si ma mémoire est bonne ! Mais le source qui m'a été donner avait été épurer de toute origine et commentaires ! Pratique également peut simpathique ! J'explique ma démarche. Des fichiers provenant d'une appli externe à Autocad, écrite en Delphi, envoie via le net des fichiers de plans, de divers intervenants d'un projet (armoire à plans). Selon les méthodes de travail des différents projeteurs, les noms des xrefs correspondent au noms des fichiers eux même ou bien sont renomés. C'est dans ce dernier cas qu'il est nécessaire d'avoir un lisp modifié comme souhaité pour pouvoir recharger les xrefs de façon automatique ! L'appli lie le fichier texte et précharge les fichiers associés, sans autre intervention ! Dés que mes essais seront terminés je vous tiendrait au courant, mais comme je repart sur un autre chantier, celà attendra le week end ! PS : Pour info, le code complet est sur le site afralisp si nécessaire je peut préciser le lien ! Daniel
-
Bonjour à tous et plus particulièrement à Patrick_35 Je suis désolé de n'avoir pas remercier Patrick_35 pour l'aide qu'il m'a apporté ! Je ne suis pas du genre à ne pas donner de nouvelles sur des points qui peuvent être profitables à la communauté ! Un peut de surcharge ces derniers jours (une charette comme l'on connait en BE !) ne m'a pas encore permis de tester tout le travail qu'il a bien aimablement fourni ! Je donnerais des nouvelles, tous mes essais accomplis, ou je demanderais plus d'infos si cela est nécessaire. Etant un débutant en lisp et Vlisp j'ai un peut de mal à assimiler ou simplement à essayer les différents points communiqués ! Mais d'avance je tiens à remercier Patrick_35 pour son aide présente et à venir car je ne pense pas que l'on vienne sur un tel forum sans avoir une ame de bon samaritain ! Patrick_35, au travers des différents fils que j'ai pu lire sur d'autres sujets, je mesure toute l'aide et l'expérience que tu as dans un dommaine que je souhaite mieux connaitre et j'espère que mes plates excuses suffirons à pardonner ma froideur involontaire ! Merci à Tramber pour son intervention et que je regrette de ne pas avoir saluer à Paris à Invivo, alors que je l'ai fais pour Patrick E. La encore ces forums sont une fenêtre ouverte vers une forme de communication aveugle, pas toujours évidente à maitriser ! Malgré tout, Patrick_35 je te salue et j'espère m'être fait pardonner !
