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. (gile)

    Bloc dynamique et hachure

    Salut et bienvenue, Peux tu préciser ce que tu entends par : "lorsque je copie une coupe dans le fichier du projet" ? Pour insérer des blocs, il vaut toujours mieux passer par la commande INSERER (_INSERT) ou, dans ton cas, utiliser une palette d'outil.
  2. (gile)

    Lisp marche plus sur 2016 !

    À tout hasard, est-ce que les LISPs sont bien chargés dans le dessin courant ?
  3. (gile)

    Lisp marche plus sur 2016 !

    Quand tu dis "cela ne fonctionne pas", ça n'aide pas beaucoup ! As-tu un message d'erreur ? Si oui, lequel ? Pour getname, tu ne montres qu'un code DCL, il devrait y avoir un LISP avec. Est-il chargé ?
  4. (gile)

    Lisp marche plus sur 2016 !

    Salut, Je pense que le code que tu as posté ne fonctionne sur aucune version d'AutoCAD (les formules de champ sont corrompues avec des balises BBCODE ?!). Essaye ça (pas testé) ;;; sf -Gilles Chanteau- 13/04/07 ;;; Insère le bloc "sf" après sélection d'une polyligne ;;; Attribut 1 : Nom de la pièce ;;; Attribut 2 : Longueur de la polyligne ;;; Attribut 3 : Aire de la polyligne (defun c:sf (/ AcDoc Space bloc nom ent obj ins op reg ech id long aire ref) (vl-load-com) (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) ) (if (or (tblsearch "BLOCK" (setq bloc "sf")) (findfile (setq bloc "sf.dwg"))) (progn ;; attribut "nom de la pièce" (if (not (setq nom (getname "Nom de la pièce"))) (setq nom "") ) (while (not (setq ent (car (entsel))))) (setq obj (vlax-ename->vla-object ent)) (if (= "AcDbPolyline" (vla-get-ObjectName obj)) (progn (if (not (setq ins (getpoint "\nSpécifiez le point d'insertion ou < Centre >: "))) (progn (if (= (vla-get-closed obj) :vlax-false) (progn (vla-put-closed obj :vlax-true) (setq op T)) ) (setq reg (vlax-invoke space 'addRegion (list obj)) ins (vlax-get (car reg) 'Centroid) ) (if op (vla-put-closed obj :vlax-false) ) (vla-delete (car reg)) ) ) (if (not (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" 3) ) (if (not (setq ech (getreal (strcat "\nEntrez le facteur d'échelle <" (rtos (vlax-ldata-get "sf" "ech")) ">: " ) ) ) ) (setq ech (vlax-ldata-get "sf" "ech")) (vlax-ldata-put "sf" "ech" ech) ) (setq id (vla-GetObjectIdString (vla-get-Utility AcDoc) obj :vlax-false) ;; Attribut périmètre (mm² -> m²) aire (strcat "Surface: " "%<\\AcObjProp Object(%<\\_ObjId " id ">%).Area \\f \"%lu2%pr2%ct8[1e-0]\">%" " m²" ) ;; Attribut surface (mm -> m) long (strcat "Perimétre: " "%<\\AcObjProp Object(%<\\_ObjId[/url] " id ">%).Length \\f \"%lu2%pr2%ct8[1.00]\">%" " ml" ) ) (setq ref (vla-InsertBlock Space (vlax-3d-point (trans ins 1 0)) bloc ech ech 1 (angle '(0 0 0) (trans (getvar 'ucsxdir) 0 (trans '(0 0 1) 1 0 T))) ) ) ;; attribution de leur valeur aux attributs (mapcar '(lambda (x y) (vla-put-TextString x y)) (vlax-invoke ref 'GetAttributes) (list nom aire long) ) (vla-regen AcDoc acActiveViewport) ) (alert "L'objet sélectionné n'est pas une polyligne.") ) ) (alert "Le bloc \"sf\" est introuvable.") ) (princ) )
  5. (gile)

    Lisp marche plus sur 2016 !

    Salut, As-tu des messages d'erreur ? Peux-tu décrire plus précisément ce qui ne fonctionne pas ? Poste la version de Pline_block que tu as (il y en a eu plusieurs). Idem pour Ong, sans voir le code, impossible de voir ce qui peut faire que ça ne "fonctionne" pas.
  6. Salut, J'ai toujours trouvé l'utilisation de SCU dynamique assez erratique. Personnellement, je ne l'utiliserais pas en programmation.
  7. Salut, Comme ça, ça semble marcher. ;; ;; J'ai fait une routine plus aboutie qui insère un champ ;; dont la valeur est égale à la somme des valeurs des champs sélectionnés ;; dans des textes, mtextes ou attributs pouvant être imbriqués dans des blocs ou des tableaux. ;; ;; ADDFIELDS par GC version 1.00 pour Patrice B. ;; ;; Insère un texte contenant un champ dynamique dont la valeur ;; est égale à la somme des valeurs des champs des textes, mtextes ;; ou attributs sélectionnés ;; ;; NOTA : aucun contrôle sur la conformité des champs sélectionnés ;; (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (defun c:AddFields (/ ent res code pos ins) (while (setq ent (car (nentsel "\nSélectionnez un champ: "))) (if (and (setq code (gc:FieldCode ent)) (setq pos (vl-string-search "%<" code)) (setq code (substr code (1+ pos))) (setq pos (vl-string-position 37 code 1 T)) (setq code (substr code 1 (1+ pos))) ) (setq res (cons code res)) (princ "\nEntité non valide") ) ) (if (and res (setq ins (getpoint "\nPoint d'insertion: ")) ) (progn (setq res (strcat "%<\\AcExpr " (lst2str res " + ") " " (if (setq pos (vl-string-position (ascii "\\") code 1 T)) (substr code (1+ pos)) ">%" ) ) ) (vla-addText (if (= 1 (getvar 'cvport)) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) res (vlax-3d-point (trans ins 1 0)) (getvar 'textsize) ) ) ) (princ) ) ;;========================= ROUTINES =========================;; ;; gc:FieldCode par GC ;; Retourne la chaîne de caractère d'un attribut, texte ou mtexte ;; avec le(s) code(s) de champ(s) ;; ;; Argument : nom d'entité de l'objet (ENAME) (defun gc:FieldCode (ent / foo elst xdict dict field str) (setq util (vla-get-Utility *acdoc*)) ;;--------------------------------------------------------;; (defun foo (field str / pos fldID objID) (setq pos 0) (if (setq pos (vl-string-search "\\_FldIdx " str pos)) (while (setq pos (vl-string-search "\\_FldIdx " str pos)) (setq fldId (entget (cdr (assoc 360 field))) field (vl-remove (assoc 360 field) field) str (strcat (substr str 1 pos) (if (setq objID (cdr (assoc 331 fldId))) (vl-string-subst (strcat "ObjId " (vla-GetObjectIdString util (vlax-ename->vla-object objID) :vlax-false) ) "ObjIdx" (cdr (assoc 2 fldId)) ) (foo fldId (cdr (assoc 2 fldId))) ) (substr str (1+ (vl-string-search ">%" str pos))) ) ) ) str ) ) ;;--------------------------------------------------------;; (setq elst (entget ent)) (if (and (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT")) (setq xdict (cdr (assoc 360 elst))) (setq dict (dictsearch xdict "ACAD_FIELD")) (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT")) ) (setq str (foo field (cdr (assoc 2 field)))) ) ) ;;============================================================;; ;; lst2str par GC ;; Concatène une liste et un séparateur en une chaine ;; ;; Arguments ;; lst : la liste à transformer en chaine ;; sep : le séparateur (defun lst2str (lst sep) (if (cdr lst) (strcat (vl-princ-to-string (car lst)) sep (lst2str (cdr lst) sep) ) (vl-princ-to-string (car lst)) ) )
  8. (gile)

    Barre de progression

    Salut, Juste un petite mise en garde, les fonction acet-* font parti des ExpressTools, il faut donc que ceux-ci soient installés (ce qui n'est pas le cas lors de l'installation par défaut d'AutoCAD).
  9. (gile)

    Imbrication de bloc

    Si, mais modifier les propriétés de la référence de bloc imbriquée, c'est modifier la définition du bloc parent donc de toutes les références à ce bloc.
  10. (gile)

    débutant en LISP

    Salut, Je suis d'accord avec Luna, si tu veux apprendre évite d'utiliser des routines écrites par d'autre, surtout que souvent, c'est une fausse bonne idée. Pour pouvoir utiliser SSOC, tu es obligé d'utiliser OUTLINE pour le contour du bloc. Or, ton bloc est un simple rectangle de 287 x 200 à l'échelle 1, donc le contour d'une référence est un rectangle dont le coin inférieur gauche est le point d'insertion et le point supérieur droit est le point : insertionX + 287 * echelleX, insertionY + 200 * insertionY. Tu as là 2 points pour faire une sélection par capture (ssget "_C" ...) ou par fenêtre (ssget "_W" ...) et même faire le zoom avant la sélection. Ensuite pour créer tes fichiers, tu peux simplement appeler la commande WBLOCK en lui passant le jeu de sélection. En résumé, l'algorithme serait: Sélection des blocs "sous-bloc cartouche" Pour chaque bloc sélectionné : Récupération du point d'insertion Calcul du point supérieur droit Zoom fenêtre avec ces 2 points (pour assurer la sélection) Sélection à l'aide de ces deux points Wbloc
  11. Je viens d'avoir un échange de mails avec Terry Miller, son site a juste changé d'adresse : https://autolisp-exchange.com/
  12. (gile)

    Imbrication de bloc

    Salut, On ne peut pas modifier les propriétés dynamiques (ni les valeurs d'attribut) dans les blocs imbriqués pour la même raison qu'on ne peut pas modifier les entités composant une référence de bloc sans changer sa définition.. Autrement dit, les propriétés dynamiques (ou les valeurs d'attribut) ne sont accessibles que pour le bloc de premier niveau.
  13. Salut, Je ne vais pas enfoncer une porte ouverte en disant que le langage DCL est (très) limité. Mais, il me semble que, quelque soit la technique utilisée (ObjectDCL, OpenDCL, Windows Forms, WPF, ...), une fois l'interface affichée, on ne peut pas ajouter ou supprimer de composants. Par contre avec Windows Forms, WPF et probablement Object/OpenDCL on peut modifier l'apparence de la boite de dialogue : afficher ou masquer des composants, modifier sa taille, etc. PS: contrairement à ObjectDCL, OpenDCL est gratuit. Les deux projets sont issus du même projet (l'ancien ObjectDCL) et on évolué chacun de leur côté depuis. D'après ce dont je me souvient de l'époque où je les avais un peu utilisé, il s'agit plus que d'une simple facilité pour créer des boites de dialogue par glisser/déposer (ce qui reste vrai) mais les deux offrent la possibilité de de faire des interfaces utilisateur plus riche et pas uniquement modales comme des palettes. Si Tramber passe par là, il pourra confirmer ou infirmer.
  14. Salut, Tu ne peux pas utiliser le fichier Excel exporté par AutoCAD pour ré-importer les valeurs d'attributs. Tu peux ouvrir le fichier texte généré par ATTOUT dans Excel pour le modifier. Tu peux utiliser ExcelAttribute qui fonctionne comme ATTOUT/ATTIN mais en utilisant directement un fichier Excel.
  15. Je n'ai rien contre Lee Mac (on a souvent joué ensemble lors de Challenges sur TheSwamp), mais il existe aussi des choses en français dont Introduction à AutoLISP et da-code le site de didier qui expliquent le fonctionnement de getkword et leurs auteurs sont (pour l'instant) toujours actifs ici pour un complément d'information.
  16. J'avais effectivement noté des problèmes avec la rotation du mtexte, puis après avoir redémarré AutoCAD ça ne se reproduisait plus. Je viens de refaire des essais et il semble bien qu'il y ait un bug avec l'objet MTEXT. Si on trace la rotation en faisant un pas à pas tout semble correct : (angtos (vla-get-Rotation txt)) renvoie la bonne valeur, mais une fois le bloc inséré, la rotation a changé (pas toujours) et si on ouvre la définition du bloc dans l'éditeur de bloc, on voit bien que la propriété rotation du mtexte a changé. J'ai essayé avec un texte simple à la place du texte multiligne et tout fonctionne comme attendu (comme quoi les dinosaures qui recommandaient d'utiliser des textes simples plutôt que des textes multiligne n'avaient pas tort). En conclusion, je dirais que les textes multilignes ne semble pas d'une robustesse à toute épreuve en 3D et que la fonction vla-InsertBlock n'a pas un fonctionnement cohérent suivant que le plan XY du SCU courant soit pas parallèle au plan XY du SCG ou pas.
  17. J'ai un peu regardé cette histoire. quelques petites corrections à ton code. - transformer les deux points (p1 et p2) en SCG avant de calculer la normale du plan vertical qui les contient - définir l'angle dans ce plan - faire la rotation du mtext après avoir changé sa normale - transformer le centre du cercle définit dans le SCO en SCG Sinon, j'ai dit une bêtise. vla-insertblock prend en compte la normale (axe Z) du scu courant, il faut donc forcer la normale du bloc inséré en (0 0 1) et transformer le point d'insertion. (defun c:eee (/ ANG BLOC_FINAL NOM-BLOC-FINAL P1 P1SCG P2 P2SCG TXT VECT-P1P2 VECT-Z CIRCLE PLAN-P1 ) (setq p1 (getpoint) p2 (getpoint p1) p1scg (trans p1 1 0) p2scg (trans p2 1 0) vect-p1p2 (mapcar '- p2scg p1scg) vect-Z '(0.0 0.0 1.0) ) (setq plan-p1.p2.Z (list (- (* (cadr vect-p1p2) (caddr vect-Z)) (* (caddr vect-p1p2) (cadr vect-Z))) (- (* (caddr vect-p1p2) (car vect-Z)) (* (car vect-p1p2) (caddr vect-Z))) (- (* (car vect-p1p2) (cadr vect-Z)) (* (cadr vect-p1p2) (car vect-Z))) ) ang (angle (trans p1scg 0 plan-p1.p2.Z) (trans p2scg 0 plan-p1.p2.Z)) ) ;; Crée Bloc-final dans collection (setq Nom-Bloc-final (strcat "Bloc-final" (itoa (fix (* (getvar "TDUSRTIMER") 10000000)))) Bloc_final (vla-add (vla-get-Blocks (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point '(0 0 0)) Nom-Bloc-final ) ) ;; Ecrit Texte dans Bloc-Final (setq txt (vla-AddMText Bloc_final (vlax-3d-point '(0 0 0)) 0.0 "<---- SENS P1 P2----->")) ;; bascule txt sur le plan p1/p2/sens Z SCG (vla-put-normal txt (vlax-3d-point plan-p1.p2.Z)) ;; rotation txt vers p2 (vla-put-rotation txt ang) ;; cercle dans Bloc-Final (setq circle (vla-AddCircle Bloc_final (vlax-3d-point (mapcar '(lambda (x) (/ x 2.)) vect-p1p2)) ;;(vlax-3d-point (trans (polar '(0 0 0) ang (/ (distance p1 p2) 2)) plan-p1.p2.Z 0)) (/ (distance p1 p2) 2) ) ) ;; bascule cercle sur le plan p1/p2/sens Z SCG (vla-put-normal circle (vlax-3d-point plan-p1.p2.Z)) (vla-put-Normal (vla-insertblock (vla-get-ModelSpace (vla-get-activedocument (vlax-get-acad-object))) (vlax-3d-point (trans p1scg (trans '(0 0 1) 1 0 T) 0)) Nom-Bloc-final 1 1 1 0 ) (vlax-3d-point '(0 0 1)) ) ) Le faire avec entmake me semble plus simple et plus fiable. (defun c:aaa (/ ANG BLOC_FINAL NOM-BLOC-FINAL P1 P1SCG P2 P2SCG TXT VECT-P1P2 VECT-Z CIRCLE PLAN-P1 ) (setq p1 (getpoint) p2 (getpoint p1) p1scg (trans p1 1 0) p2scg (trans p2 1 0) vect-p1p2 (mapcar '- p2scg p1scg) vect-Z '(0.0 0.0 1.0) ) (setq plan-p1.p2.Z (list (- (* (cadr vect-p1p2) (caddr vect-Z)) (* (caddr vect-p1p2) (cadr vect-Z))) (- (* (caddr vect-p1p2) (car vect-Z)) (* (car vect-p1p2) (caddr vect-Z))) (- (* (car vect-p1p2) (cadr vect-Z)) (* (cadr vect-p1p2) (car vect-Z))) ) ang (angle (trans p1scg 0 plan-p1.p2.Z) (trans p2scg 0 plan-p1.p2.Z)) ) ;; Crée Bloc-final dans collection (setq Nom-Bloc-final (strcat "Bloc-final" (itoa (fix (* (getvar "TDUSRTIMER") 10000000))))) (entmake (list '(0 . "BLOCK") (cons 2 Nom-Bloc-final) '(70 . 0) '(10 0 0 0))) (entmake (list '(0 . "MTEXT") '(100 . "AcDbEntity") '(100 . "AcDbMText") '(10 0 0 0) '(1 . "<---- SENS P1 P2----->") (cons 210 plan-p1.p2.Z) (cons 50 ang) ) ) (entmake (list '(0 . "CIRCLE") (cons 10 (trans (mapcar '(lambda (x) (/ x 2.)) vect-p1p2) 0 plan-p1.p2.Z)) (cons 40 (/ (distance p1 p2) 2)) (cons 210 plan-p1.p2.Z) ) ) (entmake '((0 . "ENDBLK"))) (entmake (list '(0 . "INSERT") (cons 2 Nom-Bloc-final) (cons 10 p1scg))) )
  18. (gile)

    entpoint ?

    Tu peux aussi utiliser nentselp.
  19. Salut et bienvenue. Tu peux utiliser les commandes ATTOUT et ATTIN des Express Tools. Ces commandes utilisent un fichier CSV que tu peux ouvrir et modifier dans Excel. Sinon, tu peux essayer ExcelAttribute sur cette page. La procédure : télécharger ExcelAttribute_19.zip (ou ExcelAttribute.zip si tu utilises une version d'AutoCAD antérieure à 2013) ; débloquer le fichier ZIP (clic droit > Propriétés > Général > Débloquer) ; extraire les 2 DLLs dans le même répertoire ; depuis AutoCAD, charger l'application avec la commande NETLOAD ; lancer la commande EATT pour exporter les attributs et IATT pour les importer.
  20. En bref, en programmation, on ne doit se préoccuper du SCU courant que dans les cas suivants : - l'acquisition de données (fonctions get*, entsel, etc.) qui renvoient toujours les points en coordonnées SCU ; - l'appel aux commandes (command, command-s, vl-cmdf, vla-SendComand) qui se réfèrent toujours au SCU courant. Avec les fonctions vla* ou entmake, on utilise toujours le SCG (ou son équivalent dans des définitions de bloc) ou le SCO pour les polylignes (LWPOLYLINE) ainsi que pour d'autres entités 2d en ce qui concerne entmake.
  21. Salut, (setq bloc (vla-add (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) "bloc")) ajoute une définition de bloc à la table des bloc nommée "bloc". (vla-AddLine bloc (vlax-3d-point '(0 0 0)) (vlax-3d-point '(1 2 3))) ajoute une ligne dans la définition du bloc du point (0 0 0) au point (1 2 3). Ces points étant définis dans le système de coordonnées de la définition du bloc. Je ne comprends pas ce que viens faire le SCU là dedans. les SCU ne concerne que les espace courants.
  22. Une autre qui dessine un parallélogramme. (defun c:Paral3P3D (/ pt1 pt2 pt3 pt4 pta ptb ptc) (setq pt1 (getpoint "\n1 - First point of 3D parallelogram 2D PLine: ") pt2 (getpoint pt1 "\n2 - Second point of 3D parallelogram 2D PLine: ") pt3 (getpoint pt2 "\n3 - Third point of 3D parallelogram 2D PLine: ") pta (trans pt1 1 0) ; to World coordinates ptb (trans pt2 1 0) ptc (trans pt3 1 0) ) (command "_.ucs" "_new" "_3point" "_non" pt1 "_non" pt2 "_non" pt3) (setq pt1 (trans pta 0 1) pt2 (trans ptb 0 1) pt3 (trans ptc 0 1) pt4 (polar pt1 (angle pt2 pt3) (distance pt2 pt3)) ) (command "_.pline" "_non" pt1 "_non" pt2 "_non" pt3 "_non" pt4 "_c" "_.ucs" "_previous" ) (princ) )
  23. Avec ObjectARX ou .NET, on peut définir des fonctions LISP qui, comme les fonctions "natives" peuvent avoir des arguments optionnels. Il y a quelques temps j'avais commis quelques fonctions LISP (CF LISP Extension sur cette page) dont une pour forcer les propriétés des calques par fenêtre. La fonction accepte de 3 à 6 arguments, le troisième (couleur) peut être un entier (code ACI), une liste de 3 entiers (Rouge Vert Bleu) ou une liste de 2 chaînes pour les couleurs nommées (nom carnet) Extarit de l'aide: La quasi totalité du code consiste à vérifier le nombre et le type des arguments (CF tous les : throw new *Exception;). // (gc-VpLayerOverride viewportEname layerName colorIndex [lineType [lineWeight [plotStyle]]]) // (gc-VpLayerOverride viewportEname layerName RGBlist [lineType [lineWeight [plotStyle]]]) // (gc-VpLayerOverride viewportEname layerName colorBookName [lineType [lineWeight [plotStyle]]]) [LispFunction("gc-VpLayerOverride")] public TypedValue VpLayerOverride(ResultBuffer resbuf) { int i = 0; try { if (Application.Version.Major < 17 && Application.Version.Minor < 1) { throw new LispException("only available for AutoCAD 2008 and later"); } Document doc = AcAp.DocumentManager.MdiActiveDocument; Database db = doc.Database; ObjectId vpId; string layer; if (resbuf == null) { throw new TooFewArgsException(); } TypedValue[] args = resbuf.AsArray(); if (args.Length < 3) { throw new TooFewArgsException(); } if (args.Length > 9) { throw new TooManyArgsException(); } if (args[i].TypeCode == (short)LispDataType.ObjectId) vpId = (ObjectId)args[i++].Value; else { throw new ArgumentTypeException("lentityp", args[i]); } if (args[i].TypeCode == (short)LispDataType.Text) layer = (string)args[i++].Value; else { throw new ArgumentTypeException("stringp", args[i]); } using (Transaction tr = db.TransactionManager.StartTransaction()) { Viewport vp = tr.GetObject(vpId, OpenMode.ForRead) as Viewport; if (vp == null) { throw new LispException("bad entity type"); } LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead); if (!lt.Has(layer)) { throw new LispException("unknown layer"); } LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(lt[layer], OpenMode.ForWrite); LayerViewportProperties lvp = ltr.GetViewportOverrides(vpId); if (args[i].TypeCode != (short)LispDataType.Nil) { if (args[i].TypeCode == (short)LispDataType.Int16) { short colorIndex = (short)args[i++].Value; if (colorIndex < 0 || colorIndex > 256) { throw new LispException("incorrect color index"); } switch (colorIndex) { case 0: lvp.Color = Color.FromColorIndex(ColorMethod.ByBlock, 0); break; case 256: lvp.Color = Color.FromColorIndex(ColorMethod.ByLayer, 256); break; default: lvp.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex); break; } } else if (args[i].TypeCode == (short)LispDataType.Point3d) { Point3d pt = (Point3d)args[i++].Value; try { byte red = (byte)pt.X; byte green = (byte)pt.Y; byte blue = (byte)pt.Z; lvp.Color = Color.FromRgb(red, green, blue); } catch { throw new LispException("incorrect RGB values"); } } else if (args[i].TypeCode == (short)LispDataType.ListBegin) { if (args[i + 1].TypeCode == (short)LispDataType.Text) { string colorName = (string)args[++i].Value; if (args[++i].TypeCode != (short)LispDataType.Text) { throw new ArgumentTypeException("stringp", args[i]); } string bookName = (string)args[i].Value; try { lvp.Color = Color.FromNames(colorName, bookName); i += 2; } catch { throw new LispException("unknown color name"); } } else { throw new ArgumentTypeException("fixnump or stringp", args[i + 1]); } } else { throw new ArgumentTypeException("fixnump or listp", args[i]); } } if (args.Length > i + 3) { throw new TooManyArgsException(); } if (args.Length > i) { if (args[i].TypeCode != (short)LispDataType.Nil) { if (args[i].TypeCode != (short)LispDataType.Text) { throw new ArgumentTypeException("stringp", args[i]); } string lType = (string)args[i++].Value; LinetypeTable ltt = (LinetypeTable)tr.GetObject(db.LinetypeTableId, OpenMode.ForRead); if (!ltt.Has(lType)) { throw new LispException("unknown line type"); } lvp.LinetypeObjectId = ltt[lType]; } if (args.Length > i) { if (args[i].TypeCode != (short)LispDataType.Nil) { if (args[i].TypeCode != (short)LispDataType.Int16) { throw new ArgumentTypeException("numberp", args[i]); } short lWeight = (short)args[i++].Value; try { lvp.LineWeight = (LineWeight)lWeight; } catch { throw new LispException("incorrect line weight"); } } if (args.Length > i) { if (args[i].TypeCode != (short)LispDataType.Nil && (short)AcAp.GetSystemVariable("pstylemode") == 0) { if (args[i].TypeCode != (short)LispDataType.Text) { throw new ArgumentTypeException("stringp", args[i]); } string plotStyle = (string)args[i].Value; try { lvp.PlotStyleName = plotStyle; } catch { throw new LispException("unknown plot style"); } } } } } object lrc = AcAp.GetSystemVariable("layoutregenctl"); AcAp.SetSystemVariable("layoutregenctl", 0); vp.UpgradeOpen(); vp.On = false; vp.On = true; AcAp.SetSystemVariable("layoutregenctl", lrc); tr.Commit(); } return new TypedValue((short)LispDataType.T_atom); } catch (LispException ex) { AcAp.ShowAlertDialog(ex.Message); throw; } catch (System.Exception ex) { AcAp.ShowAlertDialog(ex.Message); throw; } }
  24. (defun c:Rect3P3D (/ pt1 pt2 pt3 pt4 pta ptb ptc) (setq pt1 (getpoint "\n1 - First point of 3D rectangle 2D PLine: ") pt2 (getpoint pt1 "\n2 - Second point of 3D rectangle 2D PLine: ") pt3 (getpoint pt2 "\n3 - Third point of 3D rectangle 2D PLine: ") pta (trans pt1 1 0) ; to World coordinates ptb (trans pt2 1 0) ptc (trans pt3 1 0) ) (command "_.ucs" "_new" "_3point" "_non" pt1 "_non" pt2 "_non" pt3) (setq pt1 (trans pta 0 1) pt2 (trans ptb 0 1) pt3 (trans ptc 0 1) pt3 (list (car pt2) (cadr pt3) 0.) pt4 (list (car pt1) (cadr pt3) 0.) ) (command "_.pline" "_non" pt1 "_non" pt2 "_non" pt3 "_non" pt4 "_c" "_.ucs" "_previous" ) (princ) )
  25. À un autre dialecte LISP appelé Emacs LISP. Depuis 1958 et l'invention du LISP nombre de dialectes ont vu le jour et certains sont toujours utilisés comme Common LISP, Emacs LISP, Scheme, Clojure et bien sûr AutoLISP.
×
×
  • 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é