| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Überschneidungen feststellen (2300 mal gelesen)
|
Brennivin Mitglied
Beiträge: 3 Registriert: 06.05.2004
|
erstellt am: 06. Mai. 2004 16:58 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe folgendes Problem: ich habe eine Linie gezeichnet und mehrere Rechtecke, die auf dieser Linie liegen. Dies habe ich zu einem Block gemacht. Es können mehrere dieser Blöcke eingefügt werden. Nun möchte ich feststellen, ob sich irgendwelche dieser Blöcke überlagern. Ich habe Dim ref1 As AcadBlockReference Dim ref2 As AcadBlockReference For I = 0 To ThisDrawing.Blocks.Count - 1 Set ref1 = ThisDrawing.Blocks.Item(I) '*Hier Fehler "Type mismatch" For J = 0 To ThisDrawing.Blocks.Count - 1 Set ref2 = ThisDrawing.Blocks.Item(J) Dim intPoints As Variant intPoints = ref1.IntersectWith(ref2, acExtendNone) If intPoints <> 0 Then MsgBox "Überschneidung!", vbExclamation End If Next Next versucht, gibt aber Fehlermeldung beim Sternchen. Wer kann mir bitte helfen? Gruss Brennivin Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 07. Mai. 2004 13:48 <-- editieren / zitieren --> Unities abgeben: Nur für Brennivin
|
Brennivin Mitglied
Beiträge: 3 Registriert: 06.05.2004
|
erstellt am: 07. Mai. 2004 17:41 <-- editieren / zitieren --> Unities abgeben:
Hallo, erst einmal herzlichen Dank an mapcar. Du hast den Knoten gelöst: Dim intType(0) As Integer Dim varData(0) As Variant Dim colSelSets As AcadSelectionSets Dim selSet As AcadSelectionSet Set colSelSets = ThisDrawing.SelectionSets For Each sSet In colSelSets If sSet.Name = "Zugauswahl" Then sSet.Delete Exit For End If Next intType(0) = 0 varData(0) = "INSERT" Set sSet = colSelSets.Add("Blabla") sSet.Select acSelectionSetAll, , , intType, varData For intCnt = 0 To sSet.Count - 1 If TypeOf sSet.Item(intCnt) Is AcadBlockReference Then Set objBlkRef = sSet.Item(intCnt) End If For intCnt2 = intCnt + 1 To sSet.Count - 1 If TypeOf sSet.Item(intCnt2) Is AcadBlockReference Then Set objBlkRef2 = sSet.Item(intCnt2) MsgBox objBlkRef.Name + ", " + objBlkRef2.Name End If intPoints = objBlkRef2.IntersectWith(objBlkRef, acExtendNone) Next intCnt2 Next intCnt sSet.Delete If UBound(intPoints) > 0 Then MsgBox "Überschneidung!", vbExclamation End If Nun aber das nächste Problem: wenn ich die Funktion ausführe, und die eingefügten Blockreferenzen (;-)) sich in der Zeichnung nicht überschneiden, findet ACAD trotzdem einen Schnittpunkt. Das Problem tritt aber nur dann auf, wenn die Blöcke sich in senkrechter Richtung irgendwie über- oder untereinander stehen; wie gesagt, sie berühren sich nicht. Also in der beigefügten Zeichnung: Objekt 1 und Objekt 2 ergeben bei der Überprüfung Schnittpunkte Objekt 1 und Objekt 3 ergeben keinen Schnittpunkt Objekt 2 und Objekt 3 ergeben keinen Schnittpunkt Vor allem die erste Zeile bereitet mir Kopfzerbrechen, da ja augenscheinlich kein Schnittpunkt zu sehen ist. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 07. Mai. 2004 21:32 <-- editieren / zitieren --> Unities abgeben: Nur für Brennivin
Keine Ahnung, wie IntersectWith bei Inserts arbeitet, das hatte ich noch nie... Auf den ersten Blick sieht es so aus, als würde nur das Umgebungsrechteck getestet. Zeichne doch mal den/die gefundenen Punkte ein, damit man sieht, wo sie liegen. Wenn meine Vermutung zutrifft, musst du noch alle Sub-Entities gegeneinander testen (jeder gegen jeden), um evtl. Schnittpunkte zu verifizieren. Da, wo dein bisheriger Ansatz nichts findet, gibt's auch nichts, was noch nachgetestet werden müsste. Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin
Beiträge: 1250 Registriert: 20.05.2002 Die Phönizier haben das Geld erfunden - aber warum so wenig? (Johann Nepomuk Nestroy)
|
erstellt am: 07. Mai. 2004 22:42 <-- editieren / zitieren --> Unities abgeben: Nur für Brennivin
|
Brennivin Mitglied
Beiträge: 3 Registriert: 06.05.2004
|
erstellt am: 08. Mai. 2004 09:40 <-- editieren / zitieren --> Unities abgeben:
Hi mapcar, das intPoints ist in dieser Hinsicht natürlich verwirrend. Das liegt aber daran, das mit intPoints hier nicht eine Variable vom Typ int gemeint ist. Vielmehr bezieht sich das int auf intersection. intpoints sollte also ausgeschrieben intersectionpoints heißen. Ich werde dann mal versuchen, die einzelnen Entitäten in den Blockreferenzen zu testen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|