Aller au contenu

Serge

Membres
  • Compteur de contenus

    397
  • Inscription

  • Dernière visite

Tout ce qui a été posté par Serge

  1. Serge

    bpoly

    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
  2. Serge

    Resto MICAD 2005

    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
  3. 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
  4. Serge

    Supprimer un bloc !!

    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
  5. 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
  6. docteur, Oops, je n'avais pas vu que tu parlais de Think3.Je ne connais pas ce logiciel. Désolé. Serge
  7. Serge

    Visual Basic.net

    guigos85, Je ne peux lire ta question. Serge
  8. 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) )
  9. miamar, Je vais chercher dans mes archives. Serge
  10. 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
  11. 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
  12. Serge

    Présentation ???

    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
  13. 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
  14. 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
  15. Serge

    Recherche livre

    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
  16. Serge

    Echo et Sendcommand

    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
  17. Serge

    Echo et Sendcommand

    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
  18. 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
  19. Serge

    Visual Basic.net

    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
  20. zébulon, (vla-moins-de-$$$) du coté Autodesk Y commence à être tard :) Serge
  21. Serge

    Echo et Sendcommand

    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
  22. 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
  23. 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
  24. Serge

    Visual Basic.net

    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
  25. Serge

    Echo et Sendcommand

    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
×
×
  • 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é