• Ce forum est la traduction générée par la machine de www.cad3d.it/forum1 - la communauté italienne du design. Plusieurs termes ne sont pas traduits correctement.

entités communes à un moment donné

  • Auteur du sujet Auteur du sujet Gio_S
  • Date de début Date de début
J'ai d'abord sélectionné "tout", puis entré votre code..
ssget nécessite toujours une sélection, il est inutile de sélectionner d'abord.
s'il ne fonctionne pas peut-être votre version de lisp est vraiment trop datée.. .
C'est ce qui est écrit comme une liste de ssget.
un autre compte est de l'imaginer avant d'écrire cette sélection. . . .
Je prends des notes depuis des années. Les
la condition (-4 ...) Je me rappelle qu'il a fermé aussi avec un -4 ?
la -4 fermeture sert avec des conditions comme ou, et, pas...
(score "_x"((8 . "lignes") (-4) " .<or") "or="" (-4="" (62="" .="" 1)="" 2)="">")


Note : les 59 secondes ou 21 minutes utilisées pour tester les 16200 lignes avec le code gio_s équivalent à une demi-seconde avec autocad, gstarcad ou progecad surkill. ( )</or")>
 
Maintenant, je vais essayer d'implémenter votre sélection pour les visages, je ne pense pas qu'elle soit implémentée, parce qu'elle ne me donne aucune erreur.
J'ai sûrement tort, ou j'aimerais mettre en évidence les héritiers de la liste ou de la syntaxe.
J'avais posté la fonction sur les lignes parce que c'est la plus compacte, mais celle pour les visages aussi trop qualifiée ne le fait pas.
Je pense qu'ils auraient dû faire trop de distinctions, selon vos besoins.
avec les visages les cas à comparer sont nombreux.
direction de rotation, trois ou quatre côtés, quatre côtés « faux », ou répétition d'un vertex dans n'importe quelle position. Peut-être ne l'ont-ils pas mise en œuvre parce que le cas est varié. mon travail actuel (slowly) seulement sur trois côtés, parce que j'entre et sors de la stl qui ne considère que trois...
J'ai vraiment besoin que votre fonction tourne, parce que les comparaisons, dans la boucle imbriquée, sont tellement nombreuses.
par exemple pour moi deux 4 visages décrits ainsi
a,b,b,d ou a,b,d,d sont égaux... comme c'est pour eux égaux b,d,a,a
Je ne sais pas si l'autocad, l'épargne, le nettoyage et la description des visages à trois faces comme a,b,c . qui voudraient le comparer avec b,c,a, avec c,a,b et ses sens inverses.
a,b,b,c par exemple sont des cas typiques d'effet d'un étirement qui double les sommets créant deux faussement différents parce qu'ils persistent dans le même point b.
Sans parler des très longues valeurs aux virgules mobiles, pour lesquelles, après un peu de rotation, ou des subdivisions, tous les visages deviennent différents, mais en pratique devraient théoriquement être égaux, et je ne dois pas obtenir plus de huit décimales après la virgule, pour me protéger des résultats des opérations de point flottant. Je ne sais pas si je peux t'expliquer. Je dois épingler les valeurs comme double, les interrompre comme simples, et seulement ensuite les comparer.
en fait dans la fonction sur les lignes si vous voyez il y a l'option sur l'égal qui normalise à un tot de décimales.
Parfois, pour faire court, je dois jeter un dxf à 4 décimales, plus je n'ai certainement pas besoin dans la presse, et puis je le recharge "propre".
 
Voilà !
Génial ! J'ai commencé à étudier et cette chose sélectionne dans une boîte limitée !
(sget "c"(0 0 0) '(100 100 15)) ... objets de moins de 15 ans du contingent et dans les limites de x et y = 100Cependant, ils disent que selon l'ordre des points déclarés sera gagnant ou le croisement ..bref, nous sommes sur la très bonne voie pour trouver seulement les entités qui coïncident entre eux (et ensuite les supprimer)

éditer, ho corriger, gagner ou croix va pour la chaîne "b", pas "c". Mais je ne peux pas.
 
Dernière édition:
J'ai commencé à étudier et cette chose sélectionne dans une boîte limitée !
(sget "c"(0 0 0) '(100 100 15)) ... objets de moins de 15 ans du contingent et dans les limites de x et y = 100
Je suis désolé de vous donner de mauvaises nouvelles, mais l'option b (box) est liée à un rectangle de sélection, à l'exclusion de la boîte de délimitation :
si les points sont spécifiés de droite à gauche, la sélection se fait avec le croisement, sinon avec les fenêtres.
 
Je croyais que ça marchait hier. Peut-être J'ai foiré avec les sélections précédentes, maintenant ça m'a donné des résultats discontinus.
De toute façon maintenant j'ai essayé à nouveau car cela m'intéresse de supprimer les duplicatas.
(c'est-à-dire avec deux triangles égaux avec 15,15,15)
Je les ai tous les deux et seulement eux, et cela fonctionne aussi après avoir inversé la rotation de la seconde !
même avec une élévation différente de zéro!
Au lieu de cela, le b me donne "mauvaise corde"
J'ai regardé mon aide, mec, ils sont tous implémentés mais le b no!!! Car ça n'a pas marché.
Je vous le dirai en cas de surprise.
 
Je ne peux pas atteindre la célèbre 58 secondes mais maintenant c'est une autre histoire ! ! !
Très vite ! et je suis aussi pénalisé parce que cette version fait un reraw à chaque annulation que l'ancienne routine ne l'a pas fait. Mais maintenant je le regarde, je ne me souviens pas si c'était ici ou dans un autre programme de dessin que vous pouvez suspendre le redraw. honneur (habituel) à gp
Je ne sais pas si je le fais sur autocad.
ps. première ébauche jetée dans la course, pourrait avoir des lacunes.

Code:
(defun delelinecopyv ()
(prompt "\ndelete line copy new: ") (setq selez(ssget)) (setq mort 0 espion 0)
(si (/= zéro sel)
(progrès)
(setq max (longueur) Contasel 0)
(alors que (> max contasel)
(setq en (ssname selez contasel) alist (enget en)
(si (ou (= "3dline" (cdr(assoc 0 alist)))) (= "ligne" (cdr(assoc 0 alist))))
(progrès)
(setq mort 0 numscope 0)
(setq pnta (cdr(assoc 10 alist)) pntb (cdr(assoc 11 alist))
(plateté fixe 0)
(setq encross)
(sselle en travers)
(setq numscope (longueur en travers)
;(principaux (numscope rtos))
;(principal "ici")

(alors que (et (> numscope espion) ( /= mort 1) )

(setq en2 (ssname encross pavement) alist2 (entget en2))
(setq pnta2 (cdr(assoc 10 alist2)) pntb2 (cdr(assoc 11 alist2))

(si (et (égal pnta2 0,00000001) (égal pntb pntb2 0,00000001)) (setq mort 1)
(si (et (égal pntb2 0,00000001) (égal pntb pnta2 0,00000001)) (setq mort 1)
(plateté assise (+ planeté) 1) )
)
)
)
(si (= mort 1))
(setq mort 0 espion 0)
(principal)
(setq contasel (+ 1 comptable))
)
)
)
)
 
Tiens, va t'améliorer.
- suppression des affectations redondantes
- fenêtre de recherche de la boucle réduite à un point (qui était alors mon but initial).
maintenant il est nécessaire de préparer la version pour le nettoyage 3dface, ce qui est assez ennuyeux parce que les contrôles à faire entre les visages qui semblent être différents sont vraiment beaucoup, mais qu'il n'y a même pas sur autocad.
Code:
(defun delelinecopyv)
(prompt "\ndelete line copy new: ") (setq selez(ssget))
(si (/= zéro sel)
(progrès)
(setq max (longueur) contasel 0)
(alors que (> max contasel)
(setq in (sssname selez contasel) alist (enter)
(si ( or (= "3dline" (cdr(assoc 0 alist)))
(progrès)
(setq mort 0 numscope 0 spiazza 0)
(setq pnta (cdr(assoc 10 alist)) pntb (cdr(assoc 11 alist))
(setq encross)
(sselle en croix)
(setq numscope (longueur))

(alors que (> numscope spiazza) ( /= mort 1)

(setq en2 (sssname encross spiazza) alist2 (entget en2)
(setq pnta2 (cdr(assoc 10 alist2)) pntb2 (cdr(assoc 11 alist2))

(si (et (equal pnta2 0,00000001)(equal pntb pntb2 0,00000001))
(si (et (égale pnta pntb2 0,00000001) (égale pntb pnta2 0,00000001)) (décédée 1)
(setq spiazza (+ spiazza) 1) )
)
)
)
(si (= mort 1)
(principal ".")
(setq contasel (+ 1 contasel))
)
)
)
)
 
s'il peut servir à quelqu'un, puisque l'autocad à l'heure actuelle semble ne pas le faire, placez ici aussi la routine pour le duplicata 3dfaces. juste écrit, il n'est pas exclu peut contenir des lacunes!
ps, j'ai brièvement commenté bien que ce soit simple!
Code:
Il n'y a pas de lien direct entre les deux parties.

(supprimer)
(prompt "\ndellete 3dface copy: ") (setq selez(ssget)))
(si (/= zéro sel)
(progrès)
(setq max (longueur) contasel 0)
(alors que (> max contasel)
(setq in (sssname selez contasel) alist (enter)
(si (= "3dface" (cdr(assoc 0 alist)))
(progrès)
(setq mort 0 numscope 0 spiazza 0 triangle 0 triangle2 0)
(setq pnta (cdr(assoc 10 alist) pntb (cdr(assoc 11 alist)) pntc (cdr(assoc 12 alist) pntd (cdr(assoc 13 alist))

spinge a d ogni éventuellement mûritizione divertice
(si (égal pntb pnta) (setq pntb pntc pntd)
(si (égal pntc pntb) (setq pntc pntd)
(si (égal pntd pnta) (setq pntd pntc)
;(princ pnta )
;(princ pntb )
;(princ pntc )
;(princ pntd )
(setq encross)
(sselle en croix)
(setq numscope (longueur))

(alors que (> numscope spiazza) ( /= mort 1)

(setq en2 (sssname encross spiazza) alist2 (entget en2)
(setq pnta2 (cdr(assoc 10 alist2)) pntb2 (cdr(assoc 11 alist2))
(setq pntc2 (cdr(assoc 12 alist2)) pntd2 (cdr(assoc 13 alist2))

spinge a d2 ogni éventuellement mûritizione divertice
(si (égal pntb2 pnta2) (setq pntb2 pntc2 pntc2 pntd2)
(si (égal pntc2 pntb2) (setq pntc2 pntd2)
(si (égal pntd2 pnta2) (setq pntd2 pntc2)

(si (égal pntc pntd) (triangle setq 1) )
(si (égal pntc2 pntd2) (triangle setq2 1) )

;(principal (triangle rtos) )

(si (et (= triangle 1) = triangle 2 1) ; 3 lati
(progrès)
(si (et (equal pnta2 0,0001)(equal pntb pntb2 0,0001)(equal pntc pntc2 0,0001))(setq mort 1) )
(si (et (equal pnta pntb2 0.0001) (equal pntb pntc2 0.0001) (equal pntc pnta2 0.0001) (setq mort)
(si (equal pnta pntc2 0,0001)(equal pntb pnta2 0,0001)(equal pntc pntb2 0,0001))(setq mort 1) )
(si (et (equal pnta2 0,0001)(equal pntb pntc2 0,0001)(equal pntc pntb2 0,0001))(setq mort 1) ; rotation inverse
(si (et (equal pnta pntb2 0.0001)(equal pntb pnta2 0.0001)(equal pntc2 0.0001))(setq dor 1) )
(si (et (equal pnta pntc2 0,0001)(equal pntb pntb2 0,0001)(equal pntc pnta2 0,0001))(setq mort 1) )
)
)
(si (et (= triangle 0) = triangle 2 0) ; 4 lati
(progrès)
(si (et (égal pnta2 0,0001)(égal pntb pntb2 0,0001)(égal pntc pntc2 0,0001)(égal pntd pntd2 0,0001))(setq mort 1) )
(si (et (equal pnta pntb2 0.0001)(equal pntb pntc2 0.0001)(equal pntc pntd2 0.0001)(equal pntd pnta2 0.0001))(setq mort 1) )
(si (et (égal pnta pntc2 0,0001)(égal pntb pntd2 0,0001)(égal pntc pnta2 0,0001)(égal pntd pntb2 0,0001))(setq mort 1) )
(si (et (equal pnta pntd2 0,0001)(equal pntb pnta2 0,0001)(equal pntc pntb2 0,0001)(equal pntd pntc2 0,0001))(setq mort 1) )
(si (et (equal pnta2 0.0001)(equal pntb pntd2 0.0001)(equal pntc pntc2 0.0001)(equal pntd pntb2 0.0001))(setq mort 1) ; rotation inverse
(si (et (equal pnta pntd2 0.0001)(equal pntb pntc2 0.0001)(equal pntc pntb2 0.0001)(equal pntd pnta2 0.0001))(setq mort 1) )
(si (et (equal pnta pntc2 0.0001)(equal pntb pntb2 0.0001)(equal pntc pnta2 0.0001)(equal pntd pntd2 0.0001))(setq mort 1) )
(si (et (equal pnta pntb2 0.0001)(equal pntb pnta2 0.0001)(equal pntc pntd2 0.0001)(equal pntd pntc2 0.0001))(setq mort 1) )
)
)

(setq spiazza (+ spiazza) 1) )
)
)
)
(si (= mort 1)
(principal ".")
(setq contasel (+ 1 contasel))
)
)
)
)
 
une approche différente.

heures sur mon PC:
overkill de 30 000 lignes en une seconde
Code:
(défun c:okl ( / sel n eg e c lc )
(setq sel (sget '(0 . " ligne")))
(répéter (longueur))
(setq e_g (entget (setq e (sssname sel (setq n (1-n))))))
(setq c (liste (cdr (assoc 10 e_g)))
(si (ou membre c lc) (membre c) lc)
(endel e)
(setq lc (cons c lc))
)
)
)
overkill de 30 000 3 faces en 16/17 secondes (l'autocad utilisé 5)
Code:
(défun c:ok3df ( / sel lv n e_g c lv_tot c e )
(setq sel (sget '(0 . " 3dface")))
(setq lv (liste 0)
(répéter (longueur))
(setq e_g (entget (setq e (sssname sel (setq n (1-n))))))
(setq c (liste (cdr (assoc 10 e_g)) (cdr (assoc 11 e_g)) (cdr (assoc 12 e_g)))
(setq lv_tot lv)
(alors que lv_tot
(si
(et
(car c) (car lv_tot)
(membre (c)
(membre (caddr c) (car lv_tot))
(membre (cadddr c) (car lv_tot))
)
(progrès)
(endel e)
(setq lv_tot zéro)
)
(setq lv_tot (cdr lv_tot))
)
)
(setq lv (cons c lv))
)
)
Puisqu'il traite seulement 3 faces triangulaires Je n'ai pas perdu le temps de faire des distinctions, alors l'attention est 4 donc qu'ils sont effacés à la fois les sommets et les triangulaires qui partagent 5 avec le premier.
Regarde si ça marche.
 
J'ai déjà essayé, ça marche !
L'idée de comparer chaque sommet s'il est sur la liste, mais comment existe-t-il sur autocad? les références disent que l'excès de compétences ne fonctionne pas sur 3 faces.
Il fonctionne à la fois sur trois et sur quatre, le problème est ce que vous savez, si un visage à trois faces insiste sur un plus grand 4, de cette façon les trois Vien ont effacé la même même même si elle est différente.
qui n'est peut-être pas un problème, car stl n'aurait pas dû chevaucher les visages. . et aurait tort dans chaque maille à imprimer.
Mais le problème que je vois est ce qui vient du flotteur.
vous devriez mettre une limite en comparaison parce que les dernières décimales pourraient être différentes.
un exemple, on ne dit pas qu'un clivage par 2 génère le même point médian (au niveau des dernières décimales). Je ne peux pas dire quand, mais ça arrive souvent, même quand on secoue les visages.
Dans la pratique, je dois toujours comparer avec un maximum de décimales, pas toutes, je dois généralement couper les 2 dernières, sinon la comparaison ne va souvent pas à la bonne fin. Je ne sais pas si j'ai bien dit ou je n'ai pas bien expliqué, je ne suis pas mathématicien, mais c'est le problème habituel de précision de la virgule mobile.
Je dois faire (égal pnta2 0,0001) ... ou au moins 0,00000001
peut aussi être à cause de la conversion à l'intérieur et à l'extérieur stl entre simple et double et vice versa... Je ne pense pas être défoncé.
Merci beaucoup, l'idée d'utiliser un membre est toujours intéressante!
 
Oui.

(setq x 1)
(setq et (/ x 453,89)
(setq et (* et 453.89)
(si (égal x e) (principal "ok")
[En milliers de dollars des États-Unis]
(setq x 1)
(setq et (/ x 453,89)
(setq et (* et 453.89)
(si (égal x et 0,00001) (principal «ok»)
 
pour gp
J'ai essayé votre routine sur 20 visages, et ça a bien marché.
Aujourd'hui, cependant, je voulais l'appliquer à un vrai travail, et j'avais des problèmes.
Je ne voudrais pas que ce soit un problème de mémoire de mon PC, ou mon liss,
Si j'applique la routine sur l'inera de roue, (que j'ai ici extrapolé de mon travail et doublé les visages à l'époque), il semble s'écraser, rien ne bouge.
si j'essaie de sélectionner seulement environ trois cents visages, il commence à effacer les doubles, mais très lentement, et puis, après une minute ou cela, il va mal et le lisp me tire une série de listes de points à ne pas finir.
Moi pour toute la roue, avec ma routine, qui réduit de moitié les visages, j'utilise environ 23 secondes.
Ce sera quoi ? tant de choses à comprendre si c'est mon babble lis...
l'étrange est qu'avec quelques visages ne fait pas une ride. J'ai aussi rejoint votre dossier. Forum.lsp
 

Pièces jointes

Merci je pense que c'est comme mon autolisp gère la mémoire, après un certain temps il commence à me tirer dessus tous les points, mais pas immédiatement, après un certain temps il travaille. Mais sans code, comme quand tu rates le lisp et jettes une sorte de débogue...
Je vous remercie !
 

Pièces jointes

  • Clipboard01.jpg
    Clipboard01.jpg
    315.3 KB · Affichages: 4
1712303341069.pngc'est la fermeture de ce qui fait le lisp, insérer un (principal) avant le dernier support pour ne plus le voir
 
Mais pourquoi seulement après beaucoup de travail ? Il ne le fait pas en ce moment. Il le fait après un moment, il est déjà annulé et quand il a fini.
 
J'ai compris. Tais-toi en préparant la sélection... et démarre la sortie sur la ligne de commande Soo avec le cycle...
donc il ne s'écrase pas sur moi non plus, avec beaucoup de sélections étendues.
Juste qu'avec mon lisp, pour préparer toute la sélection prend une vie et je pensais que c'était gelé. Je vous remercie. C'est comme ça qu'il s'occupe de la mémoire de ma vieille intelligence.
aussi parce que sur le PC que j'ai plus puissant, mais avec le même essai, ce n'est pas beaucoup mieux, il me réduit de moitié seulement les temps.
Je vous remercie !
 

Statistiques du forum

Sujets
58 521
Messages
499 056
Membres
104 110
Dernier membre
ChristianR

Membres en ligne

Aucun membre en ligne actuellement.
Retour
Haut