Aller au contenu

Lisps de gile


(gile)

Messages recommandés

hello gile

 

tres bonne question ca scu ? ou scg ??

 

en ce qui me concerne je pencherai plutot pour le scu courant

 

vue que c'est pour englober en generale des coupes, facades, ou plans

 

mais comme ton lisp va surement etre utile a d'autre

ca serait abuser de te demander les deux ?? d'avoir le choix

 

je suis en train de te dire une connerie si tu le fais par rapport au scu courant le scg est forcement compris dedans

a moins que la variable "ucsfollow" et quelque incidence dans le "bbox" ???

 

 

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

Pour bien préciser, la fonction vlisp vla-getBoundingBox retourne toujours les points par rapport au SCG, j'avais écrit bbox pour figurer une bounding box par rapport au SCU courant.

 

Par exemple, en rouge la "bounding box" des deux ellipses par rapport au SCG, en vert par rapport au SCU courant.

 

http://img91.imageshack.us/img91/8527/mbboxkw6.png

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

Lien vers le commentaire
Partager sur d’autres sites

hello gile

 

 

le resultat en image tu viens de la faire a la "mano" ou par un lisp ??

 

par rapport au scu courant serat le mieux je pense

ca englobe plus de cas de figures comme ca

 

merci

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

le resultat en image tu viens de la faire a la "mano" ou par un lisp ??

 

Par un LISP, ça va plus vite ;)

 

Le LISP ci dessous, ne fonctionne qu'en 2d (contrairement à bbox) mais il est tard...

 

;; MBBOX (gile)
;; Dessine un rectangle figurant l'emprise des objets sélectionnés suivant le SCU courant.

(defun c:mbbox (/ ss lst)
 (vl-load-com)
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (if (ssget)
   (progn
     (vlax-for	o (setq ss (vla-get-ActiveSelectionSet *acdoc*))
(setq lst (append (ucs-bbox o) lst))
     )
     (vl-cmdf "_rectang"
       (apply 'mapcar (cons 'min lst))
       (apply 'mapcar (cons 'max lst))
     )
   )
 )
 (princ)
)

;; Doug C. Broad, Jr.
;; can be used with vla-transformby to
;; transform objects from the UCS to the WCS
(defun UCS2WCSMatrix ()
 (append
   (mapcar
     (function
(lambda	(vector origin)
  (append (trans vector 1 0 T) (list origin))
)
     )
     (list '(1 0 0) '(0 1 0) '(0 0 1))
     (trans '(0 0 0) 0 1)
   )
   (list '(0 0 0 1))
 )
)

;; transform objects from the WCS to the UCS
(defun WCS2UCSMatrix ()
 (append
   (mapcar
     (function
(lambda	(vector origin)
  (append (trans vector 0 1 T) (list origin))
)
     )
     (list '(1 0 0) '(0 1 0) '(0 0 1))
     (trans '(0 0 0) 1 0)
   )
   (list '(0 0 0 1))
 )
)

;; UCS-BBOX (gile)
;; Retourne les coodrdonnées (SCU) de la 'bounding box' de l'objet par rapport au SCU courant
;;
;; Argument
;;  obj : un objet graphique (ename ou vla-object)
;;
;; Retour
;; une liste des points inférieur gauche et supérieur droit dans le SCU courant

(defun ucs-bbox	(obj / space minpoint maxpoint)
 (vl-load-com)
 (and (= (type obj) 'ENAME)
      (setq obj (vlax-ename->vla-object obj))
 )
 (vla-TransformBy obj (vlax-tmatrix (UCS2WCSMatrix)))
 (vla-getboundingbox obj 'minpoint 'maxpoint)
 (vla-TransformBy obj (vlax-tmatrix (WCS2UCSMatrix)))
 (list
   (vlax-safearray->list minpoint)
   (vlax-safearray->list maxpoint)
 )
) 

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

Lien vers le commentaire
Partager sur d’autres sites

hello gile

 

enorme tres grand merci

 

en 2d ca me va tres bien comme ca

 

j'ai un autre lisp sur le feu

donc un autre sujet

 

je suis en train d"ecrire un lisp pour rajouter/ soustraire des points dans une serie de cote

 

est ce que tu sais si on peut forcer a choisir un point par rapport a une liste de point deja etabli

 

iniget " listedepoint"

getpoint ....

enfin quelque chose comme ca

 

phil

 

[Edité le 15/5/2008 par PHILPHIL]

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

  • 3 semaines après...

Bonjour (gile)!

J'essaye d'utiliser le lisp Edit_bloc_rep (la version3.5) mais j'obtiens un message d'erreur: Erreur Automation Erreur de fichier

 

L'erreur se produit après avoir traité une dizaine de fichiers.

Les fichiers traités avant le bug sont correctement traités.

 

Merci d'avance.

 

HPZ400 Workstation

Intel Xeon W3550 3.07 GHz

6 Go ram

QUADRO FX 1800

Lien vers le commentaire
Partager sur d’autres sites

Bonjour (gile)!

J'essaye d'utiliser le lisp Edit_bloc_rep (la version3.5) mais j'obtiens un message d'erreur: Erreur Automation Erreur de fichier

 

L'erreur se produit après avoir traité une dizaine de fichiers.

Les fichiers traités avant le bug sont correctement traités.

 

Merci d'avance.

 

A première vue, le bug provient d'un fichier à traiter; une fois celui-ci retiré du répertoire, le programme fonctionne correctement.

HPZ400 Workstation

Intel Xeon W3550 3.07 GHz

6 Go ram

QUADRO FX 1800

Lien vers le commentaire
Partager sur d’autres sites

  • 1 mois après...

Salut (gile),

 

Au sujet de ton super lisp gelobj :

Je suis en 2009.

Je pense qu'il y a un bug lors de la fermeture puis de la ré-ouverture d'un plan dans lequel ont aurais appliqué gelobj...

J'ai du mal à comprendre ce bug donc je t'en dirais plus après plusieurs test, mais on dirait que lors de la ré-ouverture, tous les calques gelé avec ton outil soit gelé aussi en EP.

Quand je passe en EP, j'ai une erreur "vla-object nil" ...

 

Merci encore !

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut Bred,

 

Je suis resté avec ma "vieille" 2007, sur laquelle je n'ai pas de problème...

 

En relisant le LISP, je ne vois pas bien d'où ça peut venir.

As tu bien mis :

(and
 (not *GelerOngletObjet*)
 (vlax-ldata-get "GelerOngletObjet" "toggled")
 (setq	*GelerOngletObjet*
 (vlr-miscellaneous-reactor
   nil
   '((:vlr-layoutSwitched . gelobjrea))
 )
 )
) 

dans un fichier de chargement automatique ?

 

Peux-tu essayer de cocher "Arrêt sur erreur" dans le menu "Débogage" de l'éditeur, essayer de reproduire l'erreur et faire CTRL+F9 pour voir l'expression en cause (méthode décrite ici)

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Ton lisp est chargé au démarrage à chaque ouverture de planc, donc je ne pense pas que ce soit dü au mauvais chargement du réacteur.

 

Message d'erreur :

; erreur: type d'argument incorrect: ensemble d'objets VLA: nil

 

Peux-tu essayer de cocher "Arrêt sur erreur" dans le menu "Débogage" de l'éditeur, essayer de reproduire l'erreur et faire CTRL+F9 pour voir l'expression en cause

 

http://images.imagup.com/04/1216371480_2008-07-18_095801.jpg

 

pour info : *layers* = nil .... :casstet:

 

... on dirais qu'il ne recharge pas la liste totale des calques....

 

(J'ai un plan avec deux calques : "Cercles" et "Rectangles" : j'ai gelé les cercles avec gelobj :

Cela a l'air bon :

(vlax-ldata-get "GelerOngletObjet" "toggled")

= (("Cercles" . :vlax-false))

 

Est-ce que cela :

  (or *acdoc* (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object))))
 (or *layers* (setq *layers* (vla-get-layers *acdoc*)))

Ne devrais-t'il pas ce trouver en chargement au démarrage ?

Un truc du genre au chargement :

(if (vlax-ldata-get "GelerOngletObjet" "toggled")
 (progn
   (or *acdoc* (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object))))
   (or *layers* (setq *layers* (vla-get-layers *acdoc*)))))

 

(car je ne la vois pas le rappeler dans ton réacteur : j'ai l'impression que pour que ça fonctionne, il font donc lancer forcément une fois "gelobjet" pour le charger... )

 

Pour être plus clair :

Mon fichier TEST...

Avec le calque cercle gelé avec gelobj...

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

je ne peux pas tester (je suis au boulot avec seulement une LT) mais je pense que tu as mis le doigt dessus, les variables globales *acad*, *acdoc*, *Layers*, *Blocks* sont automatiquement définies chez moi dans acaddoc.lsp. J'oublie donc régulièrement de les redéfinir...

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

Lien vers le commentaire
Partager sur d’autres sites

Merci Bred,

 

Je pense que c'est ça, j'ai modifié le LISP en téléchargement (+ une petite dédicace) :

 

;; Chargement au démarrage (acaddoc.lsp ou MNL)

(and
 (not *GelerOngletObjet*)
 (vlax-ldata-get "GelerOngletObjet" "toggled")
 (or *acdoc* (setq *acdoc* (vla-get-activeDocument (vlax-get-acad-object))))
 (or *layers* (setq *layers* (vla-get-layers *acdoc*)))
 (setq	*GelerOngletObjet*
 (vlr-miscellaneous-reactor
   nil
   '((:vlr-layoutSwitched . gelobjrea))
 )
 )
) 

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

HELLO gile

 

j'utilise ton lisp AddVtx&DelVtx

 

je rencontre un tit souci en enlevant des points aux polylignes avec DelVtx

 

quand il y en a plusieurs l'une sur l'autre

il a tendance a choisir celle de dessus

 

ou quand les points de la polyligne sont confondue avec ceux de lignes

il ne sait plus quel point enlever et repond par une erreur "entité non valide"

 

est ce que avant d'enlever un point on ne pourrait pas choisir la polyligne sur laquelle operer

ca reglerait les deux soucis d'un coup

 

y'a pas urgence vue que 'lon peut regler le probleme en faisant monter la polyligne en "avant"

pour qu'elle soit prise en compte en premier

 

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

Salut,

 

Je te propose d'essayer le LISP ci dessous (que j'ai renommé DVX).

J'ai changé de mode de sélection pour le sommet, l'objet sélectionné se met en surbrillance (en fonction de la variable PREVIEWEFFECT).

On peut cliquer légèrement à côté du sommet ou passer d'une entité à l'autre en faisant CTRL ou MAJ+Espace suivant la version et/ou la variable LEGACYCTRLPICK.

 

Je te laisse tester, je changerais peut-être de version dans le fichier en téléchargement en fonction des retours.

 

(defun c:dvx (/ *error* pt ent typ plst par blst n wlst)
 (vl-load-com)

 (defun *error* (msg)
   (if	(or
  (= msg "Fonction annulée")
  (= msg "quitter / sortir abandon")
)
     (princ)
     (princ (strcat "\nErreur: " msg))
   )
   (vla-EndUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
   )
 )

 (while (setq pt
	(entsel
	  "\nSélectionnez le sommet à supprimer: "
	)
 )
   (if	(and
  ((lambda (e)
     (or (= (cdr (assoc 0 e)) "LWPOLYLINE")
	 (and
	   (= (cdr (assoc 0 e)) "POLYLINE")
	   (zerop (logand 118 (cdr (assoc 70 e))))
	 )
     )
   )
    (entget (car pt))
  )
  (setq ent (vlax-ename->vla-object (car pt)))
  (setq pt (trans (osnap (cadr pt) "_end") 1 0))
  (setq typ (vla-get-ObjectName ent))
)
     (if
(and
  (setq	plst (if (= typ "AcDbPolyline")
	       (split-list (vlax-get ent 'Coordinates) 2)
	       (split-list (vlax-get ent 'Coordinates) 3)
	     )
  )
  (	)
 (progn
   (vla-StartUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
   )
   (setq par  (cond
		((equal pt (vlax-curve-getStartPoint ent) 1e-9)
		 0
		)
		((equal pt (vlax-curve-getEndPoint ent) 1e-9)
		 (1- (length plst))
		)
		(T
		 (atoi (rtos (vlax-curve-getParamAtPoint ent pt))
		 )
		)
	      )
	 blst nil
	 wlst nil
	 n    0
   )
   (or (= typ "AcDb3dPolyline")
       (repeat (length plst)
	 (if (/= n par)
	   (setq
	     blst
	      (cons (cons (length blst) (vla-getBulge ent n))
		    blst
	      )
	   )
	 )
	 (setq n (1+ n))
       )
   )
       (if (= typ "AcDbPolyline")
     (progn
       (if (/= 0 par)
	 (progn
	   (vla-getWidth ent (1- par) 'swid1 'ewid1)
	   (vla-getWidth ent par 'swid2 'ewid2)
	   (setq wlst (cons (list (1- par) swid1 ewid2) wlst))
	 )
       )
       (repeat
	 (- (setq n (1- (fix (vlax-curve-getEndParam ent))))
	    par
	 )
	  (vla-getWidth ent n 'swid 'ewid)
	  (setq
	    wlst (cons (list (setq n (1- n)) swid ewid) wlst)
	  )
       )
     )
   )
   (vlax-put ent
	     'Coordinates
	     (apply 'append (vl-remove (nth par plst) plst))
   )
   (or (= typ "AcDb3dPolyline")
       (mapcar '(lambda (x) (vla-setBulge ent (car x) (cdr x)))
	       blst
       )
   )
   (and	(= typ "AcDbPolyline")
	(mapcar	'(lambda (x)
		   (vla-setWidth ent (car x) (cadr x) (caddr x))
		 )
		wlst
	)
   )
   (vla-EndUndoMark
     (vla-get-ActiveDocument (vlax-get-acad-object))
   )
 )
 (progn
   (alert "\nLa polyligne n'a que deux sommets.")
   (exit)
 )
     )
     (progn
(alert "Entité non valide.")
(exit)
     )
   )
 )
 (princ)
)

;;; SUBLIST Retourne une sous-liste
;;;
;;; Arguments
;;; lst : une liste
;;; start : l'index de départ de la sous liste (premier élément = 0)
;;; leng : la longueur (nombre d'éléments) de la sous-liste (ou nil)
;;;
;;; Exemples :
;;; (sublist '(1 2 3 4 5 6) 2 2) -> (3 4)
;;; (sublist '(1 2 3 4 5 6) 2 nil) -> (3 4 5 6)

(defun sublist (lst start leng / n r)
 (if (or (not leng) (    (setq leng (- (length lst) start))
 )
 (setq n (+ start leng))
 (repeat leng
   (setq r (cons (nth (setq n (1- n)) lst) r))
 )
)

;; SPLIT-LIST Retourne une liste de sous-listes
;; Arguments
;; - lst : la liste à fractionner
;; - num : un entier, le nombre d'éléments des sous listes
;; Exemples :
;; (split-list '(1 2 3 4 5 6 7 8) 2) -> ((1 2) (3 4) (5 6) (7 8))
;; (split-list '(1 2 3 4 5 6 7 8) 3) -> ((1 2 3) (4 5 6) (7 8))

(defun split-list (lst n)
 (if lst
   (cons (sublist lst 0 n)
  (split-list (sublist lst n nil) n)
   )
 )
) 

[Edité le 31/7/2008 par (gile)][Edité le 31/7/2008 par (gile)]

 

[Edité le 30/8/2008 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

hello gile

 

merci pour le LISP

 

mais j'ai un tit souci

 

j'ai tester un triangle superposé a un rectangle le truc simple

 

et je veux enlever le point en commun au rectangle

 

legacyctrlpick sur 1

 

j'arrive avec "control" a selectionner le rectangle et le mettre en surbrillance, apres

faut bien valider pour arreter le cycle mais la j'ai ca

 

 

 Entrez une nouvelle valeur pour LEGACYCTRLPICK <0>: 1
Commande: dvx
Sélectionnez le sommet à supprimer: 

Erreur: type d'argument incorrect: point 2D/3D: nil; erreur: une erreur est 
survenue dans la fonction *erreur*paramètre de la variable AutoCAD rejeté: 
"OSMODE" nil

 

oui je sais je pollue, ce "tips" n'est pas passer inapercue loll

 

a+

 

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

Re,

 

Je viens d'essayer avec LEGACYCTRLPICK à 1, effectivementça ne fonctionne pas, le cycle de sélection est différent (je me suis complètement habitué à MAJ+Espace).

 

Mais rien n'est perdu !

 

Il suffit que tu déplaces un peu le curseur pour sélectionner la polyligne que tu veux, le sommet le plus proche du curseur sera sélectionné.

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

Lien vers le commentaire
Partager sur d’autres sites

HELLO gile

 

mouai c'est pas gagné

comment tu as fait pour t'habituer a "shift+espace" lolll

j'y arrive pas c'est tjrs celui sur le dessus qui est eliminé

 

 

bon pas grave te casse pas la tete

au vue des nombreuses réponses que tu as fait et que certains n'arrivent pas a comprendre

je te sugerre de prendre un bon week end sans LISP et sans autocad

et que nous retournions a nos "etudes"

 

oupsss je pollue encore

 

a+ 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

comment tu as fait pour t'habituer a "shift+espace"

 

L'éditeur à des raccorcis claviers encore plus tordus, mais bien pratiques, par exemple, dans le même style : CTRL+SHIFT+SPACE pour finir d'écrire un mot (nom de fonction par exemple) ou le choisir dans une liste si plusieurs mots commencent par les mêmes lettres.

 

PS : avec la solution donnée dans mon dernier message, tu dois pouvoir te passer de la sélection cyclique.

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

Lien vers le commentaire
Partager sur d’autres sites

HELLO gile

 

 

ok ca marche

LEGACYCTRLPICK etait encore sur 1

 

avec

LEGACYCTRLPICK sur 0

"shift+espace" et une fois la bonne polyligne selectionnée faut plus bouger et cliquer

sinon il reprend celui sur le dessus

 

thank's

 

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

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é