-
Compteur de contenus
5 029 -
Inscription
-
Dernière visite
-
Jours gagnés
56
Type de contenu
Profils
Forums
Calendrier
Blogs
Tout ce qui a été posté par bonuscad
-
Bonjour, Avec des solide3d, des régions etc..., c'est vrai que je ne connais aucune procédure qui fonctionne vraiment pour aplatir tout ça. Ce que j'ai pu faire et qui fonctionne (mais ce n'est pas le top), mais solution de pis aller quand rien d'autres ne fonctionne. Configurer un traceur DXB (par ajout traceur) Faire une impression dans la/les vue(s) qui t’intéresse d'ans l'espace objet à l'échelle 1. Dans un nouveau dessin, tu utilise la commande CHARGDXB (_DXBIN) et tu obtiendra des entités (simples) aplaties, après tu perds tous les calques, objets complexes (blocs et consorts) ce ne sont plus que des segments (instructions vectoriel de traçage) Mais ça fonctionne, quand pas d'autres solutions. Courage
-
En reprenant ton exemple précédent, en plus du nom correct, il faut bien mettre aussi *U (mais précédé d'une apostrophe inverse) exemple: (ssget "_X" (list '(0 . "INSERT") '(2 . "00_CPR_LD_LFA,`*U*")))En effet même si à l'insertion du bloc dynamique avec ses valeurs paramétriques par défaut à bien son nom, dès l'édition de l'insertion avec attribution d'autres valeurs paramétrées, celui-ci va changer de nom (par contre dans la palette de propriété, c'est toujours l'effectivename qui s'affiche) Pour t'en assurer fais un (entget (car (entsel))) sur un bloc dynamique où tu as appliqué d'autre valeurs paramétrique que celle par défaut et regarde ce qui associé au code DXF 2. Ah les blocs dynamiques...!
-
Convertir version autocad SANS DWG TRUEVIEW
bonuscad a répondu à un(e) sujet de mathieu dans AutoCAD 2017
Oui normal, au moins je sais maintenant que la première partie fonctionne. Quand ça plante obtiens tu des fichiers dans ? (regarder avec l'explorateur avec l'option afficher les dossiers cachés active): "C:\Users\mbourdajaud\AppData\Roaming\Autodesk\Ta version d'Autocad\RXX.X\fra\support\" tu devrais avoir un fichier update.scr et un fichier update.bat Si oui, ils contiennent des instructions ou ils sont vides? -
Convertir version autocad SANS DWG TRUEVIEW
bonuscad a répondu à un(e) sujet de mathieu dans AutoCAD 2017
Je ne vois pas vraiment, car pour moi ça fonctionne. Essayes simplement la première partie pour voir le retour. (copier-coller en ligne commande) ((lambda ( / f_exe ShlObj Folder FldObj Out_Fld) (vl-load-com) (setq f_exe (findfile "accoreconsole.exe")) (setq ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application") Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0) ) (vlax-release-object ShlObj) (if Folder (progn (setq FldObj (vlax-get-property Folder 'Self) Out_Fld (vlax-get-property FldObj 'Path) ) (vlax-release-object Folder) (vlax-release-object FldObj) ) ) (princ Out_Fld) (prin1) )) -
[Résolu] Suppression des 6 caractères à gauche d'un string
bonuscad a répondu à un(e) sujet de DenisHen dans Débuter en LISP
Double ton caractère \, ne pas oublier que l'antislash est un caractère spécial AIDE donc (vl-string-subst "" "\\pxqc;" Text) devrait aller mieux -
Convertir version autocad SANS DWG TRUEVIEW
bonuscad a répondu à un(e) sujet de mathieu dans AutoCAD 2017
Je t'invite déjà peut être à supprimer ou commenter cette ligne ; (write-line "((lambda ( / ) (foreach p (entget (namedobjdict)) (if (and (= 3 (car p)) (or (wcmatch (cdr p) \"COVA_*\") (wcmatch (cdr p) \"AEC_*\"))) (dictremove (namedobjdict) (cdr p))))))" file_scr) Je l'ai mis en exemple pour monter que du lisp était applicable, mais si tu utilise Covadis ou des modules AEC, il n'est peut être pas opportun de virer ces dictionnaires: risques de pertes de données qui rendront les fichiers inexploitables avec les applis correspondantes. Pour l'option _LT2010, c'est correct, ne dois pas causer de soucis... Un truc que j'ai remarqué depuis est que: Le dossier que l'on crée, ainsi que le chemin, NE DOIVENT PAS CONTENIR D'ESPACE dans la nomination. C'est peut être l'explication de ton souci: "; erreur: type d'argument incorrect: stringp nil" -
Une insertion de bloc n'a pas les propriétés curviligne d'une entité filaire, donc (vlax-curve-getClosestPointTo ne fonctionne pas! Ce que tu peux tenter et de remplacer en ligne 33: (if (equal (distance (vlax-curve-getClosestPointTo obj_spl pt_ins T) pt_ins) 0.0 tol_dist) par (if (equal (distance (vlax-get obj_spl 'InsertionPoint) pt_ins) 0.0 tol_dist) Moi aussi
-
Comme pour lecrabe, je te laisse faire la micro-modif, à savoir remplacer: (setq js_spl (ssget (list .... par (setq js_spl (ssget "_X" (list .... Pas trop compliqué!
-
Convertir version autocad SANS DWG TRUEVIEW
bonuscad a répondu à un(e) sujet de mathieu dans AutoCAD 2017
Tu lances Autocad qui vas ouvrir un nouveau dessin (dessin1.dwg), tu copies-colles le code directement en ligne de commande et il va te demander le dossier à traiter. C'est tout! Il ne traite pas les sous dossiers Peut être voir avec la proposition de (gile) avec son zip, il me semble qu'il pouvait traiter les sous dossiers Voir son sujet -
Je resterais prudent sur le rétropédalage. Je m'explique; depuis window10 la licence est liés à ton matériel (carte mère). Donc une fois installé les mise à jours te sont délivré si ta licence est valide.Tu reviens à Seven, je ne suis pas certain que les mises à jour te soit délivré car pour Crosoft tu es sous licence W10 (et qu'ils poussent dans cette migration) et qu'ils risquent d'invalider ta licence W7. Donc oui, tu pourra remettre ton image, mais pas sur que tu puisse obtenir les prochaines mises à jour. Mais je peux me tromper, je ne sais pas comment ils gèrent ces licences ayant migré...
-
Convertir version autocad SANS DWG TRUEVIEW
bonuscad a répondu à un(e) sujet de mathieu dans AutoCAD 2017
Bon je sais, ce sujet date de 2 ans. Mais étant confronté à ce problème, et le convertisseur DWF TrueView ne me convenant pas: il me détruit les Données d'Objets de MAP Je me suis adapté (depuis un post de (gile)) une procédure qui utilise accoreconsole.exe qui je le rappelle permet de lancer Autocad sans utiliser l'interface graphique. Voici le lisp que je me suis confectionné (à adapter selon les besoins),ici tel quel: * il enlève les dictionnaires des applications AEC et Covadis * contrôle les erreurs du fichier * purge les applications inutiles * purge les objets non utilisés * sauve le fichier au format LT2013 Avant d'utiliser le code dans un nouveau dessin dans autocad en mode graphique, copier tout les fichiers dans un dossier réservé à cette conversion. ((lambda ( / f_exe ShlObj Folder FldObj Out_Fld file_scr file_bat) (vl-load-com) (setq f_exe (findfile "accoreconsole.exe")) (setq ShlObj (vla-getinterfaceobject (vlax-get-acad-object) "Shell.Application") Folder (vlax-invoke-method ShlObj 'BrowseForFolder 0 "" 0) ) (vlax-release-object ShlObj) (if Folder (progn (setq FldObj (vlax-get-property Folder 'Self) Out_Fld (vlax-get-property FldObj 'Path) ) (vlax-release-object Folder) (vlax-release-object FldObj) ) ) (setq file_scr (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\update.scr") "w")) (write-line "((lambda ( / ) (foreach p (entget (namedobjdict)) (if (and (= 3 (car p)) (or (wcmatch (cdr p) \"COVA_*\") (wcmatch (cdr p) \"AEC_*\"))) (dictremove (namedobjdict) (cdr p))))))" file_scr) (write-line "(command \"_.audit\" \"_Yes\")" file_scr) (write-line "(command \"_.-purge\" \"_Regapps\" \"*\" \"_No\")" file_scr) (write-line "(command \"_.-purge\" \"_All\" \"*\" \"_No\")" file_scr) (write-line "(command \"_.saveas\" \"_LT2013\" \"\" \"_Yes\")" file_scr) (close file_scr) (setq file_bat (open (strcat (getvar "ROAMABLEROOTPREFIX") "support\\update.bat") "w")) (write-line (eval (read "(strcat \"set accoreexe=\" \"\\\"\" f_exe \"\\\"\")")) file_bat) (write-line (eval (read "(strcat \"set source=\" \"\\\"\" Out_Fld \"\\\"\")")) file_bat) (write-line (eval (read "(strcat \"set script=\" \"\\\"\" (getvar \"ROAMABLEROOTPREFIX\") \"support\\\\update.scr\" \"\\\"\")")) file_bat) (write-line "FOR /f \"delims=\" %%f IN ('dir /b \"%source%\\\*.dwg\"') DO %accoreexe% /i \"%source%\\%%f\" /s %script%" file_bat) (close file_bat) (startapp (strcat (getvar "ROAMABLEROOTPREFIX") "support\\update.bat")) (princ"\Travail en cours d'exécution") (prin1) )) Une fois le terminal de commande de windows fermé, le traitement est terminé. Procédure réaliser sous un Autocad Map 2019 sous Windows10 pro 64 bit avec succès, sous d'autre environnement et version, cela devrait aller aussi. NB: Comme vous pouvez le voir des procédures en lisp peuvent être intégré dans le script, du moment que des entrées utilisateurs ne sont pas nécessaire -
Je pense que oui car (vlax-curve-getClosestPointTo) fonctionne aussi pour ce type d'entité. Comme tu es le roi de la micro-modif, je te laisse utiliser tes pinces N'oublie pas quand même l'adaptation du calque (8 . "....") ou le mettre en commentaire. NB: pour des polylignes sans arcs, je pense que l'utilisation de "trajet" serais plus adaptée et plus rapide. Cette routine dans un gros fichier peut avoir un process un peu long (pas testé), mais l'avantage est que tu peut donner une tolérance.
-
Alors voici (avec ce que j'ai compris), avec possibilité de donner une distance de tolérance pour la proximité aux splines. NB: Tu pourras accélérer le code si à la ligne 23 tu force avec des noms de blocs car dans l'état il prend TOUS les blocs Exemple: js_blk (ssget "_X" '((0 . "INSERT") (2 . "TOTO,TITI,TATA"))) ; les caractères génériques sont possible; voir l'aide de (wcmatch) (defun C:TOPHEUR ( / js_spl ss_blk tol_dist n_spl obj_spl js_blk n_blk ent_blk obj_blk pt_ins) (princ "\nSelectionner des Splines: ") (setq js_spl (ssget (list '(0 . "SPLINE") '(8 . "SPLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ss_blk (ssadd) ) (cond (js_spl (initget 4) (setq tol_dist (getdist "\nDistance de tolérance de recherche? <0.0>: ")) (if (not tol_dist) (setq tol_dist 1E-8)) (repeat (setq n_spl (sslength js_spl)) (setq obj_spl (vlax-ename->vla-object (ssname js_spl (setq n_spl (1- n_spl)))) js_blk (ssget "_X" '((0 . "INSERT"))) ) (cond (js_blk (repeat (setq n_blk (sslength js_blk)) (setq ent_blk (ssname js_blk (setq n_blk (1- n_blk))) obj_blk (vlax-ename->vla-object ent_blk) pt_ins (vlax-get obj_blk 'InsertionPoint) ) (if (equal (distance (vlax-curve-getClosestPointTo obj_spl pt_ins T) pt_ins) 0.0 tol_dist) (setq ss_blk (ssadd ent_blk ss_blk)) ) ) ) ) ) ) (T (princ "\nAucune spline sélectionnée.")) ) (if (not (zerop (sslength ss_blk))) (sssetfirst nil ss_blk) (princ "\nPas de blocs trouvés.") ) (prin1) ) Pour la vérification, sur le même principe (defun C:TOPHEUR-TEST ( / js_spl ss_spl tol_dist n_spl ent_spl obj_spl js_blk n_blk ent_blk obj_blk pt_ins) (princ "\nSelectionner des Splines: ") (setq js_spl (ssget (list '(0 . "SPLINE") '(8 . "SPLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ss_spl (ssadd) ) (cond (js_spl (initget 4) (setq tol_dist (getdist "\nDistance de tolérance de recherche? <0.0>: ")) (if (not tol_dist) (setq tol_dist 1E-8)) (repeat (setq n_spl (sslength js_spl)) (setq ent_spl (ssname js_spl (setq n_spl (1- n_spl))) obj_spl (vlax-ename->vla-object ent_spl) js_blk (ssget "_X" '((0 . "INSERT") (2 . "INFO_SP"))) ) (cond (js_blk (repeat (setq n_blk (sslength js_blk)) (setq ent_blk (ssname js_blk (setq n_blk (1- n_blk))) obj_blk (vlax-ename->vla-object ent_blk) pt_ins (vlax-get obj_blk 'InsertionPoint) ) (if (equal (distance (vlax-curve-getClosestPointTo obj_spl pt_ins T) pt_ins) 0.0 tol_dist) (setq ss_spl (ssadd ent_spl ss_spl)) ) ) ) ) ) ) (T (princ "\nAucune spline sélectionnée.")) ) (if (not (zerop (sslength ss_spl))) (sssetfirst nil ss_spl) (princ "\nPas de spline trouvés.") ) (prin1) )
-
Prendre toutes les splines du calque SPLINE n'est pas un problème. Ce que fait le code que j'ai proposé? Il sélectionne tous les blocs du dessin et un par un il vérifie que le POINT D'INSERTION correspond à la projection de celui-ci sur la spline à un fuzz d’imprécision près. (vlax-curve-getClosestPointTo), si c'est le cas le bloc et ajouté au jeu de sélection (ssadd). Bon j'avoue que si la spline n'est pas sur le point d'insertion du bloc (mais qu'elle le touche quand même) ça ne sélectionne pas le bloc. Ça je ne comprends pas bien, cela veut-il dire que le point d'insertion n'est pas forcément sur la spline mais que sa boite d'encombrement coupe celle-ci? (boundingbox) Si c'est le cas, effectivement le code n'a pas été conçu dans cette optique, ça se complique... Donc des précisions seraient le bienvenue, et même un petit extrait du dessin (_wblock) pour mettre au point.
-
Bonjour, On pourrait penser utiliser la sélection en mode trajet (_fence), mais j'ai peur qu'avec les spline (surtout les vraies et non des polylignes splinées), cela ne fonctionne pas. Donc avec de vraies SPLINE, je procéderais comme suit (à voir s'il ne faut pas ajuster le fuzz de la fonction equal, ici -1E8) A tester ((lambda ( / js obj_spl ss js_blk n ent obj_vlax pt_ins) (princ "\nChoix d'une spline: ") (while (null (setq js (ssget "_+.:E:S" (list '(0 . "SPLINE") (cons 67 (if (eq (getvar "CVPORT") 1) 1 0)) (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model")) ) ) ) ) (princ "\nN'est pas une spline") ) (setq obj_spl (vlax-ename->vla-object (ssname js 0))) (setq ss (ssadd)) (setq js_blk (ssget "_X" '((0 . "INSERT")))) (cond (js_blk (repeat (setq n (sslength js_blk)) (setq obj_vlax (vlax-ename->vla-object (setq ent (ssname js_blk (setq n (1- n)))))) (setq pt_ins (vlax-get obj_vlax 'InsertionPoint)) (if (equal (distance (vlax-curve-getClosestPointTo obj_spl pt_ins) pt_ins) 0.0 1E-8) (setq ss (ssadd ent ss)) ) ) ) ) (sssetfirst nil ss) (prin1) ))
-
Heureux, si tu peux te coucher plus tôt! Mais à mon avis tu devrais songer à lâcher un peu la bride... Lundi matin est un autre jour!
-
De mémoire car ça fais longtemps que je n'ai plus appliqué ceci, mais il me semble que pour arriver à sélectionner ces blocs anonyme avec (ssget), il faut utiliser l'apostrophe inverse (AltGr+ 7) Donc normalement (ssget '((2 . "`*U*"))) devrait sélectionner ce type de bloc.
-
Bonsoir Denis Je l'avais déjà posté, mais je préfère le remettre car il est possible qu'il ai reçu des modifications depuis. Un développement qui normalement se limite seulement à des entités curvilignes, mais avec une rapidité de traitement supérieur à flatten (qui lui est plus puissant mais plus long) Si tu veux essayer... (defun l-coor2l-pt (lst flag / ) (if lst (cons (list (car lst) (cadr lst) (if flag (+ (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) (caddr lst)) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) (l-coor2l-pt (if flag (cdddr lst) (cddr lst)) flag) ) ) ) (vl-load-com) (defun c:my_project ( / jspl nbr n AcDoc Space UCS save_ucs WCS ent_name indx l_blg l_pt ename id_obj pl_typ index nw_pl) (setq jspl (ssget '((-4 . "<OR") (-4 . "<AND") (0 . "POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (0 . "LWPOLYLINE,LINE,SPLINE,ARC,CIRCLE,ELLIPSE,POINT") (-4 . "OR>")) ) nbr -1 n 0 ) (cond (jspl (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)) Space (if (eq (getvar "CVPORT") 1) (vla-get-PaperSpace AcDoc) (vla-get-ModelSpace AcDoc) ) UCS (vla-get-UserCoordinateSystems AcDoc) save_ucs (vla-add UCS (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point (getvar "UCSXDIR")) (vlax-3d-point (getvar "UCSYDIR")) "CURRENT_UCS" ) ) (vla-put-Origin save_ucs (vlax-3d-point (getvar "UCSORG"))) (vla-StartUndoMark AcDoc) (setq WCS (vla-add UCS (vlax-3d-Point '(0.0 0.0 0.0)) (vlax-3d-Point '(1.0 0.0 0.0)) (vlax-3d-Point '(0.0 1.0 0.0)) "TEMP_WCS")) (vla-put-activeUCS AcDoc WCS) (repeat (sslength jspl) (setq ent_name (ssname jspl (setq nbr (1+ nbr))) indx -1 l_blg nil l_pt nil ename (vlax-ename->vla-object ent_name) id_obj (vla-get-ObjectName ename) ) (cond ((member id_obj '("AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline")) (setq pl_typ (if (vlax-property-available-p ename 'Type) (vlax-get ename 'Type))) (if (member id_obj '("AcDbPolyline" "AcDb2dPolyline")) (if (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (progn (repeat (fix (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename (setq indx (1+ indx))) l_pt) index (float indx)) (if (or (eq pl_typ 1) (if (< pl_typ 3) (not (zerop (vla-GetBulge ename indx))))) (while (eq indx (fix (+ 0.01 index))) (setq l_pt (cons (vlax-curve-GetPointAtParam ename (setq index (+ 0.01 index))) l_pt)) ) ) ) (setq l_pt (cons (vlax-curve-getEndPoint ename) l_pt)) ) (setq l_pt (mapcar '(lambda (x) (trans (list (car x) (cadr x) (- ;+ (if (eq id_obj "AcDbPolyline") (caddr x) 0.0) (if (vlax-property-available-p ename 'Elevation) (vlax-get ename 'Elevation) 0.0) ) ) ent_name 0 ) ) (l-coor2l-pt (vlax-get ename 'Coordinates) (eq id_obj "AcDb2dPolyline")) ) ) ) (setq l_pt (l-coor2l-pt (vlax-get ename 'Coordinates) T)) ) (if (eq (vla-get-ObjectName ename) "AcDbPolyline") (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) (setq nw_pl (vlax-invoke Space 'AddPolyline (apply 'append l_pt))) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) (if (vlax-property-available-p ename 'Type) (progn (setq pl_typ (if (eq (vla-get-ObjectName ename) "AcDb3dPolyline") (if (zerop (vlax-get ename 'Type)) (vlax-get ename 'Type) (1+ (vlax-get ename 'Type))) (vlax-get ename 'Type) ) ) (if (and (vlax-property-available-p ename 'Normal) (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (eq pl_typ 1)) (vla-put-Type nw_pl 0) (vla-put-Type nw_pl pl_typ) ) ) (if (and (vlax-property-available-p ename 'Normal) (equal (vlax-get ename 'Normal) '(0 0 1) 1E-13)) (progn (repeat (length l_pt) (setq l_blg (cons (vla-GetBulge ename (setq indx (1+ indx))) l_blg))) (foreach el l_blg (vla-SetBulge nw_pl indx el) (setq indx (1- indx))) ) ) ) (vla-put-Closed nw_pl (vlax-get ename 'Closed)) ) ((member id_obj '("AcDbEllipse" "AcDbCircle" "AcDbArc")) (if (not (equal (vlax-get ename 'Normal) '(0.0 0.0 1.0) 1E-13)) (progn (setq index (vlax-curve-getStartParam ename) l_pt (list (vlax-curve-GetPointAtParam ename index)) ) (while (< (setq index (+ 0.01 index)) (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename index) l_pt)) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) ) (cond ((eq id_obj "AcDbEllipse") (setq l_pt (vlax-get ename 'Center) nw_pl (vlax-invoke Space 'AddEllipse (list (car l_pt) (cadr l_pt) 0.0) (list (car (vlax-get ename 'MajorAxis)) (cadr (vlax-get ename 'MajorAxis)) 0.0) (* (caddr (vlax-get ename 'Normal)) (vlax-get ename 'RadiusRatio)) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) (vla-put-StartAngle nw_pl (vlax-get ename 'StartAngle)) (vla-put-StartParameter nw_pl (vlax-get ename 'StartParameter)) (vla-put-EndParameter nw_pl (vlax-get ename 'EndParameter)) ) ((or (eq id_obj "AcDbArc") (eq id_obj "AcDbCircle")) (setq l_pt (vlax-get ename 'Center) nw_pl (if (eq id_obj "AcDbArc") (vlax-invoke Space 'AddArc (list (car l_pt) (cadr l_pt) 0.0) (vlax-get ename 'Radius) (vlax-get ename 'StartAngle) (vlax-get ename 'EndAngle)) (vlax-invoke Space 'AddCircle (list (car l_pt) (cadr l_pt) 0.0) (vlax-get ename 'Radius)) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ) ) ) ((eq id_obj "AcDbSpline") (if (or (zerop (vlax-get ename 'IsPlanar)) (and (not (zerop (vlax-get ename 'IsPlanar))) (not (equal (cdr (assoc 210 (entget ent_name))) '(0.0 0.0 1.0) 1E-13)) ) ) (progn (setq index (vlax-curve-getStartParam ename) l_pt (list (vlax-curve-GetPointAtParam ename index)) ) (while (< (setq index (+ 10.0 index)) (vlax-curve-getEndParam ename)) (setq l_pt (cons (vlax-curve-GetPointAtParam ename index) l_pt)) ) (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) ) (progn (setq l_pt (l-coor2l-pt (if (zerop (vlax-get ename 'NumberOfFitPoints)) (cdddr (reverse (cdddr (reverse (vlax-get ename 'ControlPoints))))) (vlax-get ename 'FitPoints)) T) nw_pl (vlax-invoke Space 'AddSpline (apply 'append (mapcar '(lambda (x y) (list x y 0.0)) (mapcar 'car l_pt) (mapcar 'cadr l_pt))) (list (car (vlax-curve-getFirstDeriv ename 0)) (cadr (vlax-curve-getFirstDeriv ename 0)) 0.0) (list (car (vlax-curve-getFirstDeriv ename (vlax-curve-getEndParam ename))) (cadr (vlax-curve-getFirstDeriv ename (vlax-curve-getEndParam ename))) 0.0) ) l_pt (l-coor2l-pt (vlax-get ename 'ControlPoints) T) ) (vla-put-ControlPoints nw_pl (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (* (length l_pt) 3))) ) (apply 'append (mapcar '(lambda (x y) (list x y 0.0)) (mapcar 'car l_pt) (mapcar 'cadr l_pt))) ) ) ) ) ) ) ((eq id_obj "AcDbLine") (setq nw_pl (vlax-invoke Space 'AddLine (list (car (vlax-get ename 'StartPoint)) (cadr (vlax-get ename 'StartPoint)) 0.0) (list (car (vlax-get ename 'EndPoint)) (cadr (vlax-get ename 'EndPoint)) 0.0) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ((eq id_obj "AcDbPoint") (setq nw_pl (vlax-invoke Space 'AddPoint (list (car (vlax-get ename 'Coordinates)) (cadr (vlax-get ename 'Coordinates)) 0.0) ) ) (vla-put-Normal nw_pl (vlax-3d-point '(0 0 1))) ) ) (vla-put-Layer nw_pl (vla-get-Layer ename)) (vla-delete ename) ) (and save_ucs (vla-put-activeUCS AcDoc save_ucs)) (and WCS (vla-delete WCS) (setq WCS nil)) (vla-EndUndoMark AcDoc) (princ (strcat "\n" (itoa (sslength jspl)) " entité(s) soumises à la commande. TERMINE !" ) ) ) (T (princ "\nPas d'entités conformes sélectionnées..!")) ) (prin1) )
-
Il y avait cette discussion de 2012, peut être que...
-
Programmes LISP non fonctionnels
bonuscad a répondu à un(e) sujet de charlie69 dans LISP et Visual LISP
Bouh on lit pas mes réponse Pourtant il me semble avoir bien expliqué ce qui ne passe pas avec une version récente (option de la commande scu) -
Je peux te proposer ceci, mais tu sera obligé de valider à blanc au message "Sélectionner des objets:" pour que la procédure continue avec tout les objets. Je ne pense pas pouvoir faire mieux; ce sont les contraintes de burst qui m'en empêche. (defun c:chp () (c:burst) (command "_select" "_all" "") (command "CHANGER" "TOUT" "" "P" "CO" "DUCALQUE" "E" "0" "EC" "1" "EP" "0" "H" "0" "") (command "-CALQUE" "CO" "8" "*" "EP" "0" "*" "") (princ) )
-
Programmes LISP non fonctionnels
bonuscad a répondu à un(e) sujet de charlie69 dans LISP et Visual LISP
Bonjour, J'ai eu le temps de charger ton code avant que didier le "sucre", c'est vrai qu'il est un peu imbuvable... Le seul souci que j'ai eu pour arriver à le faire fonctionner sous ma version 2019 et que les options de la commande SCU (_UCS) ont un peu changé. Dans ton code à la ligne 1274 tu avais (command "_ucs" "G") J'ai mis (command "_ucs" "G" "H") et j'ai réussi a le faire fonctionner de bout en bout (en désactivant les accroches objets, autrement c'est n'importe quoi!) L'histoire aussi, c'est que beaucoup de développeurs ont nommé leur procédure talus.lsp (ce qui est logique, j'ai fais la même chose) mais quand on récupère plusieurs développements, bah souvent ça fait des couacs... Donc s'assurer d'avoir une version unique. Cependant je trouve ton code pas particulièrement robuste et l'usage de (command) pénalise la rapidité d’exécution. Si tu le souhaite je te suggère d'essayer ceux-ci en lien -
Comme dirais Aznavour Je vous parle d'un temps Que les moins de vingt ans Ne peuvent pas connaître
-
Merci Aleck sur ces explications beaucoup plus poussées que moi sur Adblock
-
Ma proposition de modification pour intégrer burst: (defun c:chp () (c:burst) (while (not (zerop (getvar "CMDACTIVE"))) (command pause)) (command "CHANGER" "TOUT" "" "P" "CO" "DUCALQUE" "E" "0" "EC" "1" "EP" "0" "H" "0" "") (command "-CALQUE" "CO" "8" "*" "EP" "0" "*" "") (princ) )
