| |
| 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 (2096 mal gelesen)
|
Silvan01 Mitglied
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 20. Aug. 2010 14:24 <-- editieren / zitieren --> Unities abgeben:
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.0Dim 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 / zitieren -->
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
Beiträge: 28 Registriert: 25.04.2010 Win8.1 Pro x64, ACAD 2015, VS 2013
|
erstellt am: 20. Aug. 2010 16:32 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
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 / zitieren -->
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
Beiträge: 28 Registriert: 25.04.2010 Win8.1 Pro x64, ACAD 2015, VS 2013
|
erstellt am: 20. Aug. 2010 17:15 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
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 / zitieren -->
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
Beiträge: 28 Registriert: 25.04.2010 Win8.1 Pro x64, ACAD 2015, VS 2013
|
erstellt am: 20. Aug. 2010 21:13 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
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 / zitieren -->
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
Beiträge: 28 Registriert: 25.04.2010 Win8.1 Pro x64, ACAD 2015, VS 2013
|
erstellt am: 20. Aug. 2010 21:44 <-- editieren / zitieren --> Unities abgeben: Nur für Silvan01
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
Beiträge: 128 Registriert: 28.04.2009 AutoCAD Civil 2009 AutoCAD Civil 2010 Visual Studio 2008
|
erstellt am: 23. Aug. 2010 15:05 <-- editieren / zitieren --> Unities abgeben:
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 / zitieren -->
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 / zitieren -->
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 |