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

Kopieren mit Rotation (und Übersetzung)

  • Ersteller Ersteller Gio_S
  • Erstellt am Erstellt am

Gio_S

Guest
Ich schwöre, es ist keine Faulheit, aber vielleicht für jemanden, der Geometrie in seinem Kopf hat, war es ein Viertel einer Stunde... denn ich wäre zwei Arbeitstage (zumindest)
Problem (Qualitätsreaktion auch nur für Routine auf dem einfachen Punkt) :
nehmen Sie eine 3d Oberfläche, bestehend aus 3dfaces
gelenkt auf einem Boden, ich mache Beispiel, ein Teil der Porphyr in Würfeln mit seinen gravierten Stängeln ....
und...
rotieren/übersetzen jede Fläche um einen Zylinder, erzeugen als 3d Stempel, die bei Rotation arbeiten (Typ Rolle aus Polster).
Da das Ergebnis modular und repetitiv sein muss, ist die Länge der Oberfläche gleich dem Durchmesser des Zylinders * faul.
Ich verstehe, dass ich viel frage:)
Ziel ist es, "Typen" von der Modellierung zu schaffen, 3d Oberflächen auf formbaren Materialien auf dem Boden platziert.
 
Ich vergaß... in reiner Lispe, sind nicht für vba und ähnliche
Ich begann auf elementarster und klassischer Weise zu entwickeln, ich finde die Länge des durch die Drehung des Punktes gebildeten Lichtbogens (der seine x-Flachheit auf der Ebene, auf der die Zeichnung liegt), dessen Winkel mich zur Brust und Kosinus bringt, die jeweils die z und x des neuen geschaffenen Punktes sein wird (y ändert sich nicht, da die Achse des Zylinders den Vektor 0,1,0) hat. .
Ich hoffe, ich habe richtig angefangen.
 
eine Stunde gestern und eine halbe Stunde heute.. alles falsch aber gleicht der klassischen "Hallo-Welt" auf dem Bildschirm ahahahah
also, um zu beginnen Ich benutzte einfache Linien, in einem Bild auf dem positiven Zifferblatt (orig. 0,0,0) Seite = pi
Ich gab den Befehl und, glaube ich, nonle gedreht auf dem Zylinder, aber auf seinem 90-Grad-Spike
(siehe Sequenzentwicklung.. 1 rot war das Original, 1 schwarz die Zeile erstellt)
Inzwischen ruhen und ihn dekantieren lassen, dann nehme ich es zurück in die Hand, aber mit 3dface verstreut, die lesbarer wird.
Es ist klar, dass es falsch ist, die negativen Ziffern nicht berücksichtigt... und ich habe nicht die pallidest Idee (für jetzt) warum er alles auf einen 90-Grad konzentrierte... aber die (falsche Proportionen) und Feiern, es gibt.Immagine.JPG
Code:
(defun hprint()
(setq selez nil)
(setq selez(ssget))
(falls (/= selez nil)
(Progn)
(setq l(sslength selez)
(Setq l(1- l)
(Sectq na 0)
(Während(< = na l)
(setq ename(sname selez na))
(setq alist(entget ename))
(if(= "line"(cdr(assoc 0 alist))))
(Progn)
(Setq a(cdr(assoc 10 alist))))
(setq b(cdr(assoc 11 alist))))
(setq ax (car a) ay (cadr a) az (caddr a)))
(setq bx (car b) von (cadr b) bz (caddr b))))
; angenommen, um das zu verwickelnde Band stärker zu entwickeln, so daß der Zylinder 1 ist
;1415926535
(setq angrada (/ ax pi)
(setq angradb (/bx pi))

(setq newaz)
(setq newax (cos angrada)
(setq neway ay)

(setq newbz (sin angradb))
(setq newbx (cos angradb))
(satzq newby by) ; nur für die Lesbarkeit

(setq newa (list newax neway newaz))
(setq newb (list newbx newby newbz))
(Befehl "line" newa newb ")
)
)
(Sectq na(1+ na))
)
)
)
)
 
