Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Fehlermeldung bei Jig im Layout

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:  Fehlermeldung bei Jig im Layout (1782 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: 423
Registriert: 08.10.2008

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

erstellt am: 16. Mrz. 2011 14:14    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


beiLayout.zip

 
Hallo,

nachdem mein Jig jetzt wunderbar funktioniert(im Modellbereich), habe ich es jetzt auch mal in einem Layout ausprobiert. Leider bekomme ich dort eine hässliche Fehlermeldung. Siehe dazu den anhängenden Screenshot. Was mache ich falsch?
Das ist meine Jig-Klasse:


Function StartJig() As PromptPointResult
        Dim ed As Editor = Application.DocumentManager.MdiActiveDocument.Editor
        myBRef = New DatabaseServices.BlockReference(myOpts.BasePoint, BlockID)
        myPR = ed.Drag(Me)
        Lasteinfügepunkt = New Geometry.Point3d(myBRef.Position.X, myBRef.Position.Y, myBRef.Position.Z)
        myBRef.Dispose()
        Return myPR
    End Function

    Protected Overrides Function Sampler(ByVal prompts As Autodesk.AutoCAD.EditorInput.JigPrompts) As Autodesk.AutoCAD.EditorInput.SamplerStatus
        myPR = prompts.AcquirePoint(myOpts)
        If myPR.Value.IsEqualTo(BasePt) Then
            Return SamplerStatus.NoChange
        Else
            BasePt = myPR.Value
            Return SamplerStatus.OK
        End If
    End Function


    Protected Overrides Function WorldDraw(ByVal draw As Autodesk.AutoCAD.GraphicsInterface.WorldDraw) As Boolean
        draw.Geometry.WorldLine(myOpts.BasePoint, BasePt)
        Dim Führungsvektor As Geometry.Vector3d
        Dim Führungswinkel As Double
        Dim XX As Double
        Dim YY As Double
        Dim Pflag As String
        Dim Einfügepunkt As Geometry.Point3d
        Führungsvektor = myOpts.BasePoint.GetVectorTo(BasePt)
        Führungswinkel = Führungsvektor.AngleOnPlane(New Geometry.Plane)
        Führungswinkel = (Führungswinkel / Pi) * 180
        If Führungswinkel >= 45 And Führungswinkel <= 135 Then 'eioben
            If Rotation = 0 Then
                XX = Scale * Yaussermitte
                YY = Scale * 3.8
            End If
            If Rotation > 0 Then
                XX = 0
                YY = 0
            End If
        End If
        If Führungswinkel > 135 And Führungswinkel < 225 Then 'eilinks
            If Rotation = 0 Then
                XX = 2 * Scale * Yaussermitte
                YY = 0
            End If
            If Rotation > 0 Then
                XX = -3.8 * Scale
                YY = Scale * Yaussermitte
            End If
        End If
        If Führungswinkel >= 225 And Führungswinkel <= 315 Then 'eiunten
            If Rotation = 0 Then
                XX = Scale * Yaussermitte
                YY = Scale * -3.8
            End If
            If Rotation > 0 Then
                XX = 0
                YY = 2 * Scale * Yaussermitte
            End If
        End If
        If Führungswinkel > 315 Or Führungswinkel < 45 Then 'eirechts
            If Rotation = 0 Then
                XX = 0
                YY = 0
            End If
            If Rotation > 0 Then
                XX = 3.8 * Scale
                YY = Scale * Yaussermitte
            End If
        End If
        myBRef.Position = New Geometry.Point3d(BasePt.X + XX, BasePt.Y + YY, BasePt.Z)
        myBRef.Rotation = Rotation
        myBRef.ScaleFactors = New Geometry.Scale3d(Scale, Scale, Scale)
        draw.Geometry.Draw(myBRef)
    End Function


Danke, Theo

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


Ex-Mitglied

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

Hi,

ich konnte (nachdem ich Deinen Code so angepasst habe, dass dieser auch in meine Projektart passt) Dein Problem nicht nachstellen.

Soll heissen ==> ich fliege nicht ab und bekomme auch keine Fehlermeldung. 

Aber (mit Civil 3D 2010)  ==> ich bekomme zwar die Linie, aber nicht die temporäre BlockRef angezeigt, wenn ich im Layout/Papierbereich das ganze anstarte.
Und dann wird's ganz interessant, ab diesem Zeitpunkt wird das ganze krank, da zieht das Fadenkreuz dann Schlieren, das BKS-Symbol wird mehrfach angezeigt und verhält sich auch noch beim ZOOM komisch (eines ändert sich in der Größe mit dem Zoomfaktor, das andere nicht), .... lauter komische Dinge.

Wenn Dir 2011 zur Verfügung steht, dann probiers ev. mal damit; ich vermute da eher einen Bug.

- 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: 423
Registriert: 08.10.2008

erstellt am: 16. Mrz. 2011 16: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

Hi Alfred,

ACAD2011 habe ich leider noch nicht, Civil leider auch nicht.
Was glaubst Du löst den Bug aus.
Könnte es diese Zeile sein:

myBRef = New DatabaseServices.BlockReference(myOpts.BasePoint, BlockID)

Ich habe das Gefühl daß hier der Block in den Modellbereich eingefügt wird. Und wenn ich ihn später verschieben will, entsteht ein Fehler.
Weil ACAD ja im Layout ist.

Gruß, Theo

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


Ex-Mitglied

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

Hi,

>> Was glaubst Du löst den Bug aus.
>> Könnte es diese Zeile sein:
>> myBRef = New DatabaseServices.BlockReference(myOpts.BasePoint, BlockID)

Nein, glaub ich nicht, denn myBRef ist damit ja noch nicht zugewiesen, welchem BlockTableRecord dieser untergeordnet wird. Eigentlich sollte das von WorlDraw übernommen werden, was die aktuelle SpaceID für die Voransicht ist.
Wo der Block letztlich wirklich eingefügt wird, liegt ganz alleine an Dir, dafür gibt es im JIG keine Auswahlmöglichkeit. (zumindest soweit ich es kenne)


Wenn ich des Nächtens dazu komm, schau ich mir's mit 2011 an, das braucht nur ein wenig mehr Zeit, da meine Test-Solutions alle 2010/32bit basierend aufgebaut ist und nicht so ohne weiteres auf 64bit umzubauen ist.

- alfred -

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


Ex-Mitglied

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

Hi,

so, mit folgender anderer Konstellation funkts:

a) statt Civil 3D 2010 (32bit) ==> AutoCAD 2011 (64bit)
b) statt VS2008 ==> VS2010

Also schliesse ich mal daraus, dass es doch einen Haken in AutoCAD hat, denn mit 2011 geht's ja (und dass ich hier VS2010 verwendet habe, glaube ich mal, spielt keine Rolle).

Du kannst jetzt natürlich noch versuchen, die BlockReferenz vor der JIG-Abfrage zu erstellen und diese BlockRef der JIG-Routine übergeben statt eine neue BlockRef innerhalb der JIG-Tätigkeiten zu erstellen.
Der Vorteil wäre, wenn Du die BlockRef schon vorher erstellt hast, dass dieser dann schon der Papierbereich als Owner zugewiesen wäre ..... aber ist nur mal eine Idee, probiert hab ich's jetzt nicht mehr. 

- 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: 423
Registriert: 08.10.2008

erstellt am: 17. Mrz. 2011 08: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

Guten Morgen Alfred,

ich hab es mal so versucht:


  myblock = New DatabaseServices.BlockReference(myPDO.BasePoint, myBTR.ObjectId)
                myJig.myBRef = myblock

dadurch ändert sich nichts.
Oder hätte ich hier dem Block einem Layout zuweisen müssen. Du schreibst:
"Der Vorteil wäre, wenn Du die BlockRef schon vorher erstellt hast, dass dieser dann schon der Papierbereich als Owner zugewiesen wäre".

Pasiert dieses Zuweisen automatisch oder muß ich das machen?

Danke, Theo

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


Ex-Mitglied

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

Hi,

>> Oder hätte ich hier dem Block einem Layout zuweisen müssen
>> Pasiert dieses Zuweisen automatisch oder muß ich das machen?

Das musst schon Du machen! Wenn Du im Modellbereich bist, musst ja auch Du die BlockReference dem ModelSpace hinzufügen. 

Also CurrentSpace prüfen, dann dessen BlockTableRecord schnappen und dem die BlockReference in den Rachen werfen.

