-
Compteur de contenus
397 -
Inscription
-
Dernière visite
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par Serge
-
Zébulon, Quelque chose du genre: (setq pt (getpoint "\nPoint: ")) (setq avant (entlast)) (command "_bpoly" "_a" "_i" "_y" "" pt "") (setq ss (ssadd)) (setq nouveau (entnext avant)) (while nouveau (setq ss (ssadd nouveau ss)) (setq nouveau (entnext nouveau)) ) (princ (strcat "\nIl y a " (itoa (sslength ss)) " objets nouveaux.")) (princ) Serge
-
Tramber, Comme je te l'avais signalé en privé, je devais y aller moi aussi. Autodesk organisait anuellement un DevCamp dans la même période (l'an dernier à EuroDisney et l'an d'avant à Nice). Cette année, c'est annullé ou à défaut, reporté à l'automne (chance mince). Mais, il n'est pas impossible que j'aille faire un tour rapide. Je vous tiendrai au courant (si ça peut vous intéresser :)) Serge
-
pause dans un script...?
Serge a répondu à un(e) sujet de GUIGOS85 dans Personnalisation, macros, DIESEL
guigos85, On ne peut effectuer 2 opérations en même temps. Si tu veux que la personne puisse effectuer certaines choses. Il faut interrompre le script (via la touche Backspace). La commande RESUME sera alors inefficace. (en passant, tu a des \\\ mélangé avec des simple \ dans le nom de tes fichiers). Serge -
dr, Avec ce delete, tu essaie de purger le bloc. Tu dois the promener dans la table du ModelSpace, du Paperspace, des blocks pour savoir si tu a une instance de cette définition et la supprimer. Ensuite, s'il n'y a plus aucune référence, tu pourras prendre ton delete. Serge
-
Géler calques d\'xref sans ouvrir le plan d\'origine
Serge a répondu à un(e) sujet de rimbo dans Suggestions de développements
rimbo, Ouvrir le dessin parent ouvre aussi les enfants, au moins pour lire leur contenu. Si tu fais une fonction (setq layer (cdr (assoc 8 (entget (car (nentsel "\nChoix: ")))))) Tu auras le nom du calque. Avec la commande _-layer et la variable VisRetain, tu sera comblé. Serge -
docteur, Oops, je n'avais pas vu que tu parlais de Think3.Je ne connais pas ce logiciel. Désolé. Serge
-
guigos85, Je ne peux lire ta question. Serge
-
Bruno, Le mieux est donc ceci (defun beginUndo () ;; le code aussi complexe dont on peut rêver ) (defun closeUndo () ;; Même chose ) (defun *error* (msg) (closeUndo) ) (defun c:le_programme () (beginUndo) (du_code) (closeUndo) (princ) )
-
Sélection à l\'exxtérieur d\'une polyligne
Serge a répondu à un(e) sujet de miamar dans Débuter en LISP
miamar, Je vais chercher dans mes archives. Serge -
recupérer données figure autocad avec VBA
Serge a répondu à un(e) sujet de frmaniako dans AutoCAD 2005
frmaniako, Alors tu n'as pas besoin d'une sélection. Voici unepiste de solution. À toi de composer avec le reste. Sub toto3() Dim anyEntity As AcadEntity Dim ligne As AcadLine For Each anyEntity In ThisDrawing.ModelSpace ' Are these objects hidden? If anyEntity.ObjectName = "AcDbLine" Then Set ligne = anyEntity Debug.Print "Ligne: (" & ligne.StartPoint(0) & "," & ligne.StartPoint(1) & ") à (" _ & ligne.EndPoint(0) & "," & ligne.EndPoint(1) & ")" End If Next End Sub Serge -
yalta, Est-ce que tu parle bien des filtre de la commande Filtre ? (Je demande ça parce que la plupart du temps, les gens veulent éliminer les filtres de calques. Pour les filtres, il faut les sauvegarder. AutoCAD utilise pour cela un fichier nommé filter.nfl (nfl = named filter list). Pour restaurer un filtre nommé, il y a la liste à coté de "current". Le problème est que cette liste affiche une liste si courte qu'on a peine à s'imaginer que c'est une liste. Mais il y a des flèches de défilement. Serge
-
dr.sansamour, Pour les bisous, c'est peut-être une question de culture, mais je vais passer mon tour :-) Pour le reste, il y a ceci: Sub test() Dim MECA As AcadLayout Dim objCartouche As AcadBlockReference Dim insertionPnt(0 To 2) As Double Set MECA = ThisDrawing.Layouts.Add("MECA") insertionPnt(0) = 0 insertionPnt(1) = 0 insertionPnt(2) = 0 Set objCartouche = MECA.Block.InsertBlock(insertionPnt, "C:\Program Files\AutoCAD xxx\SAMPLE\colorwh.dwg", 1, 1, 1, 0) End Sub Serge
-
Bruno, Je suggère ceci: (defun foo ( ) (command "._undo" "_auto" "_off") (command "._undo" "_begin") ; Note: Begin remplace Group depuis R13. ;; le programme ici (command "._undo" "_end") (command "._undo" "_auto" "_on") ) Et ne pas oublier la fonction *error* qui contiendra aussi les 2 dernières lignes Ludwig, Parles-tu vraiment de faire plusieurs interventions pour tout arrêter ou bien de revenir en arrière en une seule étape (un seul _U) ? Serge
-
Ludwig, Me revoici. J'en ai profité pour rendre le code plus lisible. ;;; C:PEDIT2 ;;; Permet de joindre des polylignes classées par calques ;;; ;;; Compatibilité: AutoCAD R13 et plus ;;; ;;; Instructions: ;;; 1) Charger ce fichier ;;; 2) Tapez PEDIT2 sur la ligne de commande ;;; 3) Choisissez des objets. Les objets invalides sont filtrés. ;;; ;;; Modifications: ;;; 2005/01/06 : Filtrer les mauvais objets. ;;; ;;; Par Serge Camiré, CadNovation, 2005/01/01 ;;; http://www.cadnovation.com/fr ;;; (defun c:pedit2 ( / acadver fuzz hasLineOrArc i is3DpolylineOr3Dmesh layer n objet objetGet oldPeditaccept ss triplet1 triplet2 triplets ) (setq fuzz 0.0) ; tolerance pour joindre ou non (setq acadver (substr (getvar "acadver") 1 4)) (if (>= acadver "16.1") (progn (setq oldPeditaccept (getvar "peditaccept")) (setvar "peditaccept" 1) )) (setq ss (ssget (list (cons 00 "*polyline,line,arc")))) (setq hasLineOrArc nil) (setq i 0) (setq n (if ss (sslength ss) 0)) (setq triplets nil) ;; Construire autant de triplets que de calques, comme suit: ;; Triplet == (calque selection-set hasLineOrArc) ;; Filtrer les 3dPolyline et les 3DMesh (while (< i n) (setq objet (ssname ss i)) (setq objetGet (entget objet)) (setq hasLineOrArc (if (member (strcase (cdr (assoc 0 objetGet)) t) '("arc" "line")) t nil)) (setq layer (cdr (assoc 8 objetGet))) (setq polylineFlag (cdr (assoc 70 objetGet))) (setq is3DpolylineOr3Dmesh (and polylineFlag (> (boole 1 polylineFlag (+ 8 16)) 0))) (cond (is3DpolylineOr3Dmesh nil) ; Ignorer ((setq triplet1 (assoc layer triplets)) (setq triplet2 (list layer (ssadd objet (cadr triplet1)) (or hasLineOrArc (caddr triplet1)))) (setq triplets (subst triplet2 triplet1 triplets)) ) (t (setq triplet2 (list (list layer (ssadd objet (ssadd)) hasLineOrArc))) (setq triplets (append triplet2 triplets)) ) ) (setq i (1+ i)) ) ;; Traiter un triplet après l'autre. (foreach triplet1 triplets (setq layer (car triplet1)) (setq ss (cadr triplet1)) (setq hasLineOrArc (caddr triplet1)) (princ (strcat "\n" (itoa (sslength ss)) " objets sélectionnés sur le calque '" layer "'.")) (cond ((not ss) nil) ((< (sslength ss) 2) nil) ; Au moins 2 segments requis ((>= acadver "16.1") ; peditaccept déjà fixé à 1 (command "_pedit" "_multiple" ss "" "_join" fuzz "") ) (hasLineOrArc (command "_pedit" "_multiple" ss "" "_yes" "_join" fuzz "")) (t (command "_pedit" "_multiple" ss "" "_join" fuzz "")) ) ) (if (>= acadver "16.1") (setvar peditaccept oldPeditaccept)) (princ) ) Serge
-
Patrick, Tu peux peut-être lui vendre ta copie et je t'en enverrai un autre pour le remplacer (ou t'en donnerai une caisse en mains propres si Dieu le veut (ou la personne de ton choix)). Pour moi, je ne peux faire la vente directement sauf à un prix qui n'a pas de sens. Serge
-
Oops, J'ai été chanceux que VBA initialise les variables à 0. C'eut été ceci: sommet(0) = 0: sommet(1) = 0: sommet(2) = 0 Serge
-
Patrick, Ceci devrait faire l'affaire. Public Const PI = 3.14159265358979 Sub Example_AngleFromXAxis() ' This example finds the angle, in radians, between the X axis ' and a line defined by two points. Dim pt1(0 To 2) As Double Dim pt2(0 To 2) As Double Dim sommet(0 To 2) As Double Dim retAngle1 As Double Dim retAngle2 As Double Dim message As String pt1(0) = 10: pt1(1) = 0: pt1(2) = 0 pt2(0) = 10: pt2(1) = 10: pt2(2) = 0 sommet(0) = 0: sommet(0) = 2: sommet(0) = 0 ' Return the angle retAngle1 = ThisDrawing.Utility.AngleFromXAxis(sommet, pt1) retAngle2 = ThisDrawing.Utility.AngleFromXAxis(sommet, pt2) ' Display the angle found message = "L'angle les 2 points et le sommet est: " & vbCrLf & _ "En radians: " & retAngle2 - retAngle1 & vbCrLf & _ "En degrés: " & 180# * (retAngle2 - retAngle1) / PI MsgBox message, , "AngleFromXAxis Example" End Sub Serge
-
Ludwig, Je vais vérifier plus tard mais je pense que c'est dû à la présence de 3dpoly ou de mailles, comme je l'avais signalé. Je filtrerai ces objets pour être sur. Serge
-
GUIGOS85 , Connais-tu bien le C++ car c'est très différent de n'importe quoi d'autre, y compris le C# (et qui est managé). C'est beacoup plus puissant mais plus long à déboguer et quand ça plante, ça plante. Pour les exemples, il y en a des dizaines lorsque tu installe ObjectARX. Cet environnement estobligatoire car il contient une foule de librairies pour AutoCAD ainsi que les fichier d'entête (*.h) donnant accès aux objets d'AutoCAD. Il y a un exemple sur ce site. Tu n'aa qu'à chercher dans ce fil http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=3081#pid8783 En terminant, si tu veux faire du C++, je te recommande le add-in "Visual Assist" de Whole Tomato (http://www.wholetomato.com) Serge
-
zébulon, (vla-moins-de-$$$) du coté Autodesk Y commence à être tard :) Serge
-
Patrick, Au lieu de chercher le moyen en VBA, j'ai cherché du coté de comment exécuter le calculateur à aprtir de vba. Je n'y suis pas arrivé parce que geomcal.arx n'expose aucune interface que j'aurais souhaité capturé. Entre 2 programme de même nature, i.e. un programme arx qui aurait voulu se servir du calculateur, c'eut été facile avec un acedInvoke. À la fin de ce message se trouve les début de mes recherche qui n'ont abouties à rien mais qui montre comment charger un fichier arx, si ça peut aider quelqu'un. Donc, ou bien tu utilise le SendCommand, ou bien tu ouvre une nouvelle instance d'AutoCAD et tu y envoie tes SendCommand en cachette (je blague), ou encore tu le fais dans les règle de l'art. La résolution du problème peut être complexes selon que tu es en 2D seulement, en 3D mais que tu projette tes 2 droites sur le plan XY, ou encore que tu projette dans un plan arbitraire. La fonction ang du calculatteur t'offre les 3 choix. Quelle est ta situation ? Sui c'est la dernière, consulte l'exemple Example_AngleFromXAxis. En passant, pour passer des coordonnées au calculateur, on utilise des crochets. Exemple: (cal "ang([0,0],[10,10])"), retourne 45 degrés. Exemple VBA inutile dans le contexte pour charger un arx. Sub toto() LoadArxFile "geomcal.arx" End Sub Function LoadArxFile(Filename As String) ' Charge un fichier arx au besoin. Faire un On error au besoin Dim appList As Variant appList = ThisDrawing.Application.ListArx If VarType(appList) <> vbEmpty Then Dim I As Integer For I = LBound(appList) To UBound(appList) If StrComp(appList(I), Filename, vbTextCompare) = 0 Then Exit Function Next End If ThisDrawing.Application.LoadArx (Filename) ' À utiliser si le chemin est connu End Function Serge
-
recupérer données figure autocad avec VBA
Serge a répondu à un(e) sujet de frmaniako dans AutoCAD 2005
frmaniako, La question est vague. D'abord, tu doit obtenir un objet. Ceci peut être obtenu en scannant le dessin ou en le demandant comme suit: ' Create the selection set Dim ssetObj As AcadSelectionSet Set ssetObj = ThisDrawing.SelectionSets.Add("SSET1") ' Add entities to a selection set by prompting user to select on the screen ssetObj.SelectOnScreen Ensuite tu boucles dans la sélection. Que veux tu savoir ? Les sommets d'une polyligne, l'étendue de l'objet ? Pour ce dernier cas, va voir du coté de l'exemple Example_GetBoundingBox dnas le fichier d'aide. Serge -
Framinico, Est-ce que c'est le devoir lui-même de faire ce menu ou seulement un outil quelconque. Pour ce qui est de scanner, tu auras une image bitmap et cela ne s'incorpore pas dans les boite de dialogue du lisp (fichier dcl en l'occurence). Si tes images sont produites à partir de dwg, je t'encourage à apprendre les commande _MSLIDE et _VSLIDE. La première pour créer des fichiers à extension SLD et la seconde pour les visionner. Ensuite, tu trouves ton fichier AutoCAD.mnu, en fait une copie backup puis l'ouvre. Tu trouveras une section intitulée ***IMAGE. Avant: ***image **image_3DObjects [3D Objects] etc. Après ***image **desespoir [Mon travail] [fichier1]^C^Ccommande1 [fichier2]^C^Ccommande2 [fichier3]^C^Ccommande3 [fichier99]^C^Ccommande99 **image_3DObjects [3D Objects] etc. Tu remplaceras fichier1 et al par le nom de tes fichiers sld sans extension et sans chemin que tu auras pris soin de copier dans l'un des répertoires connus d'AutoCAD. Tu remplace commande1 et al. par ce que tu veux (e.g. INSERER MONBLOCK) Pour ouvrir cette boite de dialogue, tu crée un bouton dans une barre d'outils et tu y inscrit ^c^c(menucmd "I=ACAD.desespoir") (menucmd "I=ACAD.*") Pour tester, fais-toi un 2-ième bouton avec ceci. Ça devrait ouvrir une page d'objets 3D. ^C^C(menucmd "I=ACAD.image_3dobjects") (menucmd "I=ACAD.*") En temps normal, tu ne devrais pas éditer le fichier AutoCAD.mnu mais plutôt te servir de menu partiel. Mais ça fait déjà beaucoup de choses pour l'instant. Bonne chance. Serge
-
GUIGOS85, Il est possible de faire du C++ managé avec .Net mais cela ne donneras pas des fichiers arx mais plutôt des assembly (dll). Je ne connais pas tes besoins. Es-tu programmeur ou dessinateur ? Dans le premier cas, je te conseille d'apprendre AutoLISP, ce qui te permettra de te familiariser rapidement avec AutoCAD. Si tu connais déjà bien VB, tu ne devrais pas trop avoir de diffucultés avec VBA ou VB.NET, bien que ce dernier soit d'une philosophie plus près du C++. Finalement, si tu veux faire du C++, je te recommende d'avoir une équipe autour de toi. Dans le deuxième cas, une bonne connaissance d'AutoCAD, des Express Tools, du script et d'AutoLISP seront tes fondements. Eagle4, En passant, la 2004 utilisait timidement .NET. La 2005 a permi le chargement d'assembly (via Netload). La 2006, puisque c'est un secret de polichinel, incorpore le framework de la 2003. Tu n'aura plus à le déployer avec tes applications. Serge
-
GUIGOS85, Pour répondre à ta question, l'usage des Express Tools te donneras un bon coup de main. Pour la programmation, le plus simple selon moi est encore AutoLISP, même si pas parfait. De nombreux exemples sont disponibles sur ce site ou sur d'autres. Serge