Ich komme näher, Code schreibt etwas an meine Nase, ohne zu wissen, was ich tue.
Allerdings funktioniert es, aber mit einer Verpflichtung, die ich entfernen möchte.
die "Schiff", d.h. die Länge der Anlage, auf 3Dface gebaut, die genau eine Walze bilden muss, mit diesem Code muss genau lang sein (pi * mehr * 2), d.h. fast 20.
Ich möchte, dass es frei ist, auch wenn es zu meinem Zweck in Ordnung ist.
i.e. Ich freue mich, dass jede Pflanze ihren entsprechenden geschlossenen Ring bildet.
Clipboard01.jpg


Code:
(defun hprint()
(setq selez nil)
(setq selez(ssget))
(falls (/= selez nil)
(Progn)
(setq l(sslength selez)
(Setq l(1- l)
(Sectq na 0)
(Während(< = na l)
(setq ename(sname selez na))
(setq alist(entget ename))
(if(= "3dface"(cdr(assoc 0 alist)))))
(Progn)
(Setq a (cdr(assoc 10 alist)) b (cdr(assoc 11 alist) c (cdr(assoc 12 alist)))))

(setq ax) ay (cadr a) az (caddr a) )
(setq bx (car b) von (cadr b) bz (caddr b) )
(Setq cx (car c) cy (cadr c) cz (caddr c))
(setq dx (car dy) (cadr d) dz (caddr d) )

;3.1415926535
(setq angrada (/ ax pi)
(setq angradb (/bx pi))
(setq angradc (/cx pi)
(setq angradd (/ dx pi)


(setq newaz (*) (sin angrada) pi)
(setq newax (* (cos angrada) pi)
(setq neway ay)

(setq newbz) (sin angradb) pi)
(setq newbx (* (cos angradb) pi)
(satzq newby by) ; nur für die Lesbarkeit

(sin angradc) pi
(setq newcx (* (cos angradc) pi)
(setq newcy cy)

(sin angradd)
(setq newdx (* (cos angradd) pi)
(setq newdy dy)

(setq newa (list newax neway newaz))
(setq newb (list newbx newby newbz))
(setq newc (list newcx newcy newcz)
(setq newd (list newdx newdy newdz) )

(Befehl "3dface" newa newb newc ")
)
)
(Sectq na(1+ na))
)
)
; 19.7392
)
)
 
der Code oben in der realen Übung auf der Porphyroberfläche (von zwei explodierten Blöcken)
 

Anhänge

  • Clipboard01.jpg
    Clipboard01.jpg
    235 KB · Aufrufe: 59
wieder proben (schreibe mich, wenn ich schüttele), aber dieser Job nimmt mich.
Ich kann den alten Code nicht verlassen, weil ich es vereinfachte, aber vor allem, weil ich eine wichtige Korrektur machen musste. es arbeitete durch Biegering (wie Sie hier in der Pfosten oben sehen), aber es war nicht in der Lage, die Entlastung des Projekts zu verstehen. praktisch eine Rolle geschaffen, und ok, aber die Gesichter aus dem ursprünglichen Plan Design, als ob alles auf null Höhe war.
Ich realisierte, indem ich die Lecks auf das Negativ der Porphyrie einfügen, die ich als Test verwende, und ich stellte eine Korrektur vor, die das Grundmodell in seinen drei Dimensionen liest.
besser als die Erklärung, die ich denke, es ist das Bild wert.
Aber jetzt muss ich die Länge des Basismodells wieder anpassen, wenn Sie einen perfekten Cilindo mit der kompletten Rotation erhalten möchten.
Wie ich schrieb, ist es jetzt nicht parametrisch, also muss ich die genaue Länge im Reverse Engineering finden.
Allerdings ist der neue Code jetzt exakt, d.h. ich lese ein Modell nicht nur zweidimensional.
Clipboard01.jpg

Clipboard02.jpg


Code:
(defun hprint()
(setq selez nil)
(setq selez(ssget))
(falls (/= selez nil)
(Progn)
(setq l(sslength selez)
(Setq l(1- l)
(Sectq na 0)
(Während(< = na l)
(setq ename(sname selez na))
(setq alist(entget ename))
(if(= "3dface"(cdr(assoc 0 alist)))))
(Progn)
(Setq a (cdr(assoc 10 alist)) b (cdr(assoc 11 alist) c (cdr(assoc 12 alist)))))

(setq ax) ay (cadr a) az (caddr a) )
(setq bx (car b) von (cadr b) bz (caddr b) )
(Setq cx (car c) cy (cadr c) cz (caddr c))
(setq dx (car dy) (cadr d) dz (caddr d) )

;3.1415926535
(setq angrada ax)
(setq angradb bx)
(setq angradc cx)
(setq angradd dx)

(Sekundarquote (- 1 az))
(setq newaz (*(sin angrada)quota))
(setq newax (*(cos angrada)quota))
(setq neway ay)

(Sekundarquote (- 1 bz))
(setq newbz (*(sin angradb)quota))
(setq newbx (*(cos angradb)quota))
(satzq newby by) ; nur für die Lesbarkeit

(- 1 cz)
(setq newcz (*(sin angradc)quota))
(setq newcx)
(setq newcy cy)

(- 1 dz)
(in angradd)quota)
(setq newdx)
(setq newdy dy)

(setq newa (list newax neway newaz))
(setq newb (list newbx newby newbz))
(setq newc (list newcx newcy newcz)
(setq newd (list newdx newdy newdz) )

(Befehl "3dface" newa newb newc ")
)
)
(Sectq na(1+ na))
)
)
; 19.7392
)
)
 
Clipboard01.jpgKomm zurück. Ende der Geschichte, Sie müssen nicht die letzte Liste aktualisieren, weil sie jeden Test bestanden.
für den Fall, dass jemand versucht, es zu versuchen oder es zu verwenden ich die endgültigen Indikationen.
1) das Band zu wickeln, um die exakte Trommel zu bilden, muss 2pi lang auf der x-Achse sein. ein Vergnügen y e z. den ganzen Platz im positiven Zifferblatt (Ich lege das Band von 0,0.0).
2) Ich mache den Parametercode nicht, weil er nutzlos ist, wird der resultierende Zylinder bereits selbst skalierbar sein.
3) sind die Gravuren auf der Trommel mit positivem z auf dem Band zu erfassen (es wickelt sich nach oben).
4) vor dem Starten des Befehls ist es zweckmäßig, eine neue Schicht für den Zylinder zu schaffen und zu strömen, zwischen ihnen Band und Rolle freizugeben und sie ohne Schwierigkeiten manipulieren zu können, wobei beide Herkunft 0,0.0 teilweise überlappt wird.
5) der Code unterstützt nur 3Dface-Entitäten. andere werden ignoriert.
 
Ich kehre zum Thema zurück, weil ich die Lüftung kam, sagen wir, die Notwendigkeit, nach der Schaffung einer Rolle, und vielleicht geändert, um alles auf einem 3d Boden zurückzubringen.
viel komplizierter, bringen Sie auf einem Blatt die Topographie des Zylinders zurück.
Ich streite mich ziemlich ein bisschen mit dem Bug, der in lisp ist nicht da, Verpackung der Formeln, dann gab ich auf, entscheiden für eine rustikalere Methode, die die Cad Arbeit macht, kurz machen ihn ziehen den Bogen von jedem Punkt auf dem Zylinder, so dass ich sagen, die Länge "distinct", und berichtete diese Maßnahme als x-Wert von diesem Punkt im Vergleich zu dem gemeinsamen Ursprung.
nicht einfache Sachen, vor allem weil ein Gesicht auf dem Zylinder auf Pferderücken in weniger als 360 Grad und mehr als 0 Grad stehen kann, was mich der Bogen nicht von trivial Entwicklung macht. von hier aus die Kontrollen; das "reine", das mir sagt, ob ein Gesicht im Bereich 0-360 liegt oder nicht, wenn dann eine oder mehrere Vertikale über die 360.
Der Durchmesser des Zylinders muss jedoch zwingend 2 (Rough 1) und sein Ursprung, das Zentrum des Bodens, bei 0,0.0 gestellt sein. muss als Rollteppich, d.h. 0,0.0, gelegt werden, die Zylinderhöhe wird nach y positiv.
Dies liegt gerade daran, dass das Ergebnis wie das Abrollen eines Zylinderteppichs auf dem Boden, platziert entlang der y-Achse, verteilt auf der x-Achse sein wird. wie wenn du es erschaffen hast.
sogar hier, besser Platz auf einer neuen Schicht vor dem Starten der Routine, weil die neue erstellte Form nicht mit der ersten verschränkt und leicht wählbar ist.
Es ist eine "timbre", so ist es nur für "Einschnitte" auf dem Zylinderdurchmesser überprüft, die positive Volumen auf dem Teppich platziert werden. Ich habe nicht überprüft, was passiert, wenn "der Zylinder Ausstülpungen herauskommt, weil es nicht mein Problem war. ist ein "kontinuierlicher Stempel" 3d. Was auf dem Zylinder graviert wird, wird zu einem Adjektiv auf dem unberollten Teppich mit seiner Topographie führen.
natürlich danke, wenn zufällig jemand Ideen mit einem schärferen Algorithmus hatte!
Code:
(defun mprint()
(setq selez nil)
(setq selez(ssget))
(falls (/= selez nil)
(Prog.)
(setq l(sslength selez))
(Setq l(1- l)
(setq na 0)
(while(<= na l)
(setq ename(ssname selez na))
(setq alist(entget ename))
(if(= "3dface"(cdr(assoc 0 alist))))
(Prog.)
(Setq a (cdr(assoc 10 alist)) b (cdr(assoc 11 alist))) c (cdr(assoc 12 alist))) d (cdr(assoc 13 alist)))
(setq ax) ay (cadr a) az (caddr a) )
(setq bx (car b) von (cadr b) bz (caddr b) )
(Setq cx (car c) cy (cadr c) cz (caddr c))
(setq dx (car d) dy (cadr d) dz (caddr d) )
(oder (< az 0)(< bz 0)(< cz 0)(< dz 0))
(setq sud 1)
(setq sud 0)
)
(Satzkreuz 0)
(falls (< az -0.0001)(Satzkreuz (+ 1 Kreuz)))
(falls (< bz -0.0001)(Satzkreuz (+ 1 Kreuz)))
(falls (< cz -0.0001)(Satzkreuz (+ 1 Kreuz)))
(falls (< dz -0.0001)(Satzkreuz (+ 1 Kreuz)))
(falls (oder (= Kreuz 4)(= Kreuz 0))) (Setq rein 1)(setq rein 0))

