Aller au contenu

Lisp ODselect et sel_by_OD_v2


Messages recommandés

Posté(e)

Bonjour,

 

Je cherche un LISP me permettant de sélectionner des objets suivant leurs données d'objets.

Je suis tombé sur ces deux LISP "ODselect" (de Gégématic), et "Sel_by_OD_v2"(de LeCrabe), mais je n'arrive pas à les installer!

 

Pour ODSelect, c'est un fichier dll, et il me manque deux lisp si j'ai bien compris "SelParTablelsp" et "SelParODValLsp", et impossible de les trouver. la page de téléchargement a été supprimé.

 

Pour "Sel_by_OD_v2", lorsque je le charge, j'ai ce message en retour :

Sel_By_OD_v2.lsp correctement chargé(s)

Commande: ; erreur: chaîne trop longue en entrée

 

Et lorsque j'essaie de le lancer après ce chargement, j'ai :

Commande: Sel_By_OD_v2

Commande inconnue "SEL_BY_OD_V2". Appuyez sur F1 pour obtenir de l'aide

 

QQn peut m'aider please? ou une autre piste pour arriver à mes fins?...

En vous remerciant!

Xav

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Posté(e)

Salut Xav.

 

Je pense ne rien t'apprendre que pour charger une DLL in faut utiliser NETLOAD et non APPLOAD...

 

On ne sait jamais... ;)

 

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)

Posté(e)

Bonjour Denis,

 

Une piqûre de rappel des "bases" est toujours la bienvenue! merci! :)

Alors je suis bien passé par netload en effet pour charger le dll, mais après? il y a bien deux lisps manquant avec ce dll pour s'en servir... non?

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Posté(e)

Je m'e doutais bien que tu le savais... ;)

 

A la fin de NETLOAD, rien ne t'indique le(s) nom(s) de commande dans la fenêtre "texte" ?

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)

Posté(e)

Hello

 

PERSO: aucun Probl avec le Sel_By_OD v2.01 sur MAP 2020 !

 

Encore MERCI a Bonuscad / Bruno ...

 

Bye, lecrabe "triste"

 


;;
;; cadxp.com - Je reviens sur ce sujet car a ce jour j'avais besoin d'un outil. 
;; N'etant jamais mieux servi que par soi-meme, je me suis pencher sur un code de filtrage sur OD 
;;
;; Je le livre en version Beta si cela interesse d'autre personnes pour effectuer des tests
;;
;; par Bonuscad (Bruno) vs 2.00 BETA - Avec correction du bug sur Entite avec de multiples tables OD
;; 
;; 
;; Micro-Micro-Micro-Modif vs 2.01 en 2017 par Patrice : Elargissement du DCL 
;;
;;

(vl-load-com) 

(defun c:Sel_By_OD_v2 ( / js dxf_model all_fldnamelist all_fldtypelist all_vallist tbllist tbldef tblstr
										 fldnamelist fldtypelist fldnme fldtyp numrec ct cttemp vallist typ val nl
										 tmp_file dcl_file dcl_id indx Id_tbl Id_nam Id_val op_log what_next js_sel n)
(princ "\nSelection d'un objet modèle: ")
(while
	(null
		(setq js
			(ssget "_+.:E:S:L:N" 
				(list
					(cons 0 "*")
					(cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
					(cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
				)
			)
		)
	)
)
(setq dxf_model (entget (ssname js 0)) all_fldnamelist () all_fldtypelist () all_vallist ())
(if (null (setq tbllist (ade_odgettables (cdar dxf_model))))
	(princ "\nL'objet séléctionné ne contient pas de données d'objet.")
	(foreach tbl (reverse tbllist)
		(setq
			tbldef (ade_odtabledefn tbl)
			tblstr (cdr (nth 2 tbldef))
			fldnamelist ()
			fldtypelist ()
		)
		(foreach fld tblstr
			(setq
				fldnme (cdr (nth 0 fld))
				fldtyp (cdr (nth 2 fld))
				fldnamelist (append fldnamelist (list fldnme))
				fldtypelist (append fldtypelist (list fldtyp))
			)
		)
		(setq
			numrec (ade_odrecordqty (cdar dxf_model) tbl)
			ct 0
			all_fldnamelist (cons fldnamelist all_fldnamelist)
			all_fldtypelist (cons fldtypelist all_fldtypelist)
		)
		(while (< ct numrec)
			(setq cttemp 0 vallist ())
			(foreach fld fldnamelist
				(setq
					typ (nth cttemp fldtypelist)
					cttemp (+ cttemp 1)
					val (ade_odgetfield (cdar dxf_model) tbl fld ct)
				)
				(if (= typ "Integer")(setq val (fix val)))
				(setq vallist (append vallist (list val)))
			)
			(setq ct (+ ct 1))
		)
		(setq all_vallist (cons vallist all_vallist))
	)
)
(cond
	((and tbllist all_fldnamelist all_fldtypelist all_vallist)
		(setq
			tmp_file (vl-filename-mktemp "sel_by_od.dcl")
			dcl_file (open tmp_file "w")
		)
		(write-line
			"Sel_By_OD : dialog {
				label = \"Choix des champs à filtrer\";
					:column {
						label = \"Application\";
						:popup_list {key=\"tbl\";edit_width=40;}
						}
					:column {
						label = \"Données d'objets\";
						:popup_list {key=\"nam\";edit_width=40;}
						:edit_box {
							label = \"Valeur du champ:\";
							mnemonic = \"V\";
							key = \"val\";
							edit_width = 30;
							edit_limit = 41;
							}
						}
						:boxed_row {
							label = \"Choix de l'opérateur logique\";
							:radio_button {
								label = \"=\";
								key = \"b_equ\";
							}
							:radio_button {
								label = \"/=\";
								key = \"b_dif\";
							}
							:radio_button {
								label = \">\";
								key = \"b_sup\";
							}
							:radio_button {
								label = \"<\";
								key = \"b_inf\";
							}
							:radio_button {
								label = \">=\";
								key = \"b_sup-eq\";
							}
							:radio_button {
								label = \"<=\";
								key = \"b_inf-eq\";
							}
						}
					ok_cancel_err;
				}"
			dcl_file
		)
		(close dcl_file)
		(setq dcl_id (load_dialog tmp_file) indx (1- (length tbllist)) Id_tbl (nth indx tbllist) Id_nam (car (nth indx all_fldnamelist)) Id_val (car (nth indx all_vallist)) op_log "=")
		(setq what_next 2)
		(while (< 1 what_next)
			(if (not (new_dialog "Sel_By_OD" dcl_id)) (exit))
			(start_list "tbl")
			(mapcar 'add_list tbllist)
			(end_list)
			(set_tile "tbl" (itoa indx))
			(start_list "nam")
			(mapcar 'add_list (nth indx all_fldnamelist))
			(end_list)
			(set_tile "nam" (itoa (- (length (nth indx all_fldnamelist)) (length (member (car (nth indx all_fldnamelist)) (nth indx all_fldnamelist))))))
			(set_tile "val"
				(setq Id_val
					(car
						(mapcar
							'(lambda (x)
								(cond
									((eq (type x) 'REAL) (rtos x))
									((eq (type x) 'INT) (itoa x))
									((eq (type x) 'LIST) (apply 'strcat (mapcar 'strcat (mapcar 'rtos x)'("," "," ""))))
									(T x)
								)
							)
							(nth indx all_vallist)
						)
					)
				)
			)
			(cond
				((= op_log "=") (set_tile "b_equ" "1") (mode_tile "b_equ" 2))
				((= op_log "/=") (set_tile "b_dif" "1") (mode_tile "b_dif" 2))
				((= op_log ">") (set_tile "b_sup" "1") (mode_tile "b_sup" 2))
				((= op_log "<") (set_tile "b_inf" "1") (mode_tile "b_inf" 2))
				((= op_log ">=") (set_tile "b_sup-eq" "1") (mode_tile "b_sup-eq" 2))
				((= op_log "<=") (set_tile "b_inf-eq" "1") (mode_tile "b_inf-eq" 2))
			)
			(set_tile "error" "")
			(action_tile "tbl" "(setq Id_tbl (nth (setq indx (fix (atof (get_tile \"tbl\")))) tbllist))
			(start_list \"nam\")
			(mapcar 'add_list (nth indx all_fldnamelist))
			(end_list)
			(set_tile \"nam\" (setq Id_nam (nth (- (length (nth indx all_fldnamelist)) (length (member (car (nth indx all_fldnamelist)) (nth indx all_fldnamelist)))) (nth indx all_fldnamelist))))
			(set_tile \"val\"
				(setq Id_val
					(car
						(mapcar
							'(lambda (x)
								(cond
									((eq (type x) 'REAL) (rtos x))
									((eq (type x) 'INT) (itoa x))
									((eq (type x) 'LIST) (apply 'strcat (mapcar 'strcat (mapcar 'rtos x)'(\",\" \",\" \"\"))))
									(T x)
								)
							)
							(nth indx all_vallist)
						)
					)
				)
			)
			")
			(action_tile "nam" "(setq Id_nam (nth (fix (atof (get_tile \"nam\"))) (nth indx all_fldnamelist)))
			(set_tile \"val\"
				(setq Id_val 
					(nth (vl-position Id_nam (nth indx all_fldnamelist))
						(mapcar
							'(lambda (x)
								(cond
									((eq (type x) 'REAL) (rtos x))
									((eq (type x) 'INT) (itoa x))
									((eq (type x) 'LIST) (apply 'strcat (mapcar 'strcat (mapcar 'rtos x)'(\",\" \",\" \"\"))))
									(T x)
								)
							)
							(nth indx all_vallist)
						)
					)
				)
			)
			")
			(action_tile "val" "(setq Id_val $value)")
			(action_tile "b_equ" "(setq op_log \"=\")")
			(action_tile "b_dif" "(setq op_log \"/=\")")
			(action_tile "b_sup" "(setq op_log \">\")")
			(action_tile "b_inf" "(setq op_log \"<\")")
			(action_tile "b_sup-eq" "(setq op_log \">=\")")
			(action_tile "b_inf-eq" "(setq op_log \"<=\")")
			(action_tile "accept" "(done_dialog 1)")
			(action_tile "cancel" "(done_dialog 0)")
			(setq what_next (start_dialog))
		)
		(unload_dialog dcl_id)
		(vl-file-delete tmp_file)
		(setq typ (nth (- (length (nth indx all_fldnamelist)) (length (member id_nam (nth indx all_fldnamelist)))) (nth indx all_fldtypelist)) nl nil)
		(cond
			((eq typ "Real") (setq Id_val (atof Id_val)))
			((eq typ "Integer") (setq Id_val (atoi Id_val)))
			((eq typ "Point") (setq Id_val (read (vl-list->string (append (cons 40 (foreach n (reverse (vl-string->list id_val)) (setq nl (cons (if (eq n 44) 32 n) nl)))) '(41))))))
		)
		(setq js
			(ssget "_X"
				(list
					(assoc 0 dxf_model)
					(assoc 8 dxf_model)
					(if (assoc 6 dxf_model) (assoc 6 dxf_model) '(6 . "BYLAYER"))
					(if (assoc 62 dxf_model) (assoc 62 dxf_model) '(62 . 256))
					(if (assoc 48 dxf_model) (assoc 48 dxf_model) '(48 . 1))
					(cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
					(cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
				)
			)
			js_sel (ssadd)
		)
		(cond
			(js
				(repeat (setq n (sslength js))
					(if (not (null (setq tbllist (ade_odgettables (setq ent (ssname js (setq n (1- n))))))))
						(foreach tbl tbllist
							(setq
								tbldef (ade_odtabledefn tbl)
								tblstr (cdr (nth 2 tbldef))
								fldnamelist ()
								fldtypelist ()
							)
							(foreach fld tblstr
								(setq
									fldnme (cdr (nth 0 fld))
									fldtyp (cdr (nth 2 fld))
									fldnamelist (append fldnamelist (list fldnme))
									fldtypelist (append fldtypelist (list fldtyp))
								)
							)
							(setq numrec (ade_odrecordqty ent tbl) ct 0)
							(while (< ct numrec)
								(setq cttemp 0)
								(foreach fld fldnamelist
									(setq
										typ (nth cttemp fldtypelist)
										cttemp (+ cttemp 1)
										val (ade_odgetfield ent tbl fld ct)
									)
									(if (= typ "Integer")(setq val (fix val)))
									(if
										(and
											(eq tbl Id_tbl)
											(eq fld Id_nam)
											(if (= typ "Character")
												(wcmatch val Id_val)
												(if (= typ "Point")
													(mapcar '(lambda (u v) (eval (read op_log)) u v) val Id_val)
													((eval (read op_log)) val Id_val)
												)
											)
										)
										(setq js_sel (ssadd ent js_sel))
									)
								)
								(setq ct (+ ct 1))
							)
						)
					)
				)
			)
		)
	)
)
(princ (strcat "\n" (itoa (sslength js_sel)) " trouvé(s)"))
(sssetfirst nil js_sel)
(prin1)
) 

Autodesk Expert Elite Team

Posté(e)

Merci pour vos réponses!

 

@ LeCrabe ;

Je viens de réessayer avec le LISP ci dessus proposé par LeCrabe, mais le résultat est le même sur mon poste (ça pourrait venir de ma version de AutoCad Map 2011?)

J'ai le même message au moment du chargement "erreur: chaîne d'argument trop longue"

 

@ DenisH ;

Je n'avais aps fait attention, mais j'ai également un soucis de chargement apparemment... j'ai ce message après avoir tenté de charger le dll :

 

Impossible de charger l'assemblage. Détails de l'erreur:

System.BadImageFormatException: Impossible de charger le fichier ou l'assembly

'file:///C:\Users\Xav\AppData\Roaming\Autodesk\ApplicationPlugins\OD

select.dll' ou une de ses dépendances. Cet assembly a été construit par un

runtime plus récent que le runtime actuellement chargé et ne peut pas être

chargé.

Nom du fichier :

'file:///C:\Users\Xav\AppData\Roaming\Autodesk\ApplicationPlugins\OD

select.dll'

à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,

Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,

Boolean throwOnFileNotFound, Boolean forIntrospection)

à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence

assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

à System.Reflection.Assembly.LoadFrom(String assemblyFile)

à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

à loadmgd()

AVT : le journal de liaison d'assembly est désactivé.

Pour activer le journal des échecs de liaison d'assembly, attribuez la valeur 1

à la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD).

Remarque : une certaine perte de performance est associée à l'enregistrement

dans le journal des échecs de liaison d'assembly.

Pour désactiver cette fonctionnalité, supprimez la valeur de Registre

[HKLM\Software\Microsoft\Fusion!EnableLog].

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Posté(e)

Je pense qu'il faudrait mettre à jour ton FrameWork, mais je n'en suis pas absolument certain...

 

Tu es sur quelle version d'AutoCAD ?

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)

Posté(e)

Bonjour,

 

Il me semble que la DLL de gege a été compilée pour le .Net Framework 4.5 donc AutoCAD 2013 minimum.

 

Sinon dans cette discussion, j'ai écrit un outil de sélection par OD : ICI

Dans le message #38 du 16 juin, tu as un ZIP qui contient une DLL normalement compatible de MAP 2007 à MAP 2014.

Une fois le programme chargé avec netload, la commande de sélection s'appelle MQSELECT

 

Olivier

Posté(e)

Hello

 

YES MQSELECT est un MUST ! ... MERCI Grand Maitre Olivier !!

 

Neanmoins j'utilise toujours de temps en temps le bon vieux (comme Bruno et moi) Sel_By_OD ...

Des que possible je vais tester sur un MAP 2011 64 bits !?

 

Bye, lecrabe "triste"

Autodesk Expert Elite Team

Posté(e)

Merci à nouveau à tous, et particulièrement à Olivier pour ton lien et le partage de ton travail.

9a fonctionne très bien même si j'ai eu une petite montée d'adrénaline en voyant que j'ai eu le message (ci dessous) que pour le premier dll... mais là, bizarrement, ça fonctionne et c'est le principal! :)

 

 

Merci encore à tous!

Xav

 

Commande: netload

ObjectData Sample Application Initialized.

Commande: NETLOAD Impossible de charger l'assemblage. Détails de l'erreur:

System.BadImageFormatException: Impossible de charger le fichier ou l'assembly

'file:///C:\Users\Xav\AppData\Roaming\Autodesk\ApplicationPlugins\Ob

jectDataCS19.dll' ou une de ses dépendances. Cet assembly a été construit par

un runtime plus récent que le runtime actuellement chargé et ne peut pas être

chargé.

Nom du fichier :

'file:///C:\Users\Xav\AppData\Roaming\Autodesk\ApplicationPlugins\Ob

jectDataCS19.dll'

à System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,

Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,

Boolean throwOnFileNotFound, Boolean forIntrospection)

à System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence

assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)

à System.Reflection.Assembly.LoadFrom(String assemblyFile)

à Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)

à loadmgd()

AVT : le journal de liaison d'assembly est désactivé.

Pour activer le journal des échecs de liaison d'assembly, attribuez la valeur 1

à la valeur de Registre [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD).

Remarque : une certaine perte de performance est associée à l'enregistrement

dans le journal des échecs de liaison d'assembly.

Pour désactiver cette fonctionnalité, supprimez la valeur de Registre

[HKLM\Software\Microsoft\Fusion!EnableLog].

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

  • 4 ans après...
Posté(e)
Le 03/07/2019 à 09:51, Demixav a dit :

Bonjour,

Je cherche un LISP me permettant de sélectionner des objets suivant leurs données d'objets.

Je suis tombé sur ces deux LISP "ODselect" (de Gégématic), et "Sel_by_OD_v2"(de LeCrabe), mais je n'arrive pas à les installer!

Pour ODSelect, c'est un fichier dll, et il me manque deux lisp si j'ai bien compris "SelParTablelsp" et "SelParODValLsp", et impossible de les trouver. la page de téléchargement a été supprimé.

Xav

Salut,

je n'avais pas vu ce post à l'époque.

Les fonctions proposées par Olivier Eckman sont infiniment plus avancées que ce que propose ODselect.

le seul "avantage" d'Odselect est de pouvoir l'utiliser en lisp .

Donc il ne te manque pas de lisp, ce sont 2 fonctions lisp créée par Odselect lorsqu'on le charge

Chez nous ça marche très bien de la 2015 à la 2024

La page d'explication et de téléchargement est ici:

http://g-eaux.over-blog.com/2015/10/odselect-utilitaires-pour-la-selection-par-filtre-d-object-data.html

Il reste le problème du AutoCAD.exe.config que je n'ai jamais réussi à résoudre autrement qu'avec cette astuce:

https://through-the-interface.typepad.com/through_the_interface/2011/07/loading-blocked-and-network-hosted-assemblies-with-net-4.html

Astuce que je ne trouvais plus et c'est comme ça que je suis tombé sur ce post !

exemple d'utilisation des fonction lisp:

; ****************************************************************************
;;§/files/recherche les fichier selon un masque défint par l'utilisateur /none
;;défini DANS AutoCAD VB plug-in labo g-eaux.sln
;;(charger odselect.dll)
;;usage (FindFilesLike "Directory" "filepattern" "mode = TopDirectoryOnly or AllDirectories")
;;(FindFilesLike "E:\\NADIAA\\DOS\\la_bathie\\Ass\\Fiches_Regard\\" "A_1160.pdf" "TopDirectoryOnly")
;;(setq lpdf (c:FindFilesLike))
(defun c:FindFilesLike ()
  (if (not FindFilesLike)
    (command "Netload"
	     (strcat aclsp-chem "DotNet/G-Eaux_Map_Extensions.dll")
    )
  )
  (pw_bydefault "mode" "AllDirectories")
  (pw_getkwordmem
    "\nMode de recherche dans les répertoires ?/TopDirectoryOnly AllDirectories"
    "mode"
  )

  (pw_getstringmem
    "\nFichier à rechercher (jokers acceptés)"
    "fichier"
  )
  (setq dir (pw_pick_directory "Choisir un répertoire" dir))

  (FindFilesLike dir fichier mode)
)

du coup je vais demander à Olivierd'ajouter des commandes équivalentes utilisable en lisp dans son excellent plug-in "Exploitation des données d'objets"

a bon entendeur !

a+

gégé

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

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é