Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  AppendOuterLoop und GetLoopAt inkompatibel

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
  
PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
Autor Thema:  AppendOuterLoop und GetLoopAt inkompatibel (1146 mal gelesen)
Nemorem
Mitglied
ACAD/ADT Admin


Sehen Sie sich das Profil von Nemorem an!   Senden Sie eine Private Message an Nemorem  Schreiben Sie einen Gästebucheintrag für Nemorem

Beiträge: 17
Registriert: 22.01.2007

ADT 2008

erstellt am: 29. Okt. 2008 15:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Grüsse!

Ich versuche mittels eines kleinen Scripts alle Schraffuren einer Zeichnung mit einer weiteren Schraffur, diesmal Solid und in Farbe zu hinterlegen. Sprich etwas Farbe reinzubringen.

In der Theorie ist dies, zumindest bei assoziativen Hatches sehr einfach. For Each Hatch in HatchSelectionSet GetLoopAt -> Neuen Hatch definieren und resultat von GetLoopAt für AppendOuterLoop verwenden.

Das Problem ist nur, das funktioniert nur, solange das Quellobjekt nur ein einziges Objekt für die Umgrenzung verwendet. Sprich eine Schraffur in einem Kreis funktioniert tadellos, wärend eine Schraffur in der Schnittmenge zweier Kreise nicht mehr funktioniert. GetLoopAt gibt, meiner meinung nach korrekt, beide Kreise zurück. Doch AppendOuterLoop will diese dann nicht akzeptieren. Die Hilfe enthält leider nur ein einfaches Beispiel, das natürlich geht und so weiß ich auch nicht, warum AppendOuterLoop die Variable zurückweist.

Jedenfalls hier mal das Script zum selber probieren:

Sub SimpleTest()
Dim Obj As AcadEntity
Dim pp As Variant
ThisDrawing.Utility.GetEntity Obj, pp

Dim hatchSolid As AcadHatch
Dim LoopArray As Variant
'ColorHatches

'Getting Boundaries
Obj.GetLoopAt 0, LoopArray
Set hatchSolid = ThisDrawing.ModelSpace.AddHatch(acHatchPatternTypePreDefined, "SOLID", True, acHatchObject)
'hatchSolid.AssociativeHatch = True
hatchSolid.AppendOuterLoop LoopArray 'Error
hatchSolid.Evaluate
hatchSolid.Update
End Sub


Alternativ wäre es vielleicht auch möglich die bestehende Schraffur irgendwie zu klonen und dem Klon einfach Solid zuzuweisen, Versuche dahingehend sind bislang aber gescheitert.

Bin für jede Hilfe Dankbar!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 29. Okt. 2008 16:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

das herausfinden von Umrandungen der Schraffuren ist in Grenzbereichen unmöglich (siehe z.B. wenn Du Schraffuren hast, die zum Teil von elliptischen Bögen und/oder Splines begrenzt sind, dann kann nicht einmal AutoCAD die Schraffurgrenze wiederherstellen).

Ich würde den Vorschlag machen, überhaupt einfacher zu denken (so es der Rest Deiner gewünschten Funktionalität erlaubt):

a) mach lediglich eine Kopie der bestehenden Schraffur
b) dieser Kopie weist du dann die anderen Eigenschaften (SOLID, LAYER, ..) zu

- alfred -

[EDIT, weil jetzt mehr Zeit ist]
Dim tNewHatch as AcadHatch
set tNewHatch = tOldHatch.Copy
Call tNewHatch.SetPattern(acHatchPatternTypePreDefined, "SOLID")
[/EDIT]

[Diese Nachricht wurde von a.n. am 29. Okt. 2008 editiert.]

[Diese Nachricht wurde von a.n. am 29. Okt. 2008 editiert.]

Nemorem
Mitglied
ACAD/ADT Admin


Sehen Sie sich das Profil von Nemorem an!   Senden Sie eine Private Message an Nemorem  Schreiben Sie einen Gästebucheintrag für Nemorem

Beiträge: 17
Registriert: 22.01.2007

ADT 2008

erstellt am: 30. Okt. 2008 08:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ja so gehts leichter, danke erstmal.

Dennoch verstehe ich noch immer nicht warum das GetLoopAt Resultat nicht für AppendOuterLoop verwendet werden kann. Es kann schon sein, dass wie du sagst AutoCAD eine sehr komplexe Umgrenzung nicht mehr wiederherstellen kann (was aber schlecht gemacht ist, denn wenns einmal klappt, müsste es doch immer gehen), nur das ist in meinem Beispiel ja nicht der Fall. Bei der Schraffur in der Schnittmenge zweier Kreise findet er die Kreise ja Problemlos, ich kann den Array mit den 2 Kreisen nur nicht mit AppendOuterLoop verwenden und weiß nicht recht wieso.

Natürlich ist das nur die Bonusfrage, das Problem selbst ist grundsätzlich gelöst, danke nochmal.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP


Ex-Mitglied

erstellt am: 30. Okt. 2008 10:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

lässt sich wie folgt beantworten:

wenn Du zwei sich überschneidende Kreise als Outerloop übergibst (ohne den in AutoCAD definierten Flächenpunkt), dann gibt es 3 Möglichkeiten, welche Teilmenge zu schraffieren ist, das ist nicht eindeutig und daher nicht erfüllbar.

Den Punkt, der die zu schraffierende Teilfläche angibt, kannst Du in AutoCAD aber leider nicht definieren.

- alfred -

Nemorem
Mitglied
ACAD/ADT Admin


Sehen Sie sich das Profil von Nemorem an!   Senden Sie eine Private Message an Nemorem  Schreiben Sie einen Gästebucheintrag für Nemorem

Beiträge: 17
Registriert: 22.01.2007

ADT 2008

erstellt am: 30. Okt. 2008 10:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Du hast recht, das ist natürlich einleuchtend. Vielen Dank für die Information!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz