Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

J'ai éssayé de me lancer dans le lisp

et j'ai un problème "d'argument" dans mon premier lisp

 

Le lisp doit exploser toutes les polylignes de ma selection...

 

 ;;; Explose les polylignes
(defun c:eaa (/js i1 ent lent typent)
(setq js (ssget))
(setq i1 0)
(repeat (sslength js)
 (setq ent (ssname js i1))
 (setq lent (entget ent))
 (setq typent (cdr (assoc 0 lent)))
 (if
  (= typent "LWPOLYLINE")
  (command "_explode" ent)
 )
 (setq i1 (+ 1 i1))
)
(princ)
)

 

- Ou est l'erreur?

 

 

 

 

 

 

 

 

Posté(e)

fait plutot comme ca

 

(defun c:eaa (/ js i1 ent lent typent)

(setq js (ssget '((0 . "LWPOLYLINE"))))

(setq i1 0)

(repeat (sslength js)

(setq ent (ssname js i1))

(command "_explode" ent)

(setq i1 (+ 1 i1))

)

(princ)

)

 

l'erreur est la

(/ js i1 ent lent typent) bon

(/js i1 ent lent typent) pas bon

 

 

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

Coucou pour répondre à ta question..... ton erreur vient de ta première ligne de commande

 

 (defun c:eaa ([surligneur]/js[/surligneur]  i1 ent lent typent)

 

Tu n'as pas mis d'espace entre "/" et "js"

 

Voilà

 

[Edité le 26/3/2009 par Arcasdk]

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

Posté(e)

Ok,

c'est pas gagné... Un espace la honte...

 

 (setq js (ssget '((0 . "LWPOLYLINE"))))

 

cela me permet d'avoir directement que des polylignes dans js, à retenir.

 

Mais je voudrais aller un peu plus loin.

Je voudrais à partir de js créer 2 jeux de selection.

- un avec que les polylignes

- un avec que des cotes pivotées.

 

est ce que s'est possible?

Posté(e)

Tout d'abord félicitation, ce mettre au lisp quand on ne connait pas

c'est un peu déroutant, surtout toutes les parenthèses.

 

Bon je rajoute mon petit grain pour ta fonction en t'expliquant les modifications:

 

 
(defun c:eaa( / js i1 ent)

(setq js (ssget)
      i1 0)

(and js
     (repeat (sslength js)
       	(if (= (cdr (assoc 0 (entget (setq ent (ssname js i1))))) "LWPOLYLINE")
		(command "_explode" ent)
	)

	(setq i1 (1+ i1))
     )
)

(princ)

)

 

Mes modifications:

- (setq ...) suivi d'un autre (setq ...) peuvent être remplacés par un seul => légèrement plus rapide

- le sslength plante si js vaut nil => d'où le (and js

- lent et typent ne sont pas nécessaire si tu ne fais rien avec => d'où le (setq ent dans le test du if

- la fonction (1+ est plus rapide (aussi) que (+ 1 ...)

 

Voilà, a+

 

 

 

;)

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)
Ok,

c'est pas gagné... Un espace la honte...

 

 (setq js (ssget '((0 . "LWPOLYLINE"))))

 

cela me permet d'avoir directement que des polylignes dans js, à retenir.

 

Mais je voudrais aller un peu plus loin.

Je voudrais à partir de js créer 2 jeux de selection.

- un avec que les polylignes

- un avec que des cotes pivotées.

 

est ce que s'est possible?

 

Tu veux faire:

- un jspoly et un jscotpiv?

- une sélection contenant les deux?

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

- (setq ...) suivi d'un autre (setq ...) peuvent être remplacés par un seul => légèrement plus rapide

OK

- le sslength plante si js vaut nil => d'où le (and js

 

OK mais à quoi sert and à part d'éviter de faire planter sslenght?

 

- lent et typent ne sont pas nécessaire si tu ne fais rien avec => d'où le (setq ent dans le test du if

 

Je préfére encore tous détailler ligne par ligne, afin de me faciliter la lecture du lisp, plus tard peut être...

 

- la fonction (1+ est plus rapide (aussi) que (+ 1 ...)

 

OK

 

Tu veux faire:

- un jspoly et un jscotpiv?

- une sélection contenant les deux?

 

Un jspoly et un jscotpiv à partir de js.

 

Un avec les 2 m'interesse aussi...

 

Merci de l'aide...

 

[Edité le 26/3/2009 par BIGC-ROMU]

Posté(e)

Re,

 

La fonction and effectue tous les tests jusqu'à arriver à un test faux.

Donc (and js (repeat...)) est équivalent à:

(and (/= js nil) (repeat..)) => ce qui fait que si js vaut nil le and s'arrête, sinon on effectue le repeat.

 

Ensuite, pour avoir les poly et cotes pivotées dans une seule sélection:

(setq js (ssget '((-4 . ""))))

 

une cote pivotée à dans son code DXF 100 "AcDbRotatedDimension"

Et comme tu veux attraper soit une poly soit une cote pivotée j'ai mis un "

 

maintenant si tu veux créer deux jeux de sélection en filtrant un autre il faut:

1) faire la première sélection

2) (setq jspoly (ssadd) jscotpiv (ssadd)) => créer deux sélections vides jspoly et jscotpiv

3) le repeat dans lequel tu testes

si (0 . "LWPOLYLINE") => (ssadd ent jspoly)

si (100 . "AcDbRotatedDimension") => (ssadd ent jscotpiv)

 

 

[Edité le 26/3/2009 par bseb67]

Tous pour lisp, Lisp pour tous!

Avec Revit, cela ne vas trop vite...

Posté(e)

Salut,

 

maintenant si tu veux créer deux jeux de sélection en filtrant un autre il faut:

1) faire la première sélection

2) (setq jspoly (ssadd) jscotpiv (ssadd)) => créer deux sélections vides jspoly et jscotpiv

3) le repeat dans lequel tu testes

si (0 . "LWPOLYLINE") => (ssadd ent jspoly)

si (100 . "AcDbRotatedDimension") => (ssadd ent jscotpiv)

 

ça marche nikel!

 

J'ai un problème avec le DXF des cotes, car on trouve plusieur fois le code de groupe 100 mais avec des descriptions différents. Comment savoir extraire la bonne description avec assoc?

 

Je souhaite exploser d'un coup toutes les entités d'un jeu de selection, j'ai essayé apply et mapcar mais ça ne marche pas, est ce que j'utilise les bonnes fonctions?

 

Posté(e)

Coucou, tu as ce site là pour savoir à quoi correspond les codes DXF.

 

C'est rangé par type d'entités.

 

http://www.autodesk.com/techpubs/autocad/acad2000/dxf/entities_section.htm 

<IMG SRC=http://peronfrederic.free.fr/banniere.jpg></IMG>

 

<a href=www.formu-lan.net>www.FormuLan.net

</a>

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é