AW: Polygon.Inflate
Das Allerdings kann hier nicht passieren weil der Bewehrungskorb in den Betonquerschnitt reinpassen muß (sonst wird der Statiker auf der Baustelle vom Bauleiter verprügelt). Allerdings, und das hat Jens auch nicht gelöst, woher weiß ein Punkt daß er unten rechts ist.
Beispiel T: Bezüglich des SchwerpunktsKOO ist P2 oben rechts.
Code:
0*************************1
* * 7********6 3********2 * * * * * * * * * * * * * * * 5*******4 |
AW: Polygon.Inflate
Ich würde nicht von Punkten, sondern von Strecken ausgehen. Denen kann man einen Winkel zuordnen.
Was du immer noch nicht beantwortet hast: Was ist jetzt mit Polygonen, die nicht rechtwinklig sind? Ich geb dir jetzt meinetwegen die Margins (Links: 1, Oben: 2, Rechts: 3, Unten: 4) und eine diagonale Strecke im 45°-Winkel:
Code:
Welchen Abstand hat die denn nun?
/
/ / / / |
AW: Polygon.Inflate
Das hab ich mal wieder nicht verstanden? :oops:
Ich lass es jetzt erst mal so. Der Benutzer kann ja dann mehrere Margins in das Polygon legen. Vermutlich ist es auch gar nicht möglich so wie ich wollte. Bei AutoCad muß man beim Ausrunden ja auch einen Bezugspunkt angeben.
Delphi-Quellcode:
procedure TPolygon.Inflate(const Value: double);
var I, J: integer; C: TFloatPoint; Line: TFloatLine; Lines: TFloatLines; begin Lines := TFloatLines.Create; try for I := 0 to FCount - 1 do begin J := Next(I); Line.P1 := FItems[I]; Line.P2 := FItems[J]; Line.ShiftUV(0, Value); Lines.Add(Line); end; Clear; for I := 0 to Lines.Count - 1 do begin J := Lines.Next(I); if Lines.Item[I].IntersectLines(Lines.Item[J], C) then Add(C); end; finally Lines.Free; end; end; |
AW: Polygon.Inflate
Eventuell ist der Clipper interessant
|
AW: Polygon.Inflate
Zitat:
|
AW: Polygon.Inflate
Zitat:
|
AW: Polygon.Inflate
"Er" weiß jetzt langsam wovon "Wir" reden. Was man zum Beispiel machen könnte wäre zuerst (auf einer Kopie) das 08/15-Inflate von #33 durchführen und dann schauen wohin sich der Punkt bewegt hat. Falls nach rechts dann MarignLeft verwenden, falls nach unten dann MarignTop verwenden usw.. Diese Margins verstehen sich für die Polygonlinien (hier) immer als ShiftV. "Er" weiß jetzt nämlich auch daß eine Normalverschiebung U einer Polygonlinie (hier) nichts bringt weil die durch IntersectLines überschrieben wird.
|
AW: Polygon.Inflate
Es gäbe auch noch die Möglichkeit, anhand der Winkel zu unterscheiden, ob eine Kante unten oder oben ist:
Angenommen, in deinem Beispiel aus #31 hat die Linie 4-5 die Neigung 0°, Wenn man jetzt im Uhrzeigersinn die Winkel addiert, hat die Linie 0-1 180° und 2-3 wieder 0°. Also könnte man sagen: alles was annähernd 180° ist, bekommt die Margin für oben und was annähernd 0° ist, Margin für unten. Ab welcher Neigung es dann in die seitlichen Margins übergeht, musst du selbst entscheiden. |
AW: Polygon.Inflate
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Ich gehe davon aus, dass dein Ausgangspolygon das betonierte Resultat sein soll. Die Bewehrung muss zur Außenseite jeweils ein Mindestmaß an Betondeckung aufweisen. Du brauchst nun die Maße der Bewehrung. Wenn du bei der zentrischen Streckung die Eckpunkte zum Zentrum verschiebst und zwar genau so weit bis der Soll-Abstand (Betondeckung) der Strecken zum Ausgangspolygon erreicht ist. Richtig? Zwei benachbarte Eckpunkte solange nach Z verschieben, bis die Strecke in der Ebenenansicht den gewollten Abstand erreicht hat, dann nächsten Punkt usw... |
AW: Polygon.Inflate
Es könnte aber auch sein, das der Threadersteller die Normale eines Punktes berechnen muss(Was der Durchschnitt der beiden Normalen der beiden abgehenden strecken ist) und die Punkte dahingehend skaliert?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz