Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD ObjectARX und .NET
  Schraffur in Jig

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:  Schraffur in Jig (2032 mal gelesen)
Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 12. Mai. 2011 15:27    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 an Alle,

ich möchte in einem JIg eine Schraffur darstellen.
Dazu erzeuge ich eine Polylinie und diese verwende ich dann um die Umrisse der Schraffur zu erstellen.

Protected Overrides Function WorldDraw(ByVal draw As Autodesk.AutoCAD.GraphicsInterface.WorldDraw) As Boolean
        Dim i As Integer
        Dim mybulge As DoubleCollection = New DoubleCollection
        Dim pointstemp As Point3dCollection = New Point3dCollection

        For i = 1 To points.Count
            pointstemp.Add(points(i - 1))
            mybulge.Add(0)
        Next
        mybulge.Add(0)
        pointstemp.Add(BasePt)
        Poly = New Polyline2d(Poly2dType.SimplePoly, pointstemp, 0.0, True, 0.0, 0.0, mybulge)
        draw.Geometry.Draw(Poly)
        Dim myhatch As Hatch = New Hatch
        Dim ObiD As ObjectIdCollection = New ObjectIdCollection
        ObiD.Add(Poly.ObjectId)
        myhatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID")
        myhatch.AppendLoop(HatchLoopTypes.Default, ObiD)
    End Function

Das funktioniert bis zur letzten Zeile. Dort bricht ACAD ab und ich bekomme die Fehlermeldung: "eInvalidInput"
Was mache ich da falsch?

Gruß, Theo

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


Ex-Mitglied

erstellt am: 12. Mai. 2011 15:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich kann jetzt nicht gucken gehen, aber Du kannst es ja mal testen. 

IMHO kannst du nur Grenzen einer Schraffur zuweisen, die Bestandteil der Database sind.

Probier mal in einem kleinen Testprojekt eine Polylinie zu erstellen, diese nicht dem Modellbereich (und auch keiner Transaction) hinzuzufügen. Würde mich nicht wundern, wenn da der gleiche Fehler kommen würde.

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 13. Mai. 2011 07:51    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 Alfred,

die Polylinie ist für mich nur Mittel zum Zweck. Die brauch ich nicht unbedingt. Hast Du nen Lösungsansatz wie ich von der Punkteliste zu der Schraffur komme? Wie würdest Du da vorgehen?

Gruß, Theo

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


Ex-Mitglied

erstellt am: 13. Mai. 2011 08:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wenn Du nur 3 oder 4 Punkte hast, dann würd ich es nicht mit Schraffur, sondern mit 2D-SOLID machen.

Und muss es eine Schraffur sein, dann könntest Du eine Dummy-Polylinie vor Start im JIG-Modus erzeugen (Modellbereich und Transaction hinzufügen), diese Polylinie dann im Zuge von JIG modifizieren (um darauf die Schraffur aufzubauen) und am Ende (nach JIG-Functions) die Poly wieder vertschüssen.

Hast Du eigentlich probiert, ob ich überhaupt recht hab? Hast Du eine TestSub gemacht mit Schraffurerzeugung aus Poly (ohne die Poly dem Modellbereich und einer TransAction hinzuzufügen)?

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 13. Mai. 2011 11:57    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

Hi Alfred,

dein erster Vorschlag funktioniert. Das wende ich schon ein parrmal an.
Aber jetzt möchte ich Solids mit mehr Punkten erstellen und da bräuchte ich die Schraffur dazu.
Ich habe schon einiges rumprobiert, habe es aber nicht geschafft "managed" eine Schraffur zu erstellen. Das liegt aber an meinen mangelnden Kenntnissen.
ich müsste also vor dem Jigaufruf eine Polylinie erstellen. Diese dem aktuellen Layout zuweissen. diese dann dem Jig übergeben. Dort würde ich dann der Polylinie die Punkte zuweissen und dann dmit die Schraffur erstellen. nach dem Jig müsste ich die Polylinie wieder löschen. Probier ich mal aus.

Gruß, Theo

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 18. Mai. 2011 14:26    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 Alfred,

ich bin grad dabei die Polylinie den aktuellen Layout zu zu ordnen. das Beispiel das ich gefunden habe fügt die Polylinie in den Modelbereich ein. kannst Du mir nen Tip geben wie ich an das aktuelle Layout kommen?


Dim Poly As Polyline2d
            Poly = New Polyline2d(Poly2dType.SimplePoly, pointstemp, 0.0, True, 0.0, 0.0, mybulge)
            Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
            Dim acCurDb As Database = acDoc.Database
            Using acTrans As Transaction = acCurDb.TransactionManager.StartTransaction()
                Dim acBlkTbl As BlockTable
                acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)
                Dim acBlkTblRec As BlockTableRecord
                acBlkTblRec = acTrans.GetObject(acBlkTbl(BlockTableRecord.ModelSpace), OpenMode.ForWrite)
                acBlkTblRec.AppendEntity(Poly)
            End Using

Danke Theo

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


Ex-Mitglied

erstellt am: 18. Mai. 2011 14:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

in dieser Zeile:

Code:
acBlkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForRead)

bestimmst Du, dass der Modellbereich zum Speichern verwendet wird.

Du musst statt der BlockTableRecordID des Modellbereichs die BlockTableRecordID Deines Layouts herausfinden und im obigen Statement verwenden.

Kleine Vorsichtshinweise dazu:
Nachdem es mehrere Layouts gibt, gibt es nicht EINE ID für Layoutblock, sondern jedes Layout hat seinen Block. Über Layoutmanager und Layoutname kommst Du dort hin.

HTH, - alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 18. Mai. 2011 15:45    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

Hi Alfred,

noch ein Problemchen ist aufgetreten. Nach dem ich die neuen Punkte der Polylinie hinzugefügt habe und diese benutzt habe um die Schraffur zu erstellen, bräuchte ich die Polylinie wieder in ihrer vorherigen Art, also nicht geschloßen und ohne die zusätzlichen Punkte.


    Protected Overrides Function WorldDraw(ByVal draw As Autodesk.AutoCAD.GraphicsInterface.WorldDraw) As Boolean
        Dim Punkt As Point3d
        points.Add(BasePt)
        For Each Punkt In points
            Dim mvertex As Vertex2d = New Vertex2d(Punkt, 0, 0, 0, 0)
            Poly.AppendVertex(mvertex)
        Next
        Dim myhatch As Hatch = New Hatch
        Dim ObiD As ObjectIdCollection = New ObjectIdCollection
        Poly.Closed = True
        ObiD.Add(Poly.ObjectId)
        myhatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID")
        draw.Geometry.Draw(Poly)
        myhatch.AppendLoop(HatchLoopTypes.Default, ObiD)
----hier müsste die Polylinie wieder zurück gestzt werden---
    End Function

wie krieg ich das hin? kann ich closed wieder einfach auf "false setzen? Wie kann ich die zuletzt eingefügten Punkte löschen?

Danke Theo

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


Ex-Mitglied

erstellt am: 18. Mai. 2011 16:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

wieso arbeitest Du denn mit der alten Poly?

Bei der LWPoly gibts ein .removeVertexAt

Die alte Version hab ich nicht im Kopf, nur soweit, die Kopfstände mit dem alten Polylinientyp sind mit rotem Kopf verbunden. Wenn ich mich recht erinnere, dann musst Du das Vertex_Datenbankobjekt zuerst mal zum Schreiben öffnen und dann löschen.

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 18. Mai. 2011 16:56    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

Hi Alfred,

ich hab mit der alten Poly2d gearbeitet,weil ich ein altes beispiel kopiert habe. Jetzt habe ich auf nur "Polylinie" umgestellt.
Es klappt jetzt bis auf die Schraffur, wenn ich die erstellen möchte, dann bricht ACAD ab und ich krieg die Fehlermeldung "eInvalidInput".
Mein Jig sieht inzwischen so aus:

    Protected Overrides Function WorldDraw(ByVal draw As Autodesk.AutoCAD.GraphicsInterface.WorldDraw) As Boolean
        Poly.AddVertexAt(0, New Point2d(BasePt.X, BasePt.Y), 0, 0, 0)
        Dim myhatch As Hatch = New Hatch
        Dim ObiD As ObjectIdCollection = New ObjectIdCollection
        Poly.Closed = True
        ObiD.Add(Poly.ObjectId)
        myhatch.SetHatchPattern(HatchPatternType.PreDefined, "SOLID")
        draw.Geometry.Draw(Poly)
        myhatch.AppendLoop(HatchLoopTypes.Polyline, ObiD)
        Poly.Closed = False
        Poly.RemoveVertexAt(0)
    End Function

Was mach ich jetzt noch falsch? Muß ich die Poly irgendwie regenerieren, bevor ich sie verwenden kann?

Danke Theo

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


Ex-Mitglied

erstellt am: 18. Mai. 2011 17:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

eine Poly mit einem einzigen Vertex ist keine gültige Schraffurgrenze.

Polylinien müssen imho zumindest 2 Vertizes haben, und damit sie als Grenze für eine schraffierbare Fläche herhalten können ==> zumindest 3 Vertizes plus 'geschlossen' sein.

- alfred -

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


Ex-Mitglied

erstellt am: 18. Mai. 2011 23:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


CADde_dotNET_HatchJigMain_AN01.zip

 
Hi,

nun denn, hier ein Beispiel, das:

a) JIG mit Schraffur zeigt
b) JIG in Modellbereich und Layout (was halt gerade aktuell ist) zeigt.

Viel Erfolg damit, - alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 19. Mai. 2011 10:22    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

Danke für die Beispiele. Die schau ich mir heut nachmittag an.
leider kann ich sie mit VB Express 2008 nicht öffnen. Du hast sie vielleicht mit 2010 erstellt. Ist aber egal, ich kann sie ja im Editor öffnen und dann die Texte kopieren. Sieht wie immer sehr proffesionell aus. Werd versuchen zu verstehnen was da abläuft und das dann in meine Jig zu übernehmen.
Danke und Gruß, Theo

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

Theo37
Mitglied
Techniker


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

Beiträge: 426
Registriert: 08.10.2008

ACAD 2024
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 20. Mai. 2011 12: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

Hi Alfred,

funktioniert super. Nur bei schneller Mausbewegung(hin und her) bleibt ACAD hängen. Kann ich die Darstellung ein bischen träger machen. Damit es stabiler läuft.
Ich dachte es ginge hier:

If pLastPnt.DistanceTo(tPnt) > 0.1 Then

hat aber keine Auswirkung. Hast Du noch eine Idee wie mann es etwas ruhiger machen kann.

Danke, Theo

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



Anzeige:Infos zum Werbeplatz >>

LAYOUT CAD APP für AEC - Architektur-, Ingenieur- und Bauwesen

LAYOUT = ein Werkzeug für die Erstellung von Signallageplänen


Ex-Mitglied

erstellt am: 20. Mai. 2011 12:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Nur bei schneller Mausbewegung(hin und her) bleibt ACAD hängen

Sag Deinen Leuten halt, die sollen nicht so hektisch herumtun, heut ist Freitag und die Maus ist müde.   


Spass beiseite:

Zum einen gibt's noch den Event des PointMonitors, da kann man eingreifen (geht tief, ... sehr tief, dafür wär's ganz sauber).

Alternative (die leichtere Variante) wäre: Du speicherst Dir in einer Variable die Zeit des letzten Updates und wird dieses aufgerufen, wenn noch keine 5ms vergangen sind, dann überspringst Du das Update-Zeichnen.
VORSICHT DABEI: dass Dir nicht die letzte Position dabei entgeht. 

Als dritte Variante würde mir noch einfallen, mal mit DoEvents während der Update-Sub den anderen Events eine Chance zu geben ==> das hab ich aber nicht probiert, könnte Brösel geben.

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