Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Hatch Erstellungs- und Scaleproblem

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
Autor Thema:  Hatch Erstellungs- und Scaleproblem (2095 mal gelesen)
Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 20. Aug. 2010 14:24    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


Bild1.JPG


Bild2.JPG

 
Hallo Zusammen,

ich bin bei dem Erstellen einer VB.Net Funktion mal wieder auf ein Problem gestoßen.
Mein Problem ist, dass ich ein Hatch erstellen will mit verschiedenen Ausschnitten (Bild1).
Folgendermaßen schaffe ich es anhand einer Polyline eine Schraffur zu erstellen.

(Codeausschnitt)

Code:
Dim Area As Hatch = New Hatch
Area.SetHatchPattern(HatchPatternType.PreDefined, "ANSI37")
Area.PatternScale = 150.0

Dim IDs As ObjectIdCollection = New ObjectIdCollection
IDs.Add(Polyline.Id)

Area.AppendLoop(HatchLoopTypes.Default, IDs)


Jetzt habe ich 2 Probleme:

1. Wie schaffe ich es innerhalb dieses Rechtecks (Bild2) ein Ausschnitt zu erstellen (wie bei Bild1)?

2. Wenn ich das Scale der Schraffur ANSI37 auf 150 stelle wird das zuerst nicht übernommen (siehe Bild2).
Wenn ich dann aber per Hand im AutoCAD (AutoCAD 2011) noch eine 0 Hinten an der Dezimalzahl anfüge und das mit Return bestätige,
passt es auf einmal?!

Ich habe schon probiert das mit einem

Code:
AcadDoc.Editor.UpdateScreen()

zu ändern hat aber nicht funktioniert.

Hoffe Ihr könnt mir weiterhelfen  ?

Grüße und ein schönes Wochenende

Silvan

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


Ex-Mitglied

erstellt am: 20. Aug. 2010 14:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

zu 1)
mit .AppendLoop kannst Du weitere Polylinien hinzufügen (mit HatchLoopTypes.Default), liegen diese wirklich innen, dann hast Du auch Inseln in der Schraffur!
Dieses bitte auch berücksichtigen:
Area.HatchStyle = HatchStyle.Normal

zu 2) >> wird nicht übernommen
Äußert sich das nur graphisch oder bekommst Du einen Fehler im Code?
Area.EvaluateHatch(True)  ... könnte auch helfen.

- alfred -

------------------
www.hollaus.at

Wene71
Mitglied



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

Beiträge: 28
Registriert: 25.04.2010

Win8.1 Pro x64, ACAD 2015,
VS 2013

erstellt am: 20. Aug. 2010 16:32    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 Nur für Silvan01 10 Unities + Antwort hilfreich

Hallo,

Zitat:
2. Wenn ich das Scale der Schraffur ANSI37 auf 150 stelle wird das zuerst nicht übernommen (siehe Bild2).
Wenn ich dann aber per Hand im AutoCAD (AutoCAD 2011) noch eine 0 Hinten an der Dezimalzahl anfüge und das mit Return bestätige,
passt es auf einmal?!



probier mal diese Reihenfolge...

Dim Area As Hatch = New Hatch
Area.PatternScale = 150.0
Area.SetHatchPattern(HatchPatternType.PreDefined, "ANSI37")

AutoCAD 2010 will die Eigenschaften vor SetHatchPattern, und
AutoCAD 2011 will die Eigenschaften nach SetHatchPattern damit
sie Wirkung zeigen.

Dies hab ich mal festgestellt als ich das gleiche Problem hatte.


Gruß Werner

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


Ex-Mitglied

erstellt am: 20. Aug. 2010 16:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

die Reihenfolge in 2011 ist kritisch, mit .HatchAngle hab ich das auch schon per Exceptions mitgeteilt bekommen. Nur da kommen eben Exceptions, darum meine Rückfrage.

In 2010 ist die Reihenfolge imho nicht relevant.

- alfred -

------------------
www.hollaus.at

Wene71
Mitglied



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

Beiträge: 28
Registriert: 25.04.2010

Win8.1 Pro x64, ACAD 2015,
VS 2013

erstellt am: 20. Aug. 2010 17:15    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 Nur für Silvan01 10 Unities + Antwort hilfreich

Hallo Alfred,

ja bei ACAD2011 hat sich da was geändert.

Hier mal die zwei Varianten, die bei mir funktionieren...

Code:
                Dim Schraff As Hatch = New Hatch
                'Vor AutoCAD 2011...
                If ACAD_Version() < 18.1 Then
                    Schraff.Origin = Origin
                    Schraff.PatternScale = PatternScale
                    Schraff.PatternAngle = PatternAngle
                    Schraff.SetHatchPattern(HatchPatternType.PreDefined, PatternName)
                Else 'Ab AutoCAD 2011...
                    Schraff.Origin = Origin
                    Schraff.SetHatchPattern(HatchPatternType.PreDefined, PatternName)
                    Schraff.PatternScale = PatternScale
                    Schraff.PatternAngle = PatternAngle
                End If
                Schraff.Layer = CreateLayer(Layer)
                Schraff.ColorIndex = ColorIndex
                Schraff.Linetype = LineType
                Schraff.LineWeight = LineWeight

Gruß Werner

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


Ex-Mitglied

erstellt am: 20. Aug. 2010 20:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Werner,

und Du bist sicher, dass der Else-Teil nicht auch mit 2010 läuft? Ich kann's kaum glauben. 

>> ja bei ACAD2011 hat sich da was geändert.

Das ist die freundliche Formulierung von 'neuen Mist eingebaut'. 

- alfred -

------------------
www.hollaus.at

Wene71
Mitglied



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

Beiträge: 28
Registriert: 25.04.2010

Win8.1 Pro x64, ACAD 2015,
VS 2013

erstellt am: 20. Aug. 2010 21:13    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 Nur für Silvan01 10 Unities + Antwort hilfreich

Hi Alfred,

ja ich bin mir ganz sicher!
Als ich auf ACAD2011 umgestellt habe, bin ich fast verzweifelt warum
mein Code auf einmal nicht mehr geht. Und es hat lange gedauer bis ich darauf gekommmen bin das es an der Reihenfolge liegt.
Warum das aber so ist, ist mir ein Rätsel. Sinn machts keinen!

Zitat:
Das ist die freundliche Formulierung von 'neuen Mist eingebaut'

Genau, das ist Mist! Hoffentlich bürgert sich so etwas nicht ein,
sonst müssen wir beim nächsten mal wo möglich noch unsere Programme
in Spiegelschrift schreiben.

Gruß Werner

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


Ex-Mitglied

erstellt am: 20. Aug. 2010 21:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Werner,

ich gebe Dir recht, für 2011 musste die Reihenfolge umgebaut werden, aber imho arbeitet eben die neue Reihenfolge auch mit 2010! Anbei ein Schnippsel von mir, das jetzt verifizierterweise mit 2010 UND 2011 läuft.

Code:
tHatch = New DatabaseServices.Hatch
tHatch.Associative = False
tHatch.HatchObjectType = DatabaseServices.HatchObjectType.HatchObject
tHatch.PatternScale = tHatchPatternScale
tHatch.HatchStyle = DatabaseServices.HatchStyle.Normal
tHatch.SetHatchPattern(DatabaseServices.HatchPatternType.PreDefined, tPatternName)
tHatch.PatternAngle = tHatchAngleDegree / 180 * Math.PI

Eigentlich ist es meiner Meinung nach nur der PatternAngle, den ich für 2011 zurückreihen musste und obiger Code funkt mit beidem (gerade nochmals getestet, immerhin hast Du mich doch dazu gebracht).

- alfred -

------------------
www.hollaus.at

Wene71
Mitglied



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

Beiträge: 28
Registriert: 25.04.2010

Win8.1 Pro x64, ACAD 2015,
VS 2013

erstellt am: 20. Aug. 2010 21:44    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 Nur für Silvan01 10 Unities + Antwort hilfreich

Hi Alfred,

Da ich kein AutoCAD2010 mehr zur Hand habe, kann ich nicht mehr nachvolziehen
woran es genau gelegen hat. Ist schon ein paar Monate her!
Ich glaube mich zu erinnern, daß "origin" auch Probleme gemacht hat.
Bin mir aber nicht sicher.

Jedenfalls schein die Scalierung in Deinem Beispiel wohl keine Probleme zu machen.

Gruß Werner

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

Silvan01
Mitglied



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

Beiträge: 128
Registriert: 28.04.2009

AutoCAD Civil 2009
AutoCAD Civil 2010
Visual Studio 2008

erstellt am: 23. Aug. 2010 15:05    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

Hallo,

also das Problem mit dem Scale konnte ich lösen:

Code:
Dim Area As Hatch = New Hatch
Area.PatternScale = 150.0
Area.HatchStyle = HatchStyle.Normal
Area.ColorIndex = 50
Area.SetHatchPattern(HatchPatternType.PreDefined, "ANSI37")

Jetzt wollte ich noch zwecks dem Area.AppendLoop(HatchLoopTypes.Default, IDs) fragen, ob man in die ObjectIDCollection gleich beide ID's der Polylinien (Außen und Innen) einfügen kann? <- Funktioniert bei mir nicht (Error: InvalidInput)

Code:
Dim IDs As ObjectIdCollection = New ObjectIdCollection
IDs.Add(Poly1.Id)
IDs.Add(Poly2.Id)
...
Area.AppendLoop(HatchLoopTypes.Default, IDs)

Allerdings wenn ich folgendes mache:

Code:
Dim IDs As ObjectIdCollection = New ObjectIdCollection
IDs.Add(Poly1.Id)
Area.AppendLoop(HatchLoopTypes.Default, IDs)
IDs = Nothing
IDs = New ObjectIdCollection
IDs.Add(Poly2.Id)
Area.AppendLoop(HatchLoopTypes.Default, IDs)

dann läufts wie gewünscht.

Grüße und Danke im Vorraus

Silvan

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


Ex-Mitglied

erstellt am: 23. Aug. 2010 15:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> ob man in die ObjectIDCollection gleich beide ID's der Polylinien (Außen und Innen) einfügen kann?

IMHO nein, kann ich aber auch nur so aussagen, wie Du es empfindest: 'es geht halt nicht', ich hätte aber auch keine Begründung dazu in irgendwelchen Doc's gefunden.

- alfred -

------------------
www.hollaus.at


Ex-Mitglied

erstellt am: 24. Aug. 2010 19:03    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi (nochmals),

ich korrigiere (und wenn man nachdenkt, dann wird's irgendwann mal logisch  ).

Die Funktion .AppendLoop ergänzt immer nur eine geschlossene Figur. Im Falle einer geschlossenen Polylinie wird die übergebene ObjectIdCollection eben nur ein Element inkludieren.

Jetzt kann aber auch der Fall existieren, dass mehrere Elemente eine geschlossene Figur ergeben, also z.B. ein Bogen und und Linie (die von Endpunkt des Bogens zum Anfangspunkt des Bogens verläuft). In diesem Fall wird sowohl der Bogen wie auch die Linie in die ObjectIdCollection hinzugefügt und das als gesamtes (als ein HatchLoop) mit .AppendLoop hinzugefügt.

Und mehrere Loops auf einmal übergeben geht daher nicht (heißt ja auch nicht .AppendLoopS)

HTH, - alfred -

------------------
www.hollaus.at

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)2023 CAD.de | Impressum | Datenschutz