Code:
Dim tSpace As BlockTableRecord = CType(tTrAct.GetObject(AcadDoc.Database.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord)
Dim tBlRef As BlockReference = New BlockReference(tPntRes.Value, tBlDef.ObjectId)
tSpace.AppendEntity(tBlRef)
tTrAct.AddNewlyCreatedDBObject(tBlRef, True)

Das TransAction.Commit würd ich zuerst nach dem JIG-Aufruf probieren.

- 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: 423
Registriert: 08.10.2008

erstellt am: 17. Mrz. 2011 13: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

Hallo Alfred,

Ich habe deine Zeilen mal vor dem JIg Aufruf eingebaut.
War vielleicht falsch. Ich kriege im ACAD selber die Fehlemeldung

AuoCAD-Fehler - Abbruch
INTERNER FEHLER; !dbobj.Cpp@7227: eNotOpenFor Write

Jetzt probier ichs mal im StartJig.
Den Satz "Das TransAction.Commit würd ich zuerst nach dem JIG-Aufruf probieren." kapier ich leider nicht. Was meinst Du damit?

Danke 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: 423
Registriert: 08.10.2008

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

erstellt am: 17. Mrz. 2011 14: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 Alfred,

an der Stelle gebe ich auf. Alle meine Versuche enden damit, daß ACAD abbricht. Jetzt hatte ich kpl. alles in die StartJig gebaut. Ergebniss ist:
AutoCad bricht ohne Fehlermeldung ab.
Ich denke ich lasse den Block nur im Modellbereich als Jig anzeigen.
Im Layout gibts dann halt nur die Draglinie und keine Vorschau auf den Block.

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: 423
Registriert: 08.10.2008

erstellt am: 21. Mrz. 2011 14: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

Hallo Alfred,

jetzt ist mir die Idee gekommen, die Umrisse der Blöcke im Layout manuell nachzustellen. Funktioniert schneller, aber halt wesentlich weniger detailiert. Nun möchte ich auch noch die Attribute als Text darstellen. Aber da weiß ich nicht so recht welche Variable ich verwenden soll. Ich hab's mal mit Mtext probiert. Aber dem kann ich keine Ausrichtung zuweissen und auch keinen Text.
Kannst Du mir ein kleines Beispiel geben oder nennen, wo mal in einem JIg ein Text dargestellt wird?
Danke, Theo
Unten mal meine Versuche:


        Else
            Dim Objects(4) As Object
            Dim Mypoint As Geometry.Point3d
            Dim aktObj As Object
            Dim myline As Line
            Dim mytext As MText
            Dim i As Integer
            Mypoint = New Geometry.Point3d(BasePt.X + XX, BasePt.Y + YY, BasePt.Z)
            Objects(3) = New Line(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y - 3.8, Mypoint.Z), New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y - 3.8, Mypoint.Z))
            Objects(2) = New Arc(New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y, Mypoint.Z), New Geometry.Vector3d(0, 0, 1), 3.8, Math.PI * 270 / 180, Math.PI * 90 / 180)
            Objects(0) = New Line(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y + 3.8, Mypoint.Z), New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y + 3.8, Mypoint.Z))
            mytext.Location = New Geometry.Point3d(Mypoint.X + Yaussermitte, Mypoint.Y - 1.9, Mypoint.Z)


            mytext.Text.? = " Das ist ein Text"

''' hier beginnen die Probleme'''


            If Datei IsNot "NEB_Bezeichnung3" Then
                ReDim Preserve Objects(5)
                Objects(5) = New Line(Mypoint, New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte), Mypoint.Y, Mypoint.Z))
            End If
            Objects(1) = New Arc(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y, Mypoint.Z), New Geometry.Vector3d(0, 0, 1), 3.8, Math.PI * 90 / 180, Math.PI * 270 / 180)

            For i = 0 To Objects.Length - 1
                aktObj = Objects(i)
                aktObj.TransformBy(Geometry.Matrix3d.Rotation(Rotation, New Geometry.Vector3d(0, 0, 1), Mypoint))
                aktObj.TransformBy(Geometry.Matrix3d.Scaling(Scale, Mypoint))
                aktObj.layer = Application.DocumentManager.MdiActiveDocument.AcadDocument.activelayer.name
                draw.Geometry.Draw(aktObj)
                aktObj.dispose()
            Next i
        End If

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


Ex-Mitglied

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

Hi,

ich würde es nicht mit MTEXT lösen, sondern mit normalem Text (der ist schneller erzeugt und schneller am Display).
Hier beide Erstellungsvarianten:

Code:
'normaler TEXT
Dim tTextObj As DatabaseServices.DBText = New DatabaseServices.DBText
tTextObj.Height = 2.0
tTextObj.TextString = "Mein Text"
tTextObj.Position = New Geometry.Point3d(10, 5, 0)

'MTEXT
Dim tMTextObj As DatabaseServices.MText = New DatabaseServices.MText
tMTextObj.TextHeight = 2.0
tMTextObj.Contents = "Mein Text"
tMTextObj.Location = New Geometry.Point3d(10, 2, 0)


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: 423
Registriert: 08.10.2008

erstellt am: 22. Mrz. 2011 09: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

Hi Alfred,

ich möchte normalen Text verwenden. Aber irgendwie reagiert dieser gar nicht so wie ich möchte. Ich möchte daß er unten zentriert angezeigt wird, so daß er unabhängig von der Länge mittig dargestellt wird.
Aber egal was ich eingebe er wird immer nur ganz normal angezeigt. Muß ich den Text irgendwie aktualisieren?
Unten mein Programm-Text:
Danke Theo

Else
            Dim Objects(4) As Object
            Dim Mypoint As Geometry.Point3d
            Dim aktObj As Object
            Dim myline As Line
            Dim mytext As DBText
            Dim i As Integer

            Mypoint = New Geometry.Point3d(BasePt.X + XX, BasePt.Y + YY, BasePt.Z)
            Objects(3) = New Line(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y - 3.8, Mypoint.Z), New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y - 3.8, Mypoint.Z))
            Objects(2) = New Arc(New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y, Mypoint.Z), New Geometry.Vector3d(0, 0, 1), 3.8, Math.PI * 270 / 180, Math.PI * 90 / 180)
            Objects(0) = New Line(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y + 3.8, Mypoint.Z), New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte) - 3.8, Mypoint.Y + 3.8, Mypoint.Z))
            mytext = New DBText
            mytext.Position = New Geometry.Point3d(Mypoint.X - Yaussermitte, Mypoint.Y - 1.9, Mypoint.Z)
            mytext.Height = 2.0
            mytext.TextString = "Mein Text"
            mytext.HorizontalMode = TextHorizontalMode.TextMid
            mytext.VerticalMode = TextVerticalMode.TextVerticalMid
            mytext.AlignmentPoint = New Geometry.Point3d(Mypoint.X - Yaussermitte, Mypoint.Y - 1.9, Mypoint.Z)

            Objects(4) = mytext
            If Datei IsNot "NEB_Bezeichnung3" Then
                ReDim Preserve Objects(5)
                Objects(5) = New Line(Mypoint, New Geometry.Point3d(Mypoint.X + (-2 * Yaussermitte), Mypoint.Y, Mypoint.Z))
            End If
            Objects(1) = New Arc(New Geometry.Point3d(Mypoint.X + 3.8, Mypoint.Y, Mypoint.Z), New Geometry.Vector3d(0, 0, 1), 3.8, Math.PI * 90 / 180, Math.PI * 270 / 180)

            For i = 0 To Objects.Length - 1
                aktObj = Objects(i)
                aktObj.TransformBy(Geometry.Matrix3d.Rotation(Rotation, New Geometry.Vector3d(0, 0, 1), Mypoint))
                aktObj.TransformBy(Geometry.Matrix3d.Scaling(Scale, Mypoint))
                aktObj.layer = Application.DocumentManager.MdiActiveDocument.AcadDocument.activelayer.name
                draw.Geometry.Draw(aktObj)
                aktObj.dispose()
            Next i
        End If

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


Ex-Mitglied

erstellt am: 22. Mrz. 2011 10:07    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ohne es jetzt probiert zu haben, ich meine, Du stolperst über ein Problem, dass AutoCAD das nicht kann.
Also wirst Du den Punkt links-unten selbst ermitteln müssen. 

Wieso meine ich das: Wenn Du mal probierst, ohne Öffnung ein DWG im Editor (nur die Datenbank als Database-Objekt öffnen) Texte oder Attribute anders als links-unten zu erstellen, dann wirst Du beim nachträglichen Öffnen der Zeichnung im Editor erkennen, dass die Ausrichtungen nicht gespeichert sind. Argert mich schon ne ganze zeitlang.

Sorry für die Nachricht, - 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: 423
Registriert: 08.10.2008

erstellt am: 29. Mrz. 2011 14:06    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,

jetzt funktioniert Alles, im Modell und auch im Layout.
Jetzt möchte ich nur noch eines ausschließen. Wenn der Zeichner im Layout ist und in ein Ansichtfenster geklickt hat. Dann soll er ne Fehlermeldung bekommen.
Wie stell ich fest ob das der Fall ist?

Danke, Theo

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


Ex-Mitglied

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

Hi,

>> Jetzt möchte ich nur noch eines ausschließen. Wenn der Zeichner im Layout ist
>> und in ein Ansichtfenster geklickt hat

Dafür gibt es die Attribute im Befehlsaufruf (bei der Befehlsdefinition), z.B.:

Code:
<Runtime.CommandMethod("CmdXX", Runtime.CommandFlags.NoPaperSpace)>

- 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: 423
Registriert: 08.10.2008

erstellt am: 29. Mrz. 2011 14:33    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,

hab ich probiert. Aber dann geht es im Layout gar nicht mehr.
Ich kann das ein bisschen schlecht erklären. Aber ich probiers noch mal. Es soll nur dann nicht gehen, wennn sich der User im Layout befindet und sich dann über ein Ansichtsfenster in den Modellbereich geklickt hat. Wenn er dann den Befehl startet, soll er lieber eine Fehlermeldung bekommen, als das irgendwas chaotisches passiert.
Gibt es dafür auch einen commandFlag. oder krieg ich selber irgendwie raus, ob irgendein Ansichtsfenster im Layout aktiv ist.?

Danke, Theo

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


Ex-Mitglied

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

Hi,

Du kannst auch noch die Variable CTAB prüfen, dann weisst Du, ob der Anwender ein Layout aktiv hat oder den Modellbereich selbst.

- 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: 423
Registriert: 08.10.2008

erstellt am: 29. Mrz. 2011 16: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

Sorry, das ist auch keine Lösung.
Ctab gibt mir lediglich den Namen des aktiven Layouts(Registers) wieder.
Aber ich weiß ja immer noch nicht, ob der Anwender sich nicht doch über ein Ansichtsfenster im Modell befindet.

Wenn man z.B. den Plotbefehl startet und ist vorher in einem Ansichtsfenster. Dann springt ACAD automatisch aus dem Ansichtsfenster in den Papierbereich. So was bräuchte ich auch.

Gruß, Theo

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


Ex-Mitglied

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

Hi,

>> ob der Anwender sich nicht doch über ein Ansichtsfenster im Modell befindet

Doch, denn wenn CTAB auf 'Layout1' steht, dann weißt Du, dass er im Layout ist, egal ob im Ansichtsfenster drin oder draussen.
Wenn in CTAB 'Modell' steht, dann kann er nur im eigentlichen Modellbereich sein.


>> Wenn man z.B. den Plotbefehl startet und ist vorher in einem Ansichtsfenster.
>> Dann springt ACAD automatisch aus dem Ansichtsfenster in den Papierbereich

Dafür gibt's die .MSPace-Eigenschaft eines Documents (COM-basierend)

Code:
Dim tAcadDocCOM as Interop.AcadDocument
'zuweisen Deines Documents
tAcadDocCOM.MSpace = true  'oder eben false, was Du auch immer brauchst

Wenn Du für diese Schaltung managed bleiben willst, da guck Dir aus der Database die Eigenschaft .CurrentSpaceId an (wobei probier mal, da bin ich jetzt nicht sicher, welche ID da jetzt zurückkommt).   

- 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: 423
Registriert: 08.10.2008

erstellt am: 30. Mrz. 2011 14: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

Danke, das wars was ich suchte.
Die Zeilen die den Befehl abbrechen sehen jetzt so aus:

Dim AcadDoc2 As AcadDocument
        AcadDoc2 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.AcadDocument
        If AcadDoc2.ActiveLayout.ModelType = False Then
            If AcadDoc2.MSpace Then
                MsgBox("Sorry, das geht nicht im Ansichtsfenster!!", MsgBoxStyle.Critical, "Stop!")
                Exit Sub
            End If
        End If

Gruß, theo

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