Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  AutoCAD VBA
  Problem mit IntersectWith bei Block

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:  Problem mit IntersectWith bei Block (1763 mal gelesen)
Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 04. Aug. 2010 10:02    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 miteinander,

ich brauche den Schnittpunkt einer Linien und eines eingefügten Blocks.
Unter http://ww3.cad.de/foren/ubb/Forum259/HTML/000513.shtml#000001  habe ich einen Ansatz gefunden, der auch funktioniert, wenn der eingefügte Block aus einer einfachen Linie besteht.

Meine Blöcke sind aber alles Polylinien. Nun erhalte ich in der IntersectWith-Zeile immer die Fehlermeldung: Fehler 445 (Object doesn't support this action)

Kann mir bitte jemand weiterhelfen?

Mit freundlichen Grüßen

der Gemütsmensch

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

Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 04. Aug. 2010 17:16    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!

Inzwischen habe ich herausgefunden, daß es gar nicht an den Blöcken liegt, sondern daß auch mit Polylinien kein "IntersectWith" möglich ist. Hier ein Stück Code zum Testen:

Code:
    Dim Punkte(0 To 8) As Double
    Punkte(0) = 3: Punkte(1) = 0: Punkte(2) = 0
    Punkte(3) = 3: Punkte(4) = 10: Punkte(5) = 0
    Punkte(6) = 20: Punkte(7) = 10: Punkte(8) = 0
    Set Polylinie = ThisDrawing.ModelSpace.AddPolyline(Punkte)
   
    Dim Punkte1(0 To 2) As Double
    Dim Punkte2(0 To 2) As Double
    Punkte1(0) = 0: Punkte1(1) = 12: Punkte1(2) = 0
    Punkte2(0) = 20: Punkte2(1) = 12: Punkte2(2) = 0
    Set Linie1 = ThisDrawing.ModelSpace.AddLine(Punkte1, Punkte2)
    Linie1.Update
     
    Punkte1(0) = 5: Punkte1(1) = 0: Punkte1(2) = 0
    Punkte2(0) = 5: Punkte2(1) = 20: Punkte2(2) = 0
    Set Linie2 = ThisDrawing.ModelSpace.AddLine(Punkte1, Punkte2)
    Linie2.Update

    intPunkte = Linie1.IntersectWith(Linie2, acExtendNone)
    intPunkte = Polylinie.IntersectWith(Linie2, acExtendNone)



Erst in der letzten Zeile kommt die Fehlermeldung 445.

Hat jemand ähnliche Erfahrung und weiß Abhilfe? Ich bräuchte dringend Hilfe.

Mit freundlichen Grüßen

der Gemütsmensch

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


Ex-Mitglied

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

Hi,

Dein Code, ergänzt durch die fehlenden Deklarationen funkt bei mir.

Code:
  Dim Polylinie As AcadPolyline
  Dim Linie1 As AcadLine
  Dim Linie2 As AcadLine
  Dim intPunkte As Variant

  ....


Nur arbeite ich mit AutoCAD und nicht mit Bricscad!

- alfred -

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

Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 04. Aug. 2010 20:38    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 und andere,

doch doch, die gleiche Deklaration ist bei mir auch vorhanden. Ich hatte nur den wichtigen Code- Abschnitt gepostet.

Wahrscheinlich ist das wirklich ein BricsCAD- bug. 

Nun habe ich einen anderen Lösungsansatz, den Schnittpunkt zwischen einer Polylinie und einer Linie zu ermitteln. Mit explode zerlege ich die Polylinie in Teilstrecken und durchlaufe diese mit einer Schleife, bis ich den Schnittpunkt gefunden habe. Das klappt mit einer eingefügten Polylinie auch prima.

ABER, wenn ich einen eingefügten Block (mein eigentliches Ziel) zerlege, ergibt sich daraus erst die Polylinie und diese wehrt sich standhaft gegen ein weiteres ".explode".

Code:
Set Block_eingefuegt1 = ThisDrawing.ModelSpace.InsertBlock(Einsetzpunkt, Block_mit_Pfad, 1#, 1#, 1#, 0)
Set Poly_aus_Block = Block_eingefuegt1.Explode

Das gibt Fehlermeldung...

Hat jemand eine Idee?

Gruß

der Gemuetsmensch

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

Christian Blei
Mitglied



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

Beiträge: 124
Registriert: 23.06.2008

Thinkpad T60p, 4GB
XP,Autocad 2010, ProStructures V8i 2, VBA, VB.NET,

erstellt am: 05. Aug. 2010 07:52    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 Gemuetsmensch 10 Unities + Antwort hilfreich

Hi,

Da es grundsätzlich bei .intersectwith mehrere Schnittpunkte geben kann, wird vermutlich ein Array zurückgegeben, den man definieren muss. Dann den Array durchlaufen.....

Gruss,
Christian

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

Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 05. Aug. 2010 13:49    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 Christian,

das ist leider auch nicht die Lösung, ein Array hatte ich vorher schon probiert. Der Code bricht ja bereits in der Zeile

Code:
intPunkte = Polylinie.IntersectWith(Linie2, acExtendNone)
ab!

Ratlos...

der Gemütsmensch

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


Ex-Mitglied

erstellt am: 05. Aug. 2010 22:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Set Poly_aus_Block = Block_eingefuegt1.Explode

...auch .Explode liefert ein Array und nicht eine Polylinie zurück (auch wenn die Blockdef nur aus einer Poly bestehen sollte).

- alfred -

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

Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 06. Aug. 2010 11:54    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,

Danke für den Hinweis!

Ich habe das versucht umzusetzen.

Code:
-<snip>-
    Dim BlockArr() As Variant
    Dim PartArr() As Variant
    Dim BlockArrCnt As Integer
    Dim PartArrCnt As Integer
    Dim LowBnd As Integer
    Dim UppBnd As Integer
    Dim LowBndPart As Integer
    Dim UppBndPart As Integer
    Dim BlockArrPart As Variant
    Dim intPunkte As Variant
    BlockArr = BlockGezeichnet1.Explode
    LowBnd = LBound(BlockArr)
    UppBnd = UBound(BlockArr)
    For BlockArrCnt = LowBnd To UppBnd
        Set BlockArrPart = BlockArr(BlockArrtCnt)
        PartArr = BlockArrPart.Explode
        LowBndPart = LBound(PartArr)
        UppBndPart = UBound(PartArr)
            For PartArrCnt = LowBndPart To UppBndPart
                Set PartLine = PartArr(BlockArrtCnt)
                intPunkte = PartLine.IntersectWith(myLine1, acExtendNone)
                If VarType(intPunkte) <> vbEmpty And UBound(intPunkte) > -1 Then
                    MsgBox "Schnittpunkt:" 'hier käme Ausgabe, wenn Schnittpunkt gefunden
                Else
                    'MsgBox "keine Schnittpunkte"
                End If
            Next PartArrCnt
    Next BlockArrCnt
-<snip>-

Das läuft auch durch, jedoch wird kein Schnittpunkt vermeldet, obwohl eindeutig eine der Teillinien einen Schnittpunkt mit myLine1 aufweist, den ich mit dem Fangpunkt "Schnittpunkt" als solchen geprüft habe.

Könntest Du mir bitte helfen, eventuell den Code einmal in einer anderen BricsCAD- oder AutoCAD- Version laufen lassen?

Mit freundlichen Grüßen und für alle Hilfe dankend

der Gemütsmensch

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


Ex-Mitglied

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

Hi,

>> Könntest Du mir bitte helfen, eventuell den Code einmal in einer anderen BricsCAD- oder AutoCAD- Version laufen lassen?

Mit AutoCAD könnt ich es versuchen, hätte ich die Zeichnung mit dem Block. Denn dass Schnittpunkte mit Deinem Code gefunden werden oder nicht, liegt ja dann auch schon an dem Blockeinfügepunkt, ev. auch an dem Z-Wert der Polylinie in der Blockdefinition, an einer räumlichen Verdrehung der Poly oder der Blockreference, ....

Nicht immer ist der Code fehlerhaft. 

- alfred -

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

Gemuetsmensch
Mitglied



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

Beiträge: 18
Registriert: 04.08.2010

BricsCAD 9

erstellt am: 08. Aug. 2010 19: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 Alfred,

es liegt vielleicht an ... dummen Schreibfehlern hattest Du noch vergessen. Wenn man es eilig hat, glaubt man durch weglassen von Option Explicit Zeit zu sparen - mitnichten. Bei BlockArrCnt hatte sich ein t eingeschlichen und beim zweiten Array verwendete ich den falschen Zähler.

So findet der Code nun endlich den Schnittpunkt:

Code:
-<snip>-
    Dim BlockArr() As Variant
    Dim PartArr() As Variant
    Dim BlockArrCnt As Integer
    Dim PartArrCnt As Integer
    Dim LowBnd As Integer
    Dim UppBnd As Integer
    Dim LowBndPart As Integer
    Dim UppBndPart As Integer
    Dim BlockArrPart As Variant
    Dim intPunkte As Variant
    BlockArr = BlockGezeichnet1.Explode
    LowBnd = LBound(BlockArr)
    UppBnd = UBound(BlockArr)
    For BlockArrCnt = LowBnd To UppBnd
        Set BlockArrPart = BlockArr(BlockArrCnt)
        PartArr = BlockArrPart.Explode
        LowBndPart = LBound(PartArr)
        UppBndPart = UBound(PartArr)
            For PartArrCnt = LowBndPart To UppBndPart
                Set PartLine = PartArr(PartArrCnt)
                intPunkte = PartLine.IntersectWith(myLine1, acExtendNone)
                If VarType(intPunkte) <> vbEmpty And UBound(intPunkte) > -1 Then
                    MsgBox "Schnittpunkte: x:" & intPunkte(0) & " y: " & intPunkte(1)
                Else
                    'MsgBox "keine Schnittpunkte"
                End If
            Next PartArrCnt
    Next BlockArrCnt
-<snip>-

Direkt mit der Polylinie arbeiten zu können, wäre mir zwar lieber gewesen, da unkomplizierter. Doch mit dieser Auflösung in Teilstrecken komme ich wenigstens zu einem Ergebnis.

An Alfred und alle anderen Helfer ein ganz herzliches Vergelt's Gott!

der Gemütsmensch

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