Aller au contenu

Lisps de gile


(gile)

Messages recommandés

On 10/03/2010 at 11:10, (gile) said:

Salut,

 

Il ne s'agirait pas d'une "amélioration" mais d'une toute autre routine le principe étant fondamentalement différent.

 

Regarde le LISP chariot qui devrait faire ce que tu demandes.

Bonjour,

Le lien du LISP Chariot ne semble plus disponible et les versions modifiées que j'ai pu glaner dans les différents échanges semblent ne pas fonctionnés (erreur: structure incorrecte de la liste en entrée). Et en essayant de corriger la structure j'obtiens une erreur sur la partie PointAfter avec le vl-remove-if.

Après c'est des échanges de 2010 donc c'est peut-être normal?

Nota: Je voulais essayer ce lisp car la fonction mesurer ou réseau de trajectoire en courbe ne positionne pas le deuxième point du bloc sur la polyligne.

Lien vers le commentaire
Partager sur d’autres sites

Désolé, je ne comprends pas de quoi tu parles.

1 hour ago, MEIGNENN said:

erreur: structure incorrecte de la liste en entrée

indique en général un problème d’appariement de parenthèses, bien faire attention quand on fait le copier coller.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

@(gile), je remarque que les liens situés dans ton 1er message aboutissent sur une page "File not found". Je précise qu'il s'agit des liens (donc en souligné à la suite du mot "lien : ") et non les liens associés aux commandes en gras. Cf. exemple ci-dessous :

On 15/04/2007 at 19:02, (gile) said:

Je ne sais pas vers quoi ces liens allaient, ni même si le soucis est récent ou non, c'est juste une remarque en passant :3

Bisous,
Luna

 

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

Bonjour @(gile),

J'aurais une petite doléance concernant ton lisp "Edit_Bloc".
Serait-il possible de l'agrémenter afin d'y ajouter la possibilité de mettre la transparence en "Ducalque" ou "Dubloc". Il y a tout sauf cette propriété.

En tout cas, merci pour ce prog qui est fort utile quand on tombe sur des blocs mal monté....

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonjour à toutes et à tous

j'aurai également une "petite" demande concernant ton LISP "Edit_Bloc".

le changement de propriété ce fait pour l'ensemble des objet dans le bloc. Mais serait-il possible de pouvoir faire une sélection des objet dans le bloc à modifier et ne modifier que cette sélection? par exemple dans mon bloc j'ai des objet en vert et en blanc, je ne veux mettre que les objet en blanc en couleur du bloc. 

Merci d'avance pour la réponse et merci pour tous ces excellents programme que tu partage.

  

Le trlalala du nain

  • - Moi c'que j'aime dans les cavernes
  • - C'est qu'on peut allez piocher.
  • - on peut extraire du minerais
  • - Et des pierres pour les tailler
Lien vers le commentaire
Partager sur d’autres sites

@La Lozère @benoitlacroix Je n'ai pas l'intention de modifier Edit_Bloc (comme je l'ai dit précédemment). L'histoire de cette routine a commencé avant l'apparition de l'éditeur de bloc. il me semble que ce que vous demandez est relativement simple à faire via cet éditeur.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @(gile),

Merci de ton retour. Effectivement pour l'instant je fais comme ça. Un des avantages de ta routine est de pouvoir traiter de nombreux blocs différents en même temps. Pratique quand on reçoit un fichier un peu mal foutu.

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Coucou,

Pour celles et ceux que chat intéresse, j'utilise très souvent la fonction (ListBox) de @(gile) mais légèrement remaniée pour récupérer des infos utilisateurs de manière simple. Ce n'est que récemment que je me suis dit que l'on pouvait améliorer la fonction une nouvelle fois en ajoutant un filtre de recherche (= edit_box) à la boîte de dialogue. Cela permet à l'utilisateur de filtrer la liste affichée si celle-ci est un peu longue. Ci-dessous le code remanié de la fonction (ListBox) :

;--- Nom de la fonction		[]-----------------------[] ListBox []-----------------------[]
;--- Date de création		> 15/04/2007
;--- Dernière modification	> 13/12/2021
;--- Auteur(e)			> Luna
;--- Version			> 3.0.0
;--- Classe			> "DbLst"

;--- But et domaine d'application													;
;	> Permet de générer un fichier temporaire .dcl pour une boîte de dialogue de sélection unique/multiple d'éléments dans une liste;
;	passée en argument.														;
;																	;
;--- Déclaration des arguments 														;
;	La fonction (ListBox) possède 5 argument(s) :											;
;		¤ title		> correspond au titre de la boîte de dialogue.								;
;			(type title) = 'STR	| Ex. :	"Sélection des calques", "VP-RADPURGE : Sélection des présentations", "", nil	;
;		¤ msg		> correspond au message que l'on souhaite afficher au-dessus de la popup-list.				;
;			(type msg) = 'STR	| Ex. :	"Choix multiple :", "Sélectionner un calque", "", nil				;
;		¤ lst		> correspond à la liste que l'on souhaite afficher dans la popup-list.					;
;			(type lst) = 'LST	| Ex. :	'(label1 label2 ...), ...							;
;		¤ value		> correspond à la valeur par défaut que l'on souhaite sélectionner à l'ouverture de la BdL.		;
;			(type value) = 'SYM	| Ex. :	(getvar "CLAYER"), 1, ...							;
;		¤ flag		> correspond au type de popup-list entre une liste déroulante, une liste à choix unique ou multiple.	;
;			(type flag) = 'INT	| Ex. :	0 = Liste déroulante, 1 = Liste à choix unique, 2 = Liste à choix multiple	;
;																	;
;--- Liste des fonctions dépendantes													;
;	¤ "UtDac" ---> str2lst				| v1.0.0 - 15/04/2007 ((gile))							;
;	¤ "BaLst" ---> vl-list-search			| v1.0.0 - 13/12/2021 (Luna)							;
;																	;
;--- Retour																;
;	La fonction (ListBox) renvoie la valeur (flag = 0 ou 1) ou la liste des valeurs (flag = 2) choisie(s) par l'utilisateur		;
;	Ex. :	(ListBox "Présentation" "Choisir une présentation" (layoutlist) (getvar "CTAB") 1)					;
;																	;
;--- Modifications apportées par rapport à la version précédente									;
;	> Ajout d'une edit_box ajoutant la possibilité de filter la liste à partir d'une recherche (cf. (wcmatch) wildcard characters).	;
;	Pour afficher la liste complète, il faut mettre un "*" dans la barre de recherche. Le nombre d'éléments affichés ainsi que le	;
;	total d'éléments de la liste sont affichés sous la liste en guise d'information. Ajout d'une variable locale 'tlst pour ne pas	;
;	perdre les données de la liste originelle tout en renvoyant les bons résultats en cas d'application d'un filtre. Ajout de la	;
;	fonction (vl-list-search) dans le fonctionnement de la fonction (ListBox).							;
;																	;

(defun ListBox (title msg lst value flag / tmp file DCL_ID choice tlst)

	(setq tmp (vl-filename-mktemp "tmp.dcl")
	      file (open tmp "w")
	      tlst lst
	)
	(write-line
		(strcat "ListBox:dialog{width=" (itoa (+ (apply 'max (mapcar 'strlen (mapcar 'vl-princ-to-string lst))) 5)) ";label=\"" title "\";")
		file
	)
	(write-line
		":edit_box{key=\"filter\";}"
		file
	)
	(if (and msg (/= msg ""))
		(write-line (strcat ":text{label=\"" msg "\";}") file)
	)
	(write-line
		(cond
			((= 0 flag) "spacer;:popup_list{key=\"lst\";}")
			((= 1 flag) "spacer;:list_box{height=15;key=\"lst\";}")
			(t "spacer;:list_box{height=15;key=\"lst\";multiple_select=true;}")
		)
		file
	)
	(write-line ":text{key=\"count\";}" file)
	(write-line "spacer;ok_cancel;}" file)
	(close file)
	(setq DCL_ID (load_dialog tmp))
	(if (not (new_dialog "ListBox" DCL_ID))
		(exit)
	)
	(set_tile "filter" "*")
	(set_tile "count" (strcat (itoa (length lst)) " / " (itoa (length lst))))
	(start_list "lst")
	(mapcar 'add_list lst)
	(end_list)
	(set_tile "lst" (if (member value lst) (itoa (vl-position value lst)) (itoa 0)))
	(action_tile
		"filter"
		"(start_list \"lst\")
		 (mapcar 'add_list (setq tlst (vl-list-search $value lst)))
		 (end_list)
		 (set_tile \"count\" (strcat (itoa (length tlst)) \" / \" (itoa (length lst))))"
	)
	(action_tile
			"accept"
			"(or 	(= (get_tile \"lst\") \"\")
				(if (= 2 flag)
					(progn
						(foreach n (str2lst (get_tile \"lst\") \" \")
							(setq choice (cons (nth (atoi n) tlst) choice))
						)
						(setq choice (reverse choice))
					)
					(setq choice (nth (atoi (get_tile \"lst\")) tlst))
				)
			)
			(done_dialog)"
	)
	(start_dialog)
	(unload_dialog DCL_ID)
	(vl-file-delete tmp)
	choice

)

(defun str2lst (str sep / pos)
        (if (setq pos (vl-string-search sep str))
                (cons
                        (substr str 1 pos)
                        (str2lst (substr str (+ (strlen sep) pos 1)) sep)
                )
                (list str)
        )
)

(defun vl-list-search (p l)

	(vl-remove-if-not
		'(lambda (x) (wcmatch x p))
		l
	)

)

Attention tout de même car la fonction originelle utilise une liste d'association '((key1 . label1) (key2 . label2) ...) et renvoie la clé (flag = 0 ou 1) ou la liste des clés (flag = 2) sélectionné(s). Ici la fonction utilise une liste d'atomes '(atom1 atom2 atom3 ...) et renvoie l'atome (flag = 0 ou 1) ou la liste des atomes (flag = 2) sélectionné(s). Donc l'argument concernant la liste change légèrement. Lors de ma version 2.0.0 j'ai également ajouté un argument 'value pour permettre de définir une valeur par défaut si besoin pour la liste (ex. : (getvar "CLAYER")).

Je la poste car cela peut servir aussi bien dans un programme que comme exemple sur la mise à jour d'un élément d'une boîte de dialogue à partir d'une saisie utilisateur (permettant d'avoir une boîte de dialogue dynamique et adaptative).
Et merci à @(gile) qui écrit toujours des fonctions épurées et générales dans leur utilisation !

Bisous,
Luna

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 7 mois après...
il y a 49 minutes, sylarr a dit :

quand je mets tous les lisps avec GetLayer en .lsp, rien ne se passe.

Je ne comprends pas ce que tu veux dire. Peux-tu être plus explicite, s'il te plait ?

Il n'y a aucune raison que ces LISPs ne soient pas "à jour" (qu'ils ne fonctionne pas sur les versions récentes d'AutoCAD), par contre, il existe peut-être des versions plus récentes de certains d'entre eux sur cette page.

  • Upvote 1

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @(gile)

Je viens de répondre à ce membre sur le même genre de remarque et je n'ai pas voulu répondre deux fois pour la même question. Voir ICI
Si j'ai été explicite, il devrait se servir de ce nouveau savoir pour charger tes programmes sans mettre en cause le programmeur.

Amicalement

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

  • 3 mois après...

Bonjour Gile, je désir utiliser le Lisp, plineorg mais cela ne semble pas fonction sur ma version autocad (2021). J'essayé de selectionné une polyligne avant ou sans, espace papier/objet, l'accrochage objet proche s'active et cela ne fait rien :

Sélectionnez le nouveau point de départ sur la polyligne:
Erreur: no function definition: SUBLIST

As-tu une solution ? merci.

Lien vers le commentaire
Partager sur d’autres sites

Hello

"Mon" PLINEORG fonctionne parfaitement sur AutoCAD MAP 2021 !

Voir le Lisp ci-dessous ...

 

ACAD 2021-2023 : Mettre eventuellement  LISPSYS = 1

( NON necessaire a mon avis !? )

 

La Sante, Bye, lecrabe

 


;;;
;;; (gile) 04/03/2007  -  Appel par  PLINEORG  -  www.cadxp.com  -  (gile)
;;; http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=14098#pid55578
;;; Modifier le point origine d'une polyligne 2D fermée
;;; en principe dans les propriété de la polyligne le sommet appelé numéro 1 est le premier clicquer lors de la création.
;;; Moi j'aimerai bien pouvoir en changer en en choisissant un autre
;;;
;;; Edit : Fonctionne désormais avec les polylignes créées dans des systèmes de coordonnées non parallèles au SCG.
;;; Edit 2 : Prise en compte de remarques et suggestions de Bonuscad.
;;;


;;; MEMBER-FUZZ Comme MEMBER avec une tolérance dans la comparaison

(defun member-fuzz (expr lst fuzz)
(while (and lst (not (equal (car lst) expr fuzz)))
(setq lst (cdr lst))
)
)

;;; TRUNC-FUZZ Retourne la liste tronquée à partir de la première occurrence
;;; de l'expression (liste complémentaire de celle retournée par MEMBER-FUZZ)

(defun trunc-fuzz (expr lst fuzz)
(if (and lst
(not (equal (car lst) expr))
)
(cons (car lst) (trunc-fuzz expr (cdr lst) fuzz))
)
)

;;; PlineOrg Change le point de départ de la polyligne fermée

(defun c:plineorg (/ erreur os pt ent plst dlst elst)

(defun erreur (msg)
(if (= msg "Fonction annulée")
(princ)
(princ (strcat "\nErreur: " msg))
)
(setvar "OSMODE" os)
(setq *error* m:err
m:err nil
)
)

(setq m:err *error*
*error* erreur
os (getvar "OSMODE"))
(setvar "OSMODE" 1)
(if (and
(setq pt
(getpoint
"\nSélectionnez le nouveau point de départ sur la polyligne: "
)
)
(setq ent (car (nentselp pt)))
(setq elst (entget ent))
(= "LWPOLYLINE" (cdr (assoc 0 elst)))
(= 1 (logand 1 (cdr (assoc 70 elst))))
(setq plst (vl-remove-if-not
'(lambda (x)
(member (car x) '(10 40 41 42))
)
elst
)
)
(setq dlst
(member-fuzz
(setq pt
(cons
10
(reverse
(cdr
(reverse (trans pt 1 ent)
)
)
)
)
)
plst
1e-9
)
)
(setq elst (vl-remove-if
'(lambda (x)
(member (car x) '(10 40 41 42))
)
elst
)
)
)
(entmod (append elst dlst (trunc-fuzz pt plst 1e-9)))
(prompt "\nEntité non valide.")
)
(setvar "OSMODE" os)
(setq *error* m:err
m:err nil
)
(princ)
) 

 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Bonjour à la communauté.
J'ai un petit souci avec les listes, qui m'intéressent de plus en plus, mais je m'énerve dessus aussi...
J'ai fais ça dans le console : 

_$ (setq Liste (list "Lundi" "Mardi" "Jeudi" "Mercredi" "Vendredi" "Samedi" "Dimanche")) 
; C'est ma liste d'origine
("Lundi" "Mardi" "Jeudi" "Mercredi" "Vendredi" "Samedi" "Dimanche")
; Super fonction de (gile) qui sépare en deux une liste à un point donné (ici à 3)
_$ (setq LstNew (gc:breakAt 3 Liste)) 
; Je comprend le résultat, deux sous-listes dans une liste
(("Lundi" "Mardi" "Jeudi") ("Mercredi" "Vendredi" "Samedi" "Dimanche")) 
_$ (car LstNew) 
; Première sous-liste
("Lundi" "Mardi" "Jeudi") ; Ok, c'est une liste
; Deuxième sous-liste
_$ (cdr LstNew) 
(("Mercredi" "Vendredi" "Samedi" "Dimanche")) ; Pourquoi c'est une liste dans une liste ? ? ?
_$ 

 

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Coucou @DenisHen,

L'exemple est simple. Prenons un point 2D, nommé pt : (list 0.0 1.0)

Ici (car pt) renvoie 0.0 (donc un réel et non une liste). En revanche (cdr pt) renvoie (1.0) car (cdr) renvoie la liste moins la première valeur, donc une liste composée d'un seul élément. Si tu veux récupérer l'élément alors il faut faire (cadr pt) pour obtenir 1.0 🙂

Si désormais on prends pt2 : (cons 0.0 1.0) alors désormais on a une paire pointée dont le premier élément est la key et le second une value associée à la key.

Ainsi donc, (car pt2) retourne 0.0 et (cdr pt2) retourne 1.0

En revanche si on prend une liste composée de liste, alors on est dans le premier cas. Autrement dit il te faut utiliser (car) pour récupérer la première liste, puis (cadr) pour récupérer la seconde liste.

Si tu veux apprendre la différence, il te suffit de comprendre la différence entre (list) et (cons), puis de comprendre le fonctionnement si on combine les deux ensemble en faisant des (list) de (list) ou de (cons) et des (cons) de (cons) ou de (list). Cela peut paraître un peu étrange au début mais cela n'est pas si compliqué que cela au final (évidemment plus tu ajoutes des listes dans des listes et plus c'est compliqué mais vas-y étape par étape).

Bisous, Luna

Lien vers le commentaire
Partager sur d’autres sites

Coucou @Luna et merci pour ton aide.
Je n'avais pas saisi le (cdr. Et pourtant, je crois que je l'avais dans un coin du cerveau.
Effectivement, c'est la liste à partir du deuxième élément et non le deuxième élément.
Même s'il n'y a que deux élément dans le liste...
Encore merci à toi.
Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

hello Gile

pour ton plug in INCREMENT, tu ne devais pas rajouter pour "SELECTION"

image.png.b8303d65a7758a7ad755560ef72e6fc7.png

un bouton de selection de bloc comme dans "ATTRIBUT", ( plus facile pour choisir les bloc deja mis en place )

image.png.a9ddd9671c1f434834abb828b1287871.png

Merci

Phil

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

@Dilack33

Il n'y a pas de raccourci. Pour atteindre les paramètres, il suffit de faire Entrée (ou clic droit) au lieu de sélectionner des objets.

Comme avec les commandes natives, s'il s'agissait d'une option elle apparaitrait entre crochets dans la ligne de commande.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant



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