FastFiber

Intersectionwith

Gestart door Pamper, ma 21 03 2011, 17:26:17

Vorige topic - Volgende topic

Pamper

Beste

ik heb een probleempje bij het uitvoeren van de intersectwith methode.
Ik zoek dus de snijpunten van de cirkels waarvan ik de gegevens haal uit een excelwerkblad
Op het internet gevonden dunkt me dat er een probleem is met deze methode
kan iemand mij helpen

dit is mijn code (ik denk dat er niet zoveel mis, edoch kan ik niet verder)

alvast bedankt

Public Sub testje()



Dim exa As Excel.Application
Dim exwb As Excel.Workbook

On Error Resume Next
Set exa = GetObject(, "excel.application")
Set exwb = exa.Workbooks.Open("F:\Werkblad 1.xlsm")
If Err.Number <> 0 Then
Err.Clear
Set exa = CreateObject("excel.application")
Set exwb = exa.Workbooks.Open("F:\Werkblad 1.xlsm")

End If



Dim bpoint1(0 To 2) As Double
Dim bpoint2(0 To 2) As Double
Dim position(0 To 2) As Double
Dim distance1 As Double
Dim distance2 As Double


bpoint1(0) = exwb.Worksheets("ReadPosition").Cells(5, 2).Value
bpoint1(1) = exwb.Worksheets("ReadPosition").Cells(5, 3).Value
bpoint1(2) = exwb.Worksheets("ReadPosition").Cells(5, 4).Value

bpoint2(0) = exwb.Worksheets("ReadPosition").Cells(6, 2).Value
bpoint2(1) = exwb.Worksheets("ReadPosition").Cells(6, 3).Value
bpoint2(2) = exwb.Worksheets("ReadPosition").Cells(6, 4).Value

distance1 = exwb.Worksheets("ReadPosition").Cells(5, 5).Value
distance2 = exwb.Worksheets("ReadPosition").Cells(6, 5).Value

Dim circle1 As AcadCircle
Dim circle2 As AcadCircle
Set circle1 = ThisDrawing.ModelSpace.AddCircle(bpoint1, distance1)
Set circle2 = ThisDrawing.ModelSpace.AddCircle(bpoint2, distance2)
ZoomAll

Dim intPoints As Variant
   

intPoints = circle1.IntersectWith(circle2, acExtendNonde)


 
  Dim i As Integer, j As Integer, k As Integer
    Dim str As String
    If VarType(intPoints) <> vbEmpty Then
        For i = LBound(intPoints) To UBound(intPoints)
            exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = intPoints(j)
            exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = intPoints(j + 1)
           
            exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Worksheets("ReadPosition").Cells(3 + k, 6).Value
            exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Worksheets("ReadPosition").Cells(3 + k, 7).Value
           
                       
           
            i = i + 2
            j = j + 3
            k = k + 1
        Next
    End If


End Sub


HofCAD

#1
Beste Pamper,

Hoezo? :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:
1) Staat bovenstaande tekst in een VBA project?
2) Heb je bij Tools->References de Excel library geladen bijv.: Microsoft Excel 12.0 Object Library
3) Is je Excelbestand: F:\Werkblad 1.xlsm
4) Heeft dit bestand een blad: ReadPosition
5) Heeft het blad ReadPosition de layout van het onderstaande plaatje?

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

Pamper

sterk, maar bij mij wil dit om de een of andere manier niet lukken
dus dat is balen met de pet op

HofCAD

Citaat van: Pamper op ma 21 03 2011, 19:26:16
sterk, maar bij mij wil dit om de een of andere manier niet lukken
dus dat is balen met de pet op
Loop je de executie ook af met de functietoets F8?
En kijk je dan ook naar de waarden?
Worden de cirkels ook niet getekend?

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

Pamper

de cirkels worden zonder probleem getekend

het probleem ligt in de zone
Dim intPoints As Variant
   

intPoints = circle1.IntersectWith(circle2, acExtendNonde)


bijgevolg krijg ik een Ubound(intPoints) van -1
dus moet er ergens iets onbekends zijn, maar aangezien hij toch de cirkels tekent ...
ik weet het niet

Pamper

ik ben bang dat ze niet mee upgeload zijn

HofCAD

#6
Citaat van: Pamper op ma 21 03 2011, 20:08:14
ik ben bang dat ze niet mee upgeload zijn
Beste Pamper,

Probeer eens mijn project "MijnWerkblad.dvb" en mijn Excel bestand "MijnWerkblad.xls"
en zet deze in c:\

Met vriendelijke groet, HofCAD CSI.

PS1 Het beste is om Excel en AutoCAD naast elkaar op het scherm te zetten,
omdat er in AutoCAD een MsgBox verschijnt met de snijpunten.
PS2 http://www.scribd.com/doc/7242667/Autocad-Excel-Vba-Tutorial
ACADcadabra

Pamper

#7
Het frustrerende is dat jouw code bijna gelijk is de mijne
maar bij mij wil hij niets in die intpoints steken, bijgevolg wordt de stap voor het uitschrijven overgelaten

dus hij heeft problemen met de volgende lijn
intPoints = circle1.IntersectWith(circle2, acExtendNone)

als ik het jouwe laat runnen, doet ie het perfect.
heel raar
alvast bedankt voor de moeite

HofCAD

#8
Beste Pamper,

Ik denk niet dat het probleem in onderstaande regel zit:
intPoints = circle1.IntersectWith(circle2, acExtendNone)
Wat wil je met deze twee regels:

exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Worksheets("ReadPosition").Cells(3 + k, 6).Value
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Worksheets("ReadPosition").Cells(3 + k, 7).Value


Met vriendelijke groet, HofCAD CSI.

PS Kijk eens naar de groene tekst in PamperTest.dvb en je ziet slechts 3 afwijkingen.
Loopt PamperTest.dvb bij jouw ook zonder problemen?
PamperTest.zip met PamperTest.dvb en C:\Werkblad 1.xlsm
ACADcadabra

Pamper

Ja inderdaad die laatste 2 regels zijn niet nodig, maar dat had te maken met afrondingen,
dus die regels zijn al weg

het blijft het zelfde probleem, hij wil die intersection niet nemen
ik werk met autocad 2011 en office 2010, misschien heeft het daar iets mee te maken

Door het feit dat er niets in die intpoints komt te zitten, slaat hij die if lus over en dus schrijft hij niets uit

HofCAD

#10
Citaat van: Pamper op di 22 03 2011, 19:03:32
Ja inderdaad die laatste 2 regels zijn niet nodig, maar dat had te maken met afrondingen,
dus die regels zijn al weg

het blijft het zelfde probleem, hij wil die intersection niet nemen
ik werk met autocad 2011 en office 2010, misschien heeft het daar iets mee te maken

Door het feit dat er niets in die intpoints komt te zitten, slaat hij die if lus over en dus schrijft hij niets uit

Beste Pamper,

Die twee regels geven bij mij ook problemen.
Als je wilt afonden dan doe je dat toch met de functie: Round(expression [,numdecimalplaces])
Zo dat je bij een decimaal krijgt:
exwb.Worksheets("ReadPosition").Cells(3 + k, 2).Value = Round(intPoints(j), 1)
exwb.Worksheets("ReadPosition").Cells(3 + k, 3).Value = Round(intPoints(j + 1), 1)


Ik wil wel eens je project (*.dvb) en je Excel file (*.xlsm) eens zien.
Kun je die AUB plaatsen.
Ik ga deze dan testen met AutoCAD 2010 en Office 2010.

Met vriendelijke groet, HofCAD CSI

PS Met PamperTest.dvb en C:\Werkblad 1.xlsm uit PamperTest.zip heb ik
in AutoCAD 2010 en Office 2010 geen problemen.
ACADcadabra

Pamper

Gelieve niet te letten op de VBA-code in excel; ik ben daar mee bezig
ik apprecieer allesinds de moeite die je doet

Pamper

als je natuurlijk een andere manier weet om een stelsel te laten oplossen in vba, dan mag je dat ook altijd zeggen

de bedoeling is om je positie in een assenstelsel in te lezen aan de hand van 2 afstanden naar 2 gekende punten.

HofCAD

#13
Citaat van: Pamper op wo 23 03 2011, 16:18:48
als je natuurlijk een andere manier weet om een stelsel te laten oplossen in vba, dan mag je dat ook altijd zeggen

de bedoeling is om je positie in een assenstelsel in te lezen aan de hand van 2 afstanden naar 2 gekende punten.

Beste Pamper,

Volgens mij, is je idee goed. :vreegoe:
Je Excel waarden voor de regel
intPoints = circle1.IntersectWith(circle2, acExtendNone)
zijn niet goed  :nigoe:, omdat de Z-waarden verschillend zijn.
Als de Z-waarden verschillend zijn, dan zijn er ook geen snijpunten. :lol: :lol:
Kijk ook maar in de tekening via het commando LINE en de Object Snap op INTersection.

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

Pamper

De wonderen zijn de wereld nog niet uit !

Dank je wel, het werkt nu idd perfect :)

FastFiber