,...
(setq newaz (- 1 (sqrt (+ (* ax ax)))))
(setq Punktcent (Liste 100 0 0) )
(setq pointstart (list 101 0 0) )
(setq pointend (list (+ 100 ax) az 0))
(wenn (und (gleich ax 1 0.0001) (= sud 1))
(setq newax 6.28318531)
(Prog.)
(Befehl "arc" "c" Pointcent Pointstart Pointend)
(setq selez2 (ssget pointstart))
(setq ename2 (ssname selez2 0)
(setq nalist (entget ename2))
(setq basarc (cdr(assoc 50 nalist)))
(setq endarc (cdr(assoc 51 nalist)))
(setq svilarc (- endarc basarc))
(entdel ename2)
(setq newax svilarc)
)
)
(setq neway ay) ;solo per leggibilità
................................

(setq newbz (- 1 (sqrt (+ (* bx bx) (* bz bz)))))
(setq Punktcent (Liste 100 0 0) )
(setq pointstart (list 101 0 0) )
(setq pointend (list (+ 100 bx) bz) 0)
(wenn (und (gleich bx 1 0.0001) (= sud 1))
(setq newbx 6.28318531)
(Prog.)
(Befehl "arc" "c" Pointcent Pointstart Pointend)
(setq selez2 (ssget pointstart))
(setq ename2 (ssname selez2 0)
(setq nalist(entget ename2))
(setq basarc (cdr(assoc 50 nalist)))
(setq endarc (cdr(assoc 51 nalist)))
(setq svilarc (- endarc basarc))
(setq newbx svilarc)
(entdel ename2)
)
)
(setq newby von) ;solo per leggibilità
................................

(setq newcz (- 1 (* cx cx) (* cz cz))))
(setq Punktcent (Liste 100 0 0) )
(setq pointstart (list 101 0 0) )
(setq pointend (list (+ 100 cx) cz 0)
(wenn (und (gleich cx 1 0.0001) (= sud 1))
(setq newcx 6.28318531)
(Prog.)
(Befehl "arc" "c" Pointcent Pointstart Pointend)
(setq selez2 (ssget pointstart))
(setq ename2 (ssname selez2 0)
(setq nalist (entget ename2))
(setq basarc (cdr(assoc 50 nalist)))
(setq endarc (cdr(assoc 51 nalist)))
(setq svilarc (- endarc basarc))
(setq newcx svilarc)
(entdel ename2)
)
)
(setq newcy cy)
................................

(setq newdz (- 1 (qrt (+ (* dx dx) (* dz dz))))
(setq Punktcent (Liste 100 0 0) )
(setq pointstart (list 101 0 0) )
(setq pointend (list (+ 100 dx) dz) 0)
(wenn (und (gleich dx 1 0.0001) (= sud 1))
(setq newdx 6.28318531)
(Prog.)
(Befehl "arc" "c" Pointcent Pointstart Pointend)
(setq selez2 (ssget pointstart))
(setq ename2 (ssname selez2 0)
(setq nalist(entget ename2))
(setq basarc (cdr(assoc 50 nalist)))
(setq endarc (cdr(assoc 51 nalist)))
(setq svilarc (- endarc basarc))
(setq newdx svilarc)
(entdel ename2)
)
)
(setq newdy dy) ;solo per leggibilità
(setq newa (list newax neway newaz))
(setq newb (list newbx newby newbz))
(setq newc (list newcx newcy newcz)
(setq newd (list newdx newdy newdz) )

(wenn (= 1 rein)

(Befehl "3dface" newb newc newd ")
(Prog.)
(falls zutreffend)
(Befehl "3dface" newb newc newd ")
(Prog.)
(falls (< newax pi) (setq newax (+ pi newax)))
(falls (< newbx pi) (setq newbx (+ pi newbx)))
(falls (< newcx pi) (setq newcx (+ pi newcx)))
(falls (< newdx pi) (setq newdx (+ pi newdx)))

(setq newa (list newax neway newaz))
(setq newb (list newbx newby newbz))
(setq newc (list newcx newcy newcz)
(setq newd (list newdx newdy newdz) )
(Befehl "3dface" newb newc newd ")
)
)
)
)
)
;endif 3dface
(setq na(1+ na))
)
)
)
) ; close defun
 
die "Reverse", die ich vor langer Zeit veröffentlichte, um kontinuierliche Stempel in Zylinder zu schaffen, es hat mir nützlich, während "belastet", und ohne Probleme.
Ich hatte eine schneebedeckte Pint mit überlappenden Waffeln geschaffen, aber es war zu regelmäßig, und außerdem, zu schwierig, die Zweige von einem zu wählen, um sie zu dehnen, ohne alles zu vermasseln.
Ich dachte daran, meinen Reverse Engineering Code von Stempel ohne zu viel Vertrauen zu versuchen. Ergo:
maximaler Radius bis 2,00.
Zentrum der Kiefer Kegelboden platziert bei 0,0.0
von 0,0.0 mit Wachstum y (erinnern Sie sich, als gerollter Teppich auf dem Boden gespannt)
aufgetragen den defun mprint (Aktivierung einer anderen Schicht, sonst wird die neue Form mit dem Original verwoben und es ist unwohl, es zu behandeln), fand ich alles auf dem Boden, wie ein Rasen, von dem die Zweige vertikal beginnen (aber mit negative z, ich erinnere mich, es ist für Briefmarken).
leicht dehnen Sie sie nach einem.
Und wenn ich fertig bin, habe ich mit Hprint "umgedreht".
Und hier ist das Ergebnis.
Denken Sie daran, der Radius geht auf 2, weil der Algorithmus verwendet die Pi ohne Parametrierung.
die fertige Arbeit dann können Sie reproportionieren, wie Sie wollen.
Gute Weihnachten für eine lange Zeit!
 

Anhänge

  • Clipboard01.jpg
    Clipboard01.jpg
    150 KB · Aufrufe: 4

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