Aller au contenu

synoptique


PHIL-lang

Messages recommandés

Bonjour, j'ai un programme Lisp synoptique qui classe les blocs en fonction des "attributs" ADRESSE.
 Il fonctionne si l'adresse est saisie comme ceci :
 001 002 003 004, etc. ou 1 2 3 4, etc.

J'aimerais qu'il puisse mettre les blocs dans l'ordre avec l'adresse saisie comme suit :
 L1-001 L1-002 L1-003, etc. ou
 1/1/1-001 1/1/1-002 1/1/1-003 1/1/1-004, etc.
Merci pour votre aide. Cordialement, Philip.

(defun c:SYNOD (/ *error* _No-p sel i sn en p)
(defun *erro* (x) (setvar 'cmdecho 1) (princ "*Cancel*"))
(defun _No-p (nxt / e No)
(while (not (eq (cdr (assoc 0 (setq e (entget nxt)))) "SEQEND"))
(if (and (eq (cdr (assoc 0 e)) "ATTRIB")
(numberp (read (cdr (assoc 1 e))))
)
(setq No (cdr (assoc 1 e)))
)
(setq nxt (entnext nxt))
)
No
)
(if (setq sel (ssget "_:L" '((0 . "INSERT") (66 . 1))))
(repeat (setq i (sslength sel))
(setq sn (ssname sel (setq i (1- i))))
(if (and (setq p (read (_No-p (entnext sn))))
(numberp p)
)
(progn
(setvar 'cmdecho 0)
(command "_.move"
sn
""
"_none"
(cdr (assoc 10 (entget sn)))
"_none"
(list p 0. 0.)
)
(setvar 'cmdecho 1)
)
)
)
)
(princ)
)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Ce LISP cherche un attribut du bloc dont la valeur est un nombre et utilise ce nombre  comme coordonnée X pour déplacer le bloc. Si tu veux que ça fonctionne avec un attribut dont la valeur n'est pas un nombre, il faut que tu explique comment tu souhaite que les blocs soir déplacés et que tu fournisse un (ou plusieurs) fichiers ave des exemple de blocs pertinents.

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

Lien vers le commentaire
Partager sur d’autres sites

on m'a proposé ceci

mais soi je n'arrive pas a l'integrer au lisp d’origine

soi c'est une mauvaise direction

 

(defun en(txt) ; EndingNumber
(setq i (1+ (strlen txt)) lst nil)
(while (> i 0)
  (setq c1 (substr txt (setq i (- i 1)) 1))
  (cond
    ((numberp (read c1)) (setq lst (cons c1 lst)))
    (t (setq i nil))
    )
  )
  (setq nr 0)
  (foreach x lst
    (setq nr (+ (* 10 nr) (read x)))
    )
  )
Lien vers le commentaire
Partager sur d’autres sites

Coucou @PHIL-lang,
Cela ne me semble pas du tout fonctionnel. Ce que @(gile) demandait ici

Le 26/02/2024 à 22:41, (gile) a dit :

il faut que tu explique comment tu souhaite que les blocs soir déplacés et que tu fournisse un (ou plusieurs) fichiers ave des exemple de blocs pertinents.

c'est que tu expliques ce que tu désires réaliser et fournisse un .dwg d'exemple avec les blocs à considérer pour le programme et un exemple avant/après pour bien comprendre les démarches à suivre. Cela va nous permettre ensuite de traduire ta demande d'un point de vue algorithmique pour développer un programme répondant directement à ton besoin.

Par exemple, qu'entends-tu par

Le 26/02/2024 à 18:15, PHIL-lang a dit :

un programme Lisp synoptique qui classe les blocs en fonction des "attributs" ADRESSE

? En clair, que signifie le terme "classe" dans ta phrase ci-dessus ? Cela correspond probablement à un déplacement ou bien une copie des blocs à un endroit particulier ? Est-ce sous forme de tableau ? De liste (Horizontale ou Verticale ?) ? Bref, je suppose que tu t'appuies sur ChatGPT ou du moins une IA pour te proposer des programmes et cela n'est malheureusement pas la démarche à suivre (du moins pour le LISP, car c'est un langage trop peu utilisé pour permettre à l'IA d'être pertinente sur ses propositions). Je te suggère donc de nous donner l'ensemble des données/informations/contraintes relatives à ton besoin afin que l'on puisse t'aider au mieux en te proposant des programmes répondant à ton besoin.

Plus tu fourniras de détails dans les instructions à suivre, plus il sera facile et rapide pour nous de cibler ton besoin et d'y répondre efficacement par le biais de programmes déjà existants ou bien en développant un nouveau programme. En espérant que se soit suffisamment clair pour toi 🙂

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Est-ce que c'est toujours le signe - qui est utilisé pour séparé la partie non numérique de la partie nombre? Et si oui, est-ce que le nombre est toujours en 2ème position?

Si oui aux 2 questions, il suffit de tester, non pas la totalité de la valeur de l'attribut, mais uniquement la partie après le signe -

Personnellement, j'aurais ajouté un second attribut invisible au bloc, puis ATTOUT pour exporter les données en txt, puis ouvert sous Excel, faire la séparation de la partie numérique dans le 2ème attribut, puis ATTIN et lancer le lisp pour trier sur l'attribut invisible qui ne contient que des chiffres.

 

Olivier

Lien vers le commentaire
Partager sur d’autres sites

Bonjour Gilles

quelqu’un a solutionner le problème,

voici le code

(defun c:pp()
  (setq ss (ssget "_:L" '((0 . "INSERT")(66 . 1))))
  (repeat (setq i (sslength ss))
    (setq b1 (ssname ss (setq i (1- i))) b0 (entget b1))
    (while (and (/= (cdr (assoc 0 (setq b1l (entget b1)))) "SEQEND") (/= (cdr (assoc 2 b1l)) "ORDRE"))
      (setq b1 (entnext b1))
      )
    (setq txt (cdr (assoc 1 b1l)))
    (setq p (1+ (strlen txt)) nr nil)
    (while (and (> p 0) (not nr))
      (setq c1 (substr txt (setq p (1- p)) 1))
      (setq nr (if (numberp (read c1)) nil (read (substr txt (1+ p)))))
      )
    (setq b0 (subst (list 10 nr 0.0 0.0) (assoc 10 b0) b0))
    (entmod b0)
    )
  (command "_.ATTSYNC" "" (ssname ss 0) "")
  (setq ss nil)
  )
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é