• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

Gemeinsame Unternehmen an einem Punkt

Ich habe zuerst "all" ausgewählt und dann Ihren Code eingegeben..
ssget benötigt noch eine Auswahl, es ist nutzlos, zuerst auszuwählen.
wenn es nicht funktioniert vielleicht Ihre Version von lisp ist wirklich zu datiert..
Dies ist, was als Ssget-Liste geschrieben wird.
Ein weiteres Konto ist es vorzustellen, bevor Sie diese Auswahl schreiben. .
Ich nehme seit Jahren Notizen. 🙂
die Bedingung (-4 . ....) Ich erinnere mich falsch, dass es auch mit einem -4 geschlossen hat?
der -4 Verschluss dient mit Bedingungen wie oder, und, nicht...
(ssget "_x"(8 . "lines") (-4.)<or") "or="" (-4="" (62="" .="" 1)="" 2)="">"


Hinweis: Die 59 Sekunden oder 21 Minuten für die Prüfung der 16200 Zeilen mit dem gio_s-Code gleich halb eine Sekunde mit Autocad, gstarcad oder progecad Overkill. 😉</or")>
 
Jetzt werde ich versuchen, Ihre Auswahl für Gesichter umzusetzen, ich glaube nicht, dass es umgesetzt wird, weil es mir keinen Fehler gibt.
Ich bin sicher, dass ich falsch bin, oder ich möchte die Liste oder Syntax Erben hervorheben.
Ich hatte die Funktion auf den Linien gepostet, weil es die kompakteste ist, aber diejenige für die Gesichter auch überqualifiziert nicht.
Ich denke, sie hätten zu viele Unterschiede machen sollen, je nach Ihren Bedürfnissen.
mit den Gesichtern sind die zu vergleichenden Fälle viele.
Drehrichtung, drei oder vier Seiten, vier "falsche" Seiten oder Wiederholung eines Scheitels in jeder Position. Vielleicht haben sie es nicht umgesetzt, weil der Fall variiert wird. meine derzeit arbeiten (langsam) nur auf drei Seiten, weil ich ein und aus dem Stl, die nur drei betrachten...
Ich brauche wirklich Ihre Funktion zu drehen, denn dann sind die Vergleiche, in der geschachtelten Schleife, so viele.
z.B. für mich zwei 4 Gesichter so beschrieben
a,b,b,d oder a,b,d,d gleich sind, wie es ihnen gleich ist b,d,a,a
Ich weiß nicht, ob Autokad, Sparen, Reinigen und Beschreiben der dreiseitigen Gesichter wie a,b,c ., die es mit b,c,a, mit c,a,b und seinen inversen Sinnen vergleichen möchten.
a,b,b,c sind beispielsweise typische Wirkungsfälle einer Dehnung, die die Vertiken verdoppelt, die zwei falsch unterschiedliche erzeugen, weil sie im gleichen Punkt b bestehen.
nicht zu erwähnen die sehr langen Werte für mobile Komma, für die nach ein bisschen Rotation oder Unterteilungen alle Gesichter unterschiedlich werden, aber in der Praxis sollte theoretisch gleich sein, und ich darf nicht mehr als acht Dezimale nach dem Komma erhalten, um mich vor den Ergebnissen der Floating Point Operationen zu schützen. Ich weiß nicht, ob ich es erklären kann. Ich muss die Werte als Doppel stiften, sie als Single unterbrechen und nur dann vergleichen.
in der Tat in der Funktion auf den Zeilen, wenn Sie sehen, gibt es die Option auf dem gleichen, dass normalisiert zu einem Ton von Dezimals.
Manchmal, um es kurz zu machen, muss ich einen Dxf bei 4 Dezimals auswerfen, je mehr ich sicherlich nicht in der Presse brauche, und dann lade ich es "rein".
 
Da!
Toll! Ich fing an zu studieren und dieses Ding wählt in einer gebundenen Box!
(ssget "c"(0 0 0) '(100 100 15)) ... Objekte unter 15 Quoten und innerhalb von x und y = 100 %Sie sagen jedoch abhängig von der Reihenfolge der angegebenen Punkte wird gewinnen oder überqueren ..kurz gesagt sind wir auf dem sehr guten Weg, nur die Wesen zu finden, die zwischen ihnen zusammenfallen (und dann löschen sie)

editieren, ho korrekt, win oder cross geht für string "b", nicht "c". aber ich kann es nicht schaffen.
 
Zuletzt bearbeitet:
Ich fing an zu studieren und dieses Ding wählt in einer gebundenen Box!
(ssget "c"(0 0 0) '(100 100 15)) ... Objekte unter 15 Quoten und innerhalb von x und y = 100 %
Es tut mir leid, Ihnen schlechte Nachrichten zu geben, aber die b (box) Option ist mit einer Rechteck Auswahl, nicht an die Begrenzungsbox :rolleyes:
wenn die Punkte von rechts nach links angegeben werden, erfolgt die Auswahl mit Kreuzung, ansonsten mit Fenstern.
 
Ich dachte, es funktioniert gestern. Vielleicht. Ich habe mit vorherigen Auswahlen vermasselt, jetzt gab es mir diskontinuierliche Ergebnisse.
Jedenfalls habe ich wieder versucht, da es mich interessiert, Duplikate zu löschen.
(ssget "c"(15 15) '(15 15 15) d.h. mit zwei gleichen Dreiecken mit 15,15,15
Ich habe sie beide und nur sie, und es funktioniert auch nach der Umkehr der Rotation der zweiten!
sogar mit unterschiedlicher Höhe von Null!
statt der b gibt mir "bad string"
Ich sah meine Hilfe an, Mann, sie sind alle umgesetzt, aber die b no!!! denn das ging nicht.
cmq Ich werde Ihnen bei Überraschungen sagen.
 
Ich kann die berühmten 58 Sekunden nicht erreichen.
Sehr schnell! und ich bin auch bestraft, weil diese Version bei jeder Stornierung einen Redraw macht, dass die alte Routine nicht. Aber jetzt sehe ich es an, ich erinnere mich nicht, ob es hier oder in einem anderen Zeichnungsprogramm war, dass Sie den Redraw aussetzen können. Ehre (gewöhnlich) zu gp
Ich weiß nicht, ob ich es auf Autocad mache.
ps. Erster Entwurf geworfen das Rennen, könnte Lücken haben.

Code:
(defun deletelinecopyv)
(prompt "\ndelete line copy new: ") (setq selez(ssget))) (setq tot 0 spy 0)
(falls (/= nil selez)
(Progn)
(setq max (länge selez) Contasel 0)
(Während)
(setq en (ssname selez contasel) alist (entget en)
(falls (oder (= "3dline" (cdr(assoc 0 alist))))))))
(Progn)
(setq tot 0 numscope 0)
(setq pnta (cdr(assoc 10 alist))) pntb (cdr(assoc 11 alist))
(Setq Flatness 0)
(setq encross)
(ssdel encross)
(setq numscope (sslength encross)
;(princ (rtos numscope))
;(princ "here")

(while (und (> Numscope spy) ( /= tot 1) )

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

(falls (und (gleich pnta2 0,00000001) (gleich pntb pntb2 0,00000001)) (setq dead 1))
(falls (und (gleich pntb2 0.00000001) (gleich pntb pnta2 0,00000001)) (setq dead 1))
(setq Flatness (+ Flatness) 1)
)
)
)
(wenn (= tot 1)(entdel en))
(setq tot 0 spy 0)
(princ)
(setq contasel (+ 1 Buchhalter))
)
)
)
)
 
Hier, komm besser.
- entfernte redundante Aufgaben
- Suchfenster der Schleife reduziert auf einen Punkt (was dann mein Anfangszweck war).
Nun ist es notwendig, die Version für die Reinigung 3dface vorzubereiten, die ziemlich langweilig ist, weil die Kontrollen zwischen den Gesichtern gemacht werden, die anders scheinen, sind wirklich viele, aber dass es nicht einmal auf Autocad.
Code:
(defun deletelinecopyv)
(prompt "\ndelete line copy new: ") (setq selez(ssget)))
(falls (/= nil selez)
(Progn)
(setq max (sslength selez) contasel 0)
(Während)
(Satz in (ssname selez contasel) alist (entget in)
(falls Gold (= "3dline" (cdr(assoc 0 alist))))
(Progn)
(setq tot 0 numscope 0 spiazza 0)
(setq pnta (cdr(assoc 10 alist))) pntb (cdr(assoc 11 alist)))
(setq encross (ssget "c" pnta pnta))
(Sandel in encross)
(setq numscope (sslength encross))

(while (> Numscope spiazza) ( /= tot 1)

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

(falls (und (gleich pnta2 0.00000001)(gleich pntb pntb2 0,00000001)) (setq dead 1)
(sofern (und (gleich pnta pntb2 0.0001)(gleich pntb pnta2 0.00000001)) (satzq tot 1)
(setq spiazza (+ spiazza) 1)
)
)
)
(wenn (= tot 1)
(princ ".")
(setq contasel (+ 1 contasel))
)
)
)
)
 
wenn es jemandem dienen kann, da Autocad im Moment nicht zu tun scheint, hier auch die Routine für die doppelten 3Dfaces. einfach geschrieben, es ist nicht ausgeschlossen kann Lücken enthalten!
ps, ich kurz kommentiert, obwohl es einfach ist!
Code:
;##-##-##-##-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C-C

(defun deletefacecopy)
(Prompt "\ndelete 3dface copy: ") (setq selez(ssget))))
(falls (/= nil selez)
(Progn)
(setq max (sslength selez) contasel 0)
(Während)
(Satz in (ssname selez contasel) alist (entget in)
(wenn (= "3dface" (cdr(assoc 0 alist))))
(Progn)
(setq dead 0 numscope 0 spiazza 0 Dreieck 0 Dreieck 2 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 eventuale ripetizione di vertice
(falls (equal pntb pnta) (setq pntb pntd)
(falls (equal pntc pntb) (setq pntc pntd)
(falls (equal pntd pnta) (setq pntd pntc)
;(princ pnta )
;(princ pntb)
(princ pntc)
;(princ pntd)
(setq encross (ssget "c" pnta pnta))
(Sandel in encross)
(setq numscope (sslength encross))

(while (> Numscope spiazza) ( /= tot 1)

(setq en2 (ssname 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 eventuale ripetizione di vertice
(falls (gleich pntb2 pnta2) (setq pntb2 pntc2 pntc2 pntd2)
(falls (equal pntc2 pntb2) (setq pntc2 pntd2)
(falls zutreffend pntd2 pnta2) (setq pntd2 pntc2)

(falls (gleich pntc pntd) (Satzq Dreieck 1) )
(falls (gleich pntc2 pntd2) (setq Dreieck2 1) )

;

(wenn (und (= Dreieck 1)(= Dreieck 2))
(Progn)
(wenn (und (gleich pnta2 0,0001)(gleich pntb pntb2 0,0001)(gleich pntc pntc2 0,0001))(setq tot 1)
(wenn (und (gleich pnta pntb2 0,0001)(gleich pntb pntc2 0,0001)(gleich pntc pnta2 0,0001))(satzq tot 1)
(falls (equal pnta pntc2 0,0001)(equal pntb pnta2 0,0001)(equal pntc pntb2 0.0001)(setq dead) 1)
(wenn (und (gleich pnta2 0,0001)(gleich pntb pntc2 0,0001)(gleich pntc pntb2 0,0001)(setq to 1); umgekehrte Drehung
(falls (und (gleich pnta pntb2 0,0001)(gleich pntb pnta2 0,0001)(gleich pntc2 0,0001))(setq dead 1))
(wenn (und (equal pnta pntc2 0,0001)(equal pntb pntb2 0,0001)(equal pntc pnta2 0,0001))(setq dead) 1)
)
)
(wenn (und (= Dreieck 0)(= Dreieck 2 0)
(Progn)
(falls (und (gleich pnta2 0,0001)(gleich pntb pntb2 0,0001)(gleich pntc pntc2 0,0001)(gleich pntd2 0,0001))(setq dead 1))
(wenn (und (equal pnta pntb2 0,0001)(equal pntb pntc2 0,0001)(equal pntc pntd2 0,0001)(equal pntd pnta2 0,0001))(setq dead) 1)
(wenn (und (equal pnta pntc2 0,0001)(equal pntb pntd2 0,0001)(equal pntc pnta2 0,0001)(equal pntd pntb2 0,0001))(setq dead) 1)
(falls (und (equal pnta pntd2 0,0001)(equal pntb pnta2 0,0001)(equal pntc pntb2 0,0001)(equal pntd pntc2 0,0001))(setq dead) 1)
(wenn (und (gleich pnta2 0,0001)(gleich pntb pntd2 0,0001)(gleich pntc pntc2 0,0001)(gleich pntd pntb2 0,0001))(setq tot 1))
(falls (und (equal pnta pntd2 0,0001)(equal pntb pntc2 0,0001)(equal pntc pntb2 0,0001)(equal pntd pnta2 0,0001))(setq dead) 1)
(falls (und (equal pnta pntc2 0,0001)(equal pntb pntb2 0,0001)(equal pntc pnta2 0,0001)(equal pntd2 0,0001))(setq dead 1))
(falls (und (equal pnta pntb2 0,0001)(equal pntb pnta2 0,0001)(equal pntc pntd2 0,0001)(equal pntd pntc2 0,0001))(setq dead) 1)
)
)

(setq spiazza (+ spiazza) 1)
)
)
)
(wenn (= tot 1)
(princ ".")
(setq contasel (+ 1 contasel))
)
)
)
)
 
einen anderen Ansatz.

Zeiten auf meinem PC:
Überkill von 30.000 Linien in einer Sekunde
Code:
(Defun c:okl)
(setq sel (ssget '(0 . "line")))))
(Repeat)
(setq e_g (entget (setq e (ssname sel (setq n (1-n))))))
(Setq c (Liste (cdr (assoc 10 e_g))
(falls (oder Mitglied c lc) (Mitglied c) lc))
(entdel e)
(Setq lc (cons c lc))
)
)
)
Überkill von 30.000 3Dfaces in 16/17 Sekunden (der Autocad verwendet 5)
Code:
(Defun c:ok3df)
(setq sel (ssget '(0 . "3dface"))))
(setq lv (list 0)
(Repeat)
(setq e_g (entget (setq e (ssname sel (setq n (1-n))))))
(Satz c (Liste cdr (assoc 10 e_g)) (cdr (assoc 11 e_g))) (cdr (assoc 12 e_g)))
(setq lv_tot lv)
(while lv_tot)
(falls
(und
(Auto c) (Auto lv_tot)
(Mitglied)
(Mitglied (caddr c) (Auto lv_tot))
(Mitglied (cadddr c) (Auto lv_tot))
)
(Progn)
(entdel e)
(setq lv_tot nil)
)
(setq lv_tot (cdr lv_tot)
)
)
(setq lv (cons c lv))
)
)
Da es nur behandelt 3 dreieckige Gesichter Ich habe keine Zeit verloren, um Unterscheidungen zu machen, dann ist Aufmerksamkeit deshalb, dass sie sowohl die 4 Vertiken als auch die dreieckigen, die 3 mit der ersten teilen gelöscht werden.
Sehen Sie, ob es funktioniert.
 
schon versucht, es funktioniert!
Die Idee, jeden Gipfel zu vergleichen, wenn er auf der Liste ist, aber wie existiert er auf Autocad? Referenzen sagen, Overkill funktioniert nicht auf 3Dfaces.
Es funktioniert sowohl auf drei als auch auf 4, das Problem ist, was Sie wissen, wenn ein dreiseitiges Gesicht auf einem größeren 4 besteht, auf diese Weise die drei vien gelöscht das gleiche, auch wenn es anders ist.
was kein Problem sein mag, weil stl nicht überdeckte Flächen haben sollte. . und wäre in jedem Mesh falsch zu drucken.
Aber das Problem, das ich sehe, ist, was vom Schwimmer kommt.
Sie sollten eine Grenze im Vergleich setzen, weil die letzten Dezimals anders sein könnten.
Ein Beispiel ist nicht gesagt, dass eine Teilung durch 2 den gleichen Mittelpunkt (auf der Ebene der letzten Dezimals) erzeugt. Ich kann nicht sagen wann, aber es passiert ziemlich oft, auch wenn Sie Gesichter schütteln.
In der Praxis muss ich immer mit einem Maximum von Dezimals vergleichen, nicht alle, ich muss normalerweise die letzten 2 schneiden, sonst geht der Vergleich oft nicht zu einem guten Ende. Ich weiß nicht, ob ich gut sagte oder nicht gut erklärt habe, ich bin kein Mathematiker, aber es ist das übliche Präzisionsproblem der mobilen Komma.
Ich muss tun (gleich pnta2 0.0001) ... oder mindestens 0,00000001
kann auch wegen der Umwandlung in und aus stl zwischen Einzel und Doppel und umgekehrt sein... Ich glaube nicht, dass ich high bin.
Vielen Dank, die Idee der Verwendung von Mitglied ist immer interessant!
 
Esempio:

(Setq x 1)
(Setq und (/ x 453.89)
(Setq und (* und 453.89)
(falls (equal x e) (princ "ok")
--------------
(Setq x 1)
(Setq und (/ x 453.89)
(Setq und (* und 453.89)
(falls (gleich x und 0,00001) (princ "ok")
 
für gp
Ich habe Ihre Routine an 20 Gesichtern versucht und es funktionierte gut.
Heute wollte ich es aber auf einen echten Job anwenden, und ich hatte Probleme.
Ich möchte nicht, dass es ein Gedächtnisproblem meines PCs ist, oder meine Lispe.
Wenn ich die Routine auf dem Rad inera anwende, (die ich hier extrapoliert von meiner Arbeit und verdoppelte die Gesichter zu der Zeit), scheint es zu stürzen, nichts bewegt sich.
wenn ich versuche, nur etwa dreihundert Gesichter auszuwählen, beginnt es, die Doppel zu löschen, aber sehr langsam, und dann, nach einer Minute oder, es schief geht und die Lisp schießt mich aus einer Reihe von Punkten nicht zu Ende.
Ich für das ganze Rad, mit meiner Routine, die die Gesichter halbiert, benutze ich etwa 23 Sekunden.
Was wird es sein? so viel zu verstehen, wenn es meine babble lisp ist...
der Fremde ist, dass mit ein paar Gesichtern keine Falte macht. Ich bin auch Ihrer Datei beigetreten. Forum.de
 

Anhänge

boh... es funktioniert ziemlich gut für mich.
i7 13700 - ram 64gb - nvidia rtx4070
646.gifautocad overkill macht es in 1 Sekunde.
 
Danke, dass ich denke, dass es wie mein Autolisp mit Gedächtnis umgeht, nach einer Weile beginnt er mich zu erschießen alle Punkte, aber nicht sofort, nach einer Weile arbeitet er. aber ohne Code, wie wenn Sie die Lispe vermissen und eine Art Debug herauswerfen...
Danke!
 

Anhänge

  • Clipboard01.jpg
    Clipboard01.jpg
    315,3 KB · Aufrufe: 4
1712303341069.pngdas ist der Verschluss, was die Lispe macht, ein (princ) vor dem letzten Bügel einfügen, um es nicht mehr zu sehen
 
aber warum erst nach viel Arbeit? Er tut es jetzt nicht. Er tut es nach einer Weile, die er bereits abgesagt hat und wenn er fertig ist.
 
Okay, ich verstehe. Schließen Sie die Auswahl an und starten Sie die Ausgabe auf der Soo-Befehlszeile mit dem während des Zyklus....
also stürzt es auch nicht auf mich, mit vielen erweiterten Auswahlen.
Nur dass mit meiner Lispe, die ganze Auswahl vorzubereiten, ein Leben dauert und ich dachte, es wäre gefroren. Danke. Es ist nur so, wie er die lisp Erinnerung an meinen alten Intellicad behandelt.
auch, weil auf dem PC, dass ich mächtiger, aber mit dem gleichen sw, ist es nicht so deutlich besser, es Hälften mir nur die Zeiten.
Danke!
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben