Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Kann man Objekte temporär auf dem Zeichnungsbildschirm anzeigen

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:  Kann man Objekte temporär auf dem Zeichnungsbildschirm anzeigen (1882 mal gelesen)
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: 19. Jul. 2010 22: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

Hallo liebes Forum,

ich möchte mit VB.Net Objekte erstellen, die nur auf dem
Zeichnungsbildschirm angezeigt werden und nicht in die Datenbank
gespeichert werden. So wie z.B. daß BKS-Symbol oder Hilfspunkte
von AutoCAD. Am liebsten auch noch Transparent und beim Zoomen
sollen sie mitgezoomt werden.

Ist sowas überhaupt möglich? Kann man sowas mit GDI+ zeichnen?
Gibts im AutoCAD dafür einen extra Zeichenbereich in dem man solche Objekte zeichnen kann?
Hab keine Ahnung wo ich da ansetzen soll.
Bin für jeden Rat dankbar.

Gruß Werner

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


Ex-Mitglied

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

Hi,

ja geht, aber ein wenig Vorsicht!

Mit/ab 2010 gibt es die Möglichkeit, sich in das 'Regenerieren' von Geometrieobjekten einzumischen, genannt 'Overruling'. Eine kleine Einführung findest Du z.B. >>>hier<<<.

Wieso 'Vorsicht' ==> das funktioniert nur dort, wo Deine Applikation geladen ist, die Darstellung läßt sich nicht im DWG transportieren (aber das scheinst Du ja zu wollen ).

Lass uns wissen, wenn obiger Link nicht ausreichend ist, dann aber bitte mit konkreteren Info's. 

Den Bildschirm über GDI(plus) zu überschreiben macht imho die Aufgabe nur deutlich schwieriger, da Du jeden PAN, jeden ZOOM, jedes Ansichtsfenster in Layouts etc überwachen musst.

- alfred -

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 20. Jul. 2010 07:09    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 Wene71 10 Unities + Antwort hilfreich

Hallo Werner,

Alfred hat bereits die Lösung geschrieben. Aber was man vorher auch wissen sollte: Die Objekte sind eben wirklich nur am Bildschirm dargestellt. Objektfang kann auf diese nicht angewandt werden. Es ist also mehr als eine zusätzliche Bildschirm-Information zu verstehen. Ich habe dies in einem Fall bereits genutzt, wo gerade das ein enormer Nachteil war. Ansonsten ist das eine tolle Sache, weil man ohne eigene Objektdefinition die Objekte anders darstellen kann.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

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. Jul. 2010 22:01    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 ihr zwei,

danke für die tollen Infos!
Ich hab mit dem Overrule-Dingsbums ein wenig rumgespielt.
Und hab mal was zusammengeschrieben (sh. code).
Nach dem Laden mit Command: testrect aktivieren.

Hier wird ein rotes Rechteck 50x50 generiert sobald man eine
Linie zeichnet. Dieses Rechteck ist damit auch mit der
Linie untrennbar verbunden.

Ich möchte aber ein Rechteck erzeugen das nicht mit einem
AutoCAD-Objekt verbunden ist.

Es soll eine einfache Markierungsfläche sein die
nur visuell auf dem Bildschirm angezeigt wird und nicht in Die DB
gespeichert wird. Es soll während eines Programmablaufs
vorübergehend angezeigt werden und danach wieder verschwinden.
Außerdem soll es nicht selectiert werden können oder andere
Objekte überlagern so daß diese nicht gefangen werden können.

Ich komme nicht dahinter wie das gehen könnte.


Code:
Imports System
Imports Autodesk.AutoCAD
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.GraphicsInterface

Public Class RectDrawOverrule : Inherits DrawableOverrule

    Public Overrides Function WorldDraw(ByVal drawable As Drawable, ByVal wd As WorldDraw) As Boolean

        Try
            Dim pts As New Point3dCollection

            pts.Add(New Point3d(50, 50, 0))
            pts.Add(New Point3d(100, 50, 0))
            pts.Add(New Point3d(100, 100, 0))
            pts.Add(New Point3d(50, 100, 0))

            Dim oldFillType As GraphicsInterface.FillType = wd.SubEntityTraits.FillType
            wd.SubEntityTraits.FillType = GraphicsInterface.FillType.FillAlways

            Dim oldColor As Short = wd.SubEntityTraits.Color
            wd.SubEntityTraits.Color = 1

            wd.Geometry.Polygon(pts)

            wd.SubEntityTraits.FillType = oldFillType
            wd.SubEntityTraits.Color = oldColor

        Catch ex As Autodesk.AutoCAD.Runtime.Exception
            WriteLine(ex.ErrorStatus.ToString)
        End Try

        Return MyBase.WorldDraw(drawable, wd)
    End Function

End Class


Public Class RectDrawScreen
    Private Shared mRectDrawOverrule As RectDrawOverrule

    <CommandMethod("testrect")> _
    Public Sub Test()
        mRectDrawOverrule = New RectDrawOverrule
        Overrule.AddOverrule(RXObject.GetClass(GetType(Line)), mRectDrawOverrule, False)
        Overrule.Overruling = True
    End Sub

End Class


Gruß Werner

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


Ex-Mitglied

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

Hi Werner,

>> Es soll eine einfache Markierungsfläche sein die
>> nur visuell auf dem Bildschirm angezeigt wird und nicht in Die DB
>> gespeichert wird. Es soll während eines Programmablaufs
>> vorübergehend angezeigt werden und danach wieder verschwinden.
>> Außerdem soll es nicht selectiert werden können oder andere
>> Objekte überlagern so daß diese nicht gefangen werden können.

Ohne Eintrag in die DB hätte ich wirklich nur mehr GDI gesehen, aber ich glaube nicht, dass der Eintrag in die DB stört, denn Du kannst diesen Eintrag ja wieder aus der DB löschen, wenn Dein Programmteil abgelaufen ist (im schlimmsten Fall SAVE abfangen und dann vorher löschen).

Du mußt das ja auch nicht an eine Linie hängen, mach in der DB einen AutoCAD-Punkt und lass Dir dort eine rote Fläche herumzeichnen, dann brauchst Du nur mehr den Punkt löschen. Aber ich muß zugeben, auf die schnelle würde mir mal ohne ARX nicht einfallen, wie ich den Fangpunkt auf den AutoCAD-Punkt verhindern könnte.

Für die Verhinderung der Selektion sollte es möglich sein, dass Du den Editor überwachst (auf Selektionsereignisse) und wenn der Punkt selektiert werden sollte, dann diesen Punkt rausnehmen. Irgendwann hatte ich ähnliches mal, ist nur schon länger her.

Letzter kritischer Punkt ist natürlich 'Überlagerung', wenn Du aber den Punkt über Darstellungsreihenfolge 'nach hinten' schickst, dann hast Du auch damit kein Problem mehr (Vorsicht nur, wenn gefüllte Schraffuren in Deiner Zeichnung vorhanden sind).

Waren ein paar Ansätze, hoffentlich nützlich. 

- alfred -

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 21. Jul. 2010 11:46    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 Wene71 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Wene71:
... Ich möchte aber ein Rechteck erzeugen das nicht mit einem
AutoCAD-Objekt verbunden ist.

Es soll eine einfache Markierungsfläche sein die
nur visuell auf dem Bildschirm angezeigt wird und nicht in Die DB
gespeichert wird. Es soll während eines Programmablaufs
vorübergehend angezeigt werden und danach wieder verschwinden.
Außerdem soll es nicht selectiert werden können oder andere
Objekte überlagern so daß diese nicht gefangen werden können.
...


Hallo Werner,

du willst es während des Programmablaufs temporär angezeigt bekommen. Wenn die Anzeige während eines GetXXX-Befehls erscheinen soll, dann schau die mal die JIG-Geschichten an. Damit kannst du eben solche Objekte wie beim Overruling anzeigen lassen .. die sind dann eben auch nicht mit irgendwelchen DB-Objekten verbunden.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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


Ex-Mitglied

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

Hi Holger,

>> ... JIG-Geschichten ...

Gute Idee, die verwendete ich immer nur während Mausaktivitäten, um laufende aktualisierte Voransichten zu erhalten.
Das ohne laufenden Befehl wird imho eine Aufgabe, aber die Idee ist super!

- alfred -

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 21. Jul. 2010 12:37    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 Wene71 10 Unities + Antwort hilfreich

... ja mit den Teilen kann man spannende Geschichten realisieren. Ich nutze das zum Bsp beim Einfügen von Blöcken und der gleichzeitigen Anzeige der Abstände zu bestimmten Polylinien.
Anderes Beispiel: Anzeige der Aktionsradien bei bestimmten Bauteilen .. da wird dann eben temporär ein Kreis angezeigt.

Ich finde das Overruling und das JIGging sind die besten Neuerungen in den letzten Releases .. weil man nun endlich ohne eigene Objekt-Definitionen so tun kann, als seien es eigene Objekte.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

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

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: 21. Jul. 2010 14:23    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 Ihr,

das Overruling war mir bis jetzt noch unbekannt.
Werde mich mal näher damit auseinander setzen, was in dieser
API alles drin steckt. Ich denke man kann damit tolle Sachen
zaubern.

Naja GDI schließe ich für meine Aufgabe mal aus, ich glaube
das würde im Bezug auf Zoom, Pan usw. sehr 'Hackelig' werden.

An das Jig-Objekt hab ich auch schon gedacht!
Mit den Jig-Objekten füge ich immer meine Blöcke ein und lasse sie
beim Einfügen am Cursor kleben bzw. rotieren.
Da muß ich überlegen und probieren ob meine Aufgabe mit Jig
lösbar ist.

Meine Aufgabe mit dem Rechteck habe ich auch schon mit normalen
ACAD-Objekten versucht z.B. Schraffur als Solid. Vorübergehend speicher ich dies dann in die DB und kill sie später wieder.
Das hat alles funktioniert, nur der Hacken war, weil ich dieses
Rechteck Transparent haben will. Dabei muß ich immer die Systemvariable abfragen ob die Objekttransparenzanzeige ein oder aus
ist, und ggf. einschalten. Das benötigt viel Zeit und macht mein Programm langsam. Wäre beim Jiggen wohl das gleiche Übel.

Andere dumme Frage! Im Befehl WAHL bekommt man ja bei der Auswahl
ein grünes bzw. blaues transparentes Fenster. Gibts dieses Fenster
vielleicht irgendwo als Klasse wo man darauf zugreifen kann...?
Genau so ein Fenster stell ich mir vor. Nur daß es länger auf dem
Bildschirm verweilt als nur bei einer Auswahl.

Gruß Werner

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


Ex-Mitglied

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

Hi,

>> ein grünes bzw. blaues transparentes Fenster. Gibts dieses Fenster
>> vielleicht irgendwo als Klasse wo man darauf zugreifen kann...?

Mir nicht bekannt, dass Du auf dieses so Zugriff hättest, dass Du das selbst 'malend' verwenden könntest.

Bzgl. der Schraffur und Transparenz: wenn die Flächen klein sind, dann könntest Du auch den Schraffurtyp 'DOT' nehmen und die Punktdichte der Größe Deines Quadrats anpassen, so hat man früher Transparenz vorgegaukelt.

- alfred -

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

oscarr
Mitglied
CAD-Manager


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

Beiträge: 198
Registriert: 02.10.2007

ACA 2012 - English Win 7/x64

erstellt am: 21. Jul. 2010 15:30    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 Wene71 10 Unities + Antwort hilfreich

Hallo zusammen,

ich habe neulich gerade was gebastelt:
Beitrag
Das malt eine farbig fläche auf den schirm, die Koordinaten kommen aber aus ACAD. die Fläche bleibt bis zum nächsten _regen stehen, es ist nicht in der DB, hängt ein keinem Object, ist aber GDI, da man aber die Punkt easy umrechenen kann lässt es sich vielleicht auch mit zoom etc. händeln. Man müsste das dann abfangen und die grafik neu zeichnen.

LG
Holger

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

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: 21. Jul. 2010 21: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 Holger,

1000 Dank für Deinen Hinweis!
Deinen Tread hatte ich schon mal gelesen. Aber hab ihn einfach
nicht mehr gefunden.
Hab Dein Beispiel mal ausprobiert. Es funktioniert ganz gut
und entspricht auch meinen Vorstellungen.
Das Rechteck blitzt bei meinem Test aber nur kurz auf und terminierte
sich gleich wieder. Dies läßt sich bestimmt beheben!

Gut Zoom und Pan kann man über Ereignisse abfangen und das Rechteck
neu berechnen. Aber ich vermute mal, daß wenn während das Rechteck angezeigt wird und AutoCAD minimiert wird, das Rechteck immer noch auf dem Bildschirm ist. Das könnte man auch abfangen und verwalten.
Aber irgendwie gefällt mir so was nicht.
Werde aber trotzdem auch über diese Variante nachdenken.

Gruß Werner

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