STROJNISTVO.com • Poglej temo - Uvoz točk iz excela v SW

Uvoz točk iz excela v SW

3D CAD program - enostaven za uporabo vendar zelo zmogljiv. Vprašanja, komentarji...

Moderator: -M-

Uvoz točk iz excela v SW

OdgovorNapisal/-a 29010707 » 2.2.2010 8:49

Pozdravljeni!
V SW znam uvoziti krivuljo iz Excelove datoteke oziroma txt datoteke. Ne znam pa narisano krivuljo v SW ali AutoCADu eksportirati v Excel oziroma txt datoteko. A mi zna kdo pomagati?
Lp!
29010707
Strokovnjak
Strokovnjak
 
Prispevkov: 184
Pridružen: 9.8.2005 10:40

Re: Uvoz točk iz excela v SW

OdgovorNapisal/-a baklava » 2.2.2010 9:02

29010707 napisal/-a:Pozdravljeni!
V SW znam uvoziti krivuljo iz Excelove datoteke oziroma txt datoteke. Ne znam pa narisano krivuljo v SW ali AutoCADu eksportirati v Excel oziroma txt datoteko. A mi zna kdo pomagati?
Lp!


za autocad:

označi krivuljo-vpiši ukaz LIST-odpre se okno "text window"-skopiraš v *.txt file-odpreš v excelu

LP
baklava
Strokovnjak
Strokovnjak
 
Prispevkov: 306
Pridružen: 17.2.2005 8:13

OdgovorNapisal/-a ManiaC » 2.2.2010 17:43

Sem ti spisal en kratek macro za SolidWorks, da ti naredi to.

Za uporabo pa naredi naslednje:
1.označen moraš imeti sketch, iz katerega hočeš povleči točke
2.pojdo pod tools-->macro->run, ter poišči datoteko Tocke.swp kamor si si le to datoteko shranil
3. točke najdeš v datoteki na c:\Tocke.txt

deluje za navaden sketch kot tudi za 3D sketch

http://www.megaupload.com/?d=U3ZAWL1R

p.s. zakaj ne morem na tem portalu pripeti .zip datoteko, ki jo zgenerira winrar, napiše mi da ta datoteki ni .zip, kljub temu da je.
ManiaC
Strokovnjak
Strokovnjak
 
Prispevkov: 1250
Pridružen: 19.2.2005 10:41
Kraj: Celje

OdgovorNapisal/-a 29010707 » 3.2.2010 8:12

Hvala obema.
Majhen problem pri List v AutoCadu je, da moraš brisati nepotreben tekst in ker imam dosti točk mi to predstavlja kar delo.
Macro pa v mojem SW 2007 ne deluje, oziroma na c: ne najdem nobene txt datoteke s točkami, tako da ne vem kje je problem.
29010707
Strokovnjak
Strokovnjak
 
Prispevkov: 184
Pridružen: 9.8.2005 10:40

OdgovorNapisal/-a baklava » 3.2.2010 8:39

29010707 napisal/-a:Hvala obema.
Majhen problem pri List v AutoCadu je, da moraš brisati nepotreben tekst in ker imam dosti točk mi to predstavlja kar delo.
Macro pa v mojem SW 2007 ne deluje, oziroma na c: ne najdem nobene txt datoteke s točkami, tako da ne vem kje je problem.


odpri v Excelu in v njem urejaj pdoatke. Če pravilno odpreš *.txt file u Excelu boš dobil uporabne podatke, samo bodi previden na decimalno vejico i piko!

koliko imaš točke, približno?

LP
baklava
Strokovnjak
Strokovnjak
 
Prispevkov: 306
Pridružen: 17.2.2005 8:13

OdgovorNapisal/-a ManiaC » 3.2.2010 8:40

Sam imam sicer sw 2009, vendar mislim da bi moralo delovati tudi na 2007, saj je macro spisan v vba in bi moral delovati na starejših sw.

Pripenjam sliko, po kateri meni deluje:

[img]http://www.strojnistvo.com/images/forum/1265182029_SolidWorks_Student_Edition_-_Academic_Use_Only_-_[Part1_].jpg[/img]

Lahko pa probaš sam spisati macro, ter ga nato z debuggerjem pognat. Pa mi povej, če ti slučajno najde kakšno napako.

To narediš tako, da daš tools->macro->new in vpišeš ime macroja.
Nato pa kopiraj spodnji tekst in pritisni tipko play(skica mora biti še vedno označena):

Sub ProcessSketchPoint(SwApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc2, swSkPt As SldWorks.SketchPoint)
Dim vID As Variant
Dim swSketch As SldWorks.Sketch
Dim nPt(2) As Double
Dim vPt As Variant

Set swSketch = swSkPt.GetSketch

'pridobi sketch informacije
vID = swSkPt.GetID

'shranimo posamezno točko v matriko nPt
nPt(0) = swSkPt.x: nPt(1) = swSkPt.Y: nPt(2) = swSkPt.Z

'zapiše točke v datoteke
'množimo jih s 1000 da dobimo mm, osnovne enote so metri
Write #1, "x=" & nPt(0) * 1000 & " " & "y=" & nPt(1) * 1000 & " " & "z=" & nPt(2) * 1000


End Sub

Sub main()
Dim SwApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swSketch As SldWorks.Sketch
Dim vSkPtArr As Variant
Dim vSkPt As Variant
Dim swSkPt As SldWorks.SketchPoint

Set SwApp = Application.SldWorks
Set swModel = SwApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swFeat = swSelMgr.GetSelectedObject6(1, 0)
Set swSketch = swFeat.GetSpecificFeature2

'preverjamo, če točke v sketchu sploh obstajajo
vSkPtArr = swSketch.GetSketchPoints2: If IsEmpty(vSkPtArr) Then Exit Sub

'pot do datoteke, kamor bodo shranjene točke
Open "c:\tocke.txt" For Output As #1

'For zanka, da dobimo vse točke v sketchu
For Each vSkPt In vSkPtArr

Set swSkPt = vSkPt
ProcessSketchPoint SwApp, swModel, swSkPt

Next vSkPt

'zapremo datoteko, ko končani operaciji
Close #1
End Sub
ManiaC
Strokovnjak
Strokovnjak
 
Prispevkov: 1250
Pridružen: 19.2.2005 10:41
Kraj: Celje

OdgovorNapisal/-a 29010707 » 3.2.2010 8:54

Pri izdelavi macroja mi, ko pritisnem tipko play (run) javi naslednjo napako:

Compile error
Ambigiuous name detected: main

Kaj pa to pomeni pa ne vem.

Glede izvoza točk v excelu in nadaljni obdelavi v excelu pa imam problem, ker v excelu ne znam brisati praznih celic. Primer
A B
5 5
0 2
0 4
2
0
0
4
Kako lahko v excelu prenesem vrednosti brez praznih celic oziroma nul v naslednji stolpec in to tako, da vmes ni praznih celic oziroma vrstic.
Upam da je razumljivo napisano.
29010707
Strokovnjak
Strokovnjak
 
Prispevkov: 184
Pridružen: 9.8.2005 10:40

OdgovorNapisal/-a ManiaC » 3.2.2010 9:11

probaj to kodo(odstranil sem številke pri modeldoc2 in podobnih, mogoče je to problem da ne deluje pri starejši verziji). Če pa še vedno to ne bo delovalo, pa bom probal pogledat jutri zvečer ko pridem domov na računalniku, kjer imam sw 2007.

Sub ProcessSketchPoint(SwApp As SldWorks.SldWorks, swModel As SldWorks.ModelDoc, swSkPt As SldWorks.SketchPoint)
Dim vID As Variant
Dim swSketch As SldWorks.Sketch
Dim nPt(2) As Double
Dim vPt As Variant

Set swSketch = swSkPt.GetSketch

'pridobi sketch informacije
vID = swSkPt.GetID

'shranimo posamezno točko v matriko nPt
nPt(0) = swSkPt.x: nPt(1) = swSkPt.Y: nPt(2) = swSkPt.Z

'zapiše točke v datoteke
'množimo jih s 1000 da dobimo mm, osnovne enote so metri
Write #1, "x=" & nPt(0) * 1000 & " " & "y=" & nPt(1) * 1000 & " " & "z=" & nPt(2) * 1000


End Sub

Sub main()
Dim SwApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature
Dim swSketch As SldWorks.Sketch
Dim vSkPtArr As Variant
Dim vSkPt As Variant
Dim swSkPt As SldWorks.SketchPoint

Set SwApp = Application.SldWorks
Set swModel = SwApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swFeat = swSelMgr.GetSelectedObject(1)
Set swSketch = swFeat.GetSpecificFeature

'preverjamo, če točke v sketchu sploh obstajajo
vSkPtArr = swSketch.GetSketchPoints: If IsEmpty(vSkPtArr) Then Exit Sub

'pot do datoteke, kamor bodo shranjene točke
Open "c:\tocke.txt" For Output As #1

'For zanka, da dobimo vse točke v sketchu
For Each vSkPt In vSkPtArr

Set swSkPt = vSkPt
ProcessSketchPoint SwApp, swModel, swSkPt

Next vSkPt

'zapremo datoteko, ko končani operaciji
Close #1
End Sub
ManiaC
Strokovnjak
Strokovnjak
 
Prispevkov: 1250
Pridružen: 19.2.2005 10:41
Kraj: Celje

OdgovorNapisal/-a 29010707 » 3.2.2010 9:40

Sem ponovno probal, pa mi ne deluje. Ne vem....
29010707
Strokovnjak
Strokovnjak
 
Prispevkov: 184
Pridružen: 9.8.2005 10:40

OdgovorNapisal/-a 29010707 » 9.2.2010 16:54

Deluje!
Hvala ManiaC!
29010707
Strokovnjak
Strokovnjak
 
Prispevkov: 184
Pridružen: 9.8.2005 10:40


Vrni se na SolidWorks

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 0 gostov