Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Beispiel für Schraffur mit Insel-Freistellungen

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:  Beispiel für Schraffur mit Insel-Freistellungen (1273 / mal gelesen)
tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 04. Sep. 2017 14:42    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

Moin!

ich suche ein Beispiel für das Erstellen einer Schraffur mit Freistellungen (Inseln).

Mein Code sieht auszugweise bis jetzt so aus

Code:

...
Dim ObjIds As New ObjectIdCollection()
ObjIds.Add(pLineIdOuter)

Dim oHatch As New Hatch()
acBlkTblRec.AppendEntity(oHatch)
acTrans.AddNewlyCreatedDBObject(oHatch, True)

Dim normal As Vector3d = Vector3d.ZAxis
ErrDetail = "Create Hatch-Object - Set HatchPatterName"
oHatch.SetHatchPattern(HatchPatternType.PreDefined, HatchPatternName)
oHatch.Normal = normal
oHatch.Elevation = 0.0

' für Solid braucht es keine Scalierung und keinen Winkel
If Not HatchPatternName.ToLower = "solid" Then
ErrDetail = "Create Hatch-Object - Set PatternScale"
oHatch.PatternScale = PatternScale
ErrDetail = "Create Hatch-Object - Set PatternAngle"
oHatch.PatternAngle = PatternAngle
'oHatch.PatternAngle = 2.0
End If

ErrDetail = "Create Hatch-Object - Set HatchColor"
oHatch.ColorIndex = HatchColor
ErrDetail = "Create Hatch-Object - Set Associative"
oHatch.Associative = HatchAssociative

' hat dieses Polygon eine Insel (Hole)?
If MPolygonLineString.HolesCount > 0 Then
ErrDetail = "Create a PolyLine - Inner"
For j = 0 To MPolygonLineString.HolesCount - 1
Dim pLineIdInner As ObjectId
pLineIdInner = DrawPolylineByMapPolygon(MPolygonLineString.GetHoleAt(j), LineTypeName, ColorIndex, LineWidth)
If Not IsNothing(pLineIdInner) Then
ObjIds.Add(pLineIdInner)
End If
Next j

End If

ErrDetail = "Create Hatch-Object - Append LoopOuter"
oHatch.AppendLoop(HatchLoopTypes.Outermost, ObjIds)

'acTrans.AddNewlyCreatedDBObject(oHatch, True)
oHatch.EvaluateHatch(True)

' optional den Border wieder löschen
If CreateHatchWithoutBorder = True Then acPolyOuter.Erase(True)
...


Im oberen Teil gibt es eine Funktion DrawPolylineByMapPolygon die aus Topobase-Elementen eine Polylinie (erfolgreich) zeichnet.

Auch wenn ich den Schraffurerstellungsteil auskommentiere werden meine Polylinien gezeichnet - nur mit der Schraffur und den Freistellungen klappt das nicht.

Vorm Prinzip hat dieser Code bereits Schraffuren erzeugt - da wurde aber immer nur eine Umgrenzung übergeben.

Die Suche nach einem Beispiel, das eine einfache Fläche mit Freistellungen erzeugt, war erfolglos.

Kann mir einer von Euch weiterhelfen??

Gruß Jan

------------------
jan :-)

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Sep. 2017 15:03    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 tappenbeck 10 Unities + Antwort hilfreich

tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 04. Sep. 2017 15:19    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

Moin!

danke - die Seite hatte ich auch schon einmal gelesen. Das Beispiel unten arbeitet über einen Auswahlpunkt und ist deshalb nicht so ganz mit einer Aufgabe übereinstimmend.

Ich habe mir auch den oberen Block durchgelesen und danach wird das äußere Polygon mit HatchLoopTypes.Outermost definiert und die innenliegenden werden mit HatchLoopTypes.Default. Hier war ich vielleicht etwas auf der falschen Färte, weil in dem funktionierenden Weg ich HatchLoopTypes.Default auch für das alleinige Polygon erfolgreich verwendet habe.

Nun habe ich den Code an diesen Text etwas angepasst.

Code:

Dim ObjIdsOuter As New ObjectIdCollection()
Dim ObjIdsInner As New ObjectIdCollection()
ObjIdsOuter.Add(pLineIdOuter)
...
' hat dieses Polygon eine Insel (Hole)?
If MPolygonLineString.HolesCount > 0 Then
  ErrDetail = "Create a PolyLine - Inner"
    For j = 0 To MPolygonLineString.HolesCount - 1
      Dim pLineIdInner As ObjectId
      pLineIdInner = DrawPolylineByMapPolygon(MPolygonLineString.GetHoleAt(j), LineTypeName, ColorIndex, LineWidth)
        If Not IsNothing(pLineIdInner) Then
          ObjIdsInner.Add(pLineIdInner)
        End If
    Next j
End If

ErrDetail = "Create Hatch-Object - Append LoopOuter"
oHatch.AppendLoop(HatchLoopTypes.Outermost, ObjIdsOuter)
ErrDetail = "Create Hatch-Object - Append LoopInner"
oHatch.AppendLoop(HatchLoopTypes.Default, ObjIdsInner)
...


Aber weiterhin kommt eine Fehlermeldung

Zitat:

Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
   bei Autodesk.AutoCAD.DatabaseServices.Hatch.AppendLoop(HatchLoopTypes loopType, ObjectIdCollection dbObjIds)
   bei EBL.MapService.Acad.DrawTBMultiPolygon_Work(Int64 PolyFID, Document TbDoc, Boolean CreateHatch, String LineTypeName, Double LineScale, Int32 ColorIndex, Double LineWidth, Int32 HatchColor, String HatchPatternName, Boolean HatchAssociative, Double PatternScale, Double PatternAngle, Boolean CreateHatchWithoutBorder) in C:\VSProjects\FDO_MPolygon\EBL.MapService\EBL.MapService\cls_Acad.vb:Zeile 541.

541 ist die Zeile mit der Zuweisung der innenliegenden Objekte

Code:
oHatch.AppendLoop(HatchLoopTypes.Default, ObjIdsInner)

?????

Gruß Jan


------------------
jan :-)

[Diese Nachricht wurde von tappenbeck am 04. Sep. 2017 editiert.]

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

tappenbeck
Mitglied
Vermessungsingenieur


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

Beiträge: 1213
Registriert: 30.05.2002

AutoCAD (Map)2019, Topobase, MapEdit, Lisp, .vb.net

erstellt am: 05. Sep. 2017 08:43    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

Moin!

Lösung gefunden!

Code:
If ObjIdsInner.Count > 0 Then oHatch.AppendLoop(HatchLoopTypes.Default, ObjIdsInner)

Wenn innen nichts ist, dann kann man auch keine Inseln erzeugen.

.-)

Gruß Jan

------------------
jan :-)

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