CADxp: Lisp ODselect et sel_by_OD_v2 - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Lisp ODselect et sel_by_OD_v2

#1 L'utilisateur est hors-ligne   Demixav 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 756
  • Inscrit(e) : 28-mars 12
  • LocationLa pampa du Gard

Posté 03 juillet 2019 - 08:51

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
0

#2 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3302
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 03 juillet 2019 - 09:05

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 10 Pro 64bits / AutoCAD MAP 3D 2019 (22.0.022.4)
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#3 L'utilisateur est hors-ligne   Demixav 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 756
  • Inscrit(e) : 28-mars 12
  • LocationLa pampa du Gard

Posté 03 juillet 2019 - 09:15

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
0

#4 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3302
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 03 juillet 2019 - 09:28

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 10 Pro 64bits / AutoCAD MAP 3D 2019 (22.0.022.4)
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#5 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8480
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 juillet 2019 - 09:47

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
0

#6 L'utilisateur est hors-ligne   Demixav 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 756
  • Inscrit(e) : 28-mars 12
  • LocationLa pampa du Gard

Posté 03 juillet 2019 - 10:53

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
0

#7 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3302
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 03 juillet 2019 - 10:57

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 10 Pro 64bits / AutoCAD MAP 3D 2019 (22.0.022.4)
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#8 L'utilisateur est hors-ligne   Olivier Eckmann 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1235
  • Inscrit(e) : 29-décembre 11
  • LocationLongjumeau (91)

Posté 03 juillet 2019 - 11:00

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
0

#9 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8480
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 03 juillet 2019 - 11:48

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
0

#10 L'utilisateur est hors-ligne   Demixav 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 756
  • Inscrit(e) : 28-mars 12
  • LocationLa pampa du Gard

Posté 03 juillet 2019 - 13:06

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
0

#11 L'utilisateur est hors-ligne   Olivier Eckmann 

  • ceinture noire 2em dan
  • Groupe : Membres
  • Messages : 1235
  • Inscrit(e) : 29-décembre 11
  • LocationLongjumeau (91)

Posté 03 juillet 2019 - 15:39

Bonjour,

Normalement pour AutoCAD 2011, tu n'as qu'une DLL à charger : ObjectDataCs.DLL.
la version xxx19.dll est destiné à AutoCAD 2013 et au-délà.

Olivier
0

#12 L'utilisateur est hors-ligne   Demixav 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 756
  • Inscrit(e) : 28-mars 12
  • LocationLa pampa du Gard

Posté 03 juillet 2019 - 16:27

Vers l'infini et au delà... merci Buzz... heu... Olivier! <_< ;)
AutoCad Map 3D 2011 - Covadis v16.0d
Windows 7 - 64b
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)