SolidWorks >> Rysunki >> Dostosowane właściwości
Autor Wypowiedź
.
2012-08-10, 14:00
Pomógł 52 raz(y).
Witam,
Mam problem następujący.
Potrzebuję zapisywać rysunki pod nazwą skłądającą się z numery rysunku i nazwy części (takie są wymagania w zakładzia), ale nie chcę tak nazywać modelu bo nazwa byłaby zbyt długa i np drzewko złożenia po rozsunięciu zajęjoby znaczącą część ekranu graficznego.
Numer rysunku i nazwa części są zdefiniowane w dostosowanych włąściwościach modelu i przenoszą się bez problemu do rysunku.
Napisałem sobie makro, które łączy te dwa parametry i zapisuje plik pod taką nazwą ale tylko część lub złożenie. Drugie makro zaś pozwala szybko otworzyć powiązany z modelem rysunek pomimo innej nazwy pliku.
Z rysunkiem zaś nie mogę sobie poradzić bo gdy chcę "wyłuskać" te dane to zamiast np numery rysunku dostaję wartość dostosowanej właściwości czyli coś takiego $PRPSHEET:"nrrys" . We wszystkich notatkach na rysunku jest ok.
Jak to można rozwiązać ?
Pozdrawiam
 
.
2012-09-03, 12:48
Pomógł 52 raz(y).
Widzę, że nikt nie odpowiedział, ale ja nie próżnowałem. :D
Kombinowałem na różne sposoby i wreszciw wymyśliłem, że lepiej pobrać dane z pliku modelu przypisanego do rysunku . Wtedy wartości właściwości są takie jak trzeba.
Tak też zrobiłem tylko mam taki problem . Nie potrafię "wyłuskać" informacji o nazwie modelu przypisanego do rysunku jako główny tylko muszę wskazać widok rysunku a makro znajduje model do niego przypisany i dalej już idzie gładko.
Czy ktoś wie jak w makro znaleźć nazwę pliku przypisanego jako główny widok rysunku (najczęściej jest to pierwszy wprowadzony do rysunku widok).
Pozdrawiam
 
CSWP, CSWE, CSWI *** solid-blog.pl ***
2012-09-03, 12:59
Pomógł 406 raz(y).
Ale masz cały czas na myśli zdefniowaną właściwość z modelu (przeniesioną do rysunku) czy może $PRP:"SW-File Name" jako nazwę pliku modelu?

Nie ma rozróżnienia na właściwość połączoną z widokiem głównym, albo odnosi się ona do wskazanego rzutu albo dla całego arkusza.
 
Wykonam każde makro w SolidWorks
2012-09-03, 13:50
Pomógł 12 raz(y).
Witam,

Jeżeli nazwa rysunku jest taka sama jak model to wystarczy, że pobierzesz ścieżkę aktywnego dokumentu swModel.GetPathName (wiadomo, że swModel = iSwApp.ActiveDoc, gdzie swModel jest obiektem typu ModelDoc2 i tniesz od lewej do ostatniego ""/"" i rozszerzenie od prawej - zawsze 7 znaków. Masz już string nazwy modelu przypisanego do rysunku.
Sprawdzasz jakiego typu jest dany model swModel.GetType i dopisujesz odpowiednie rozszerzenie, w zależności czy jest to część (if swModel.GetType= 1 then) czy złożenie (if swModel.GetType=2 then).

pozdrawiam

Michał Karpiuk
 
.
2012-09-03, 16:32
Pomógł 52 raz(y).
Owszem, gdy nazwa modelu jest taka sama jak nazwa rysunku to OK. Ale z powodów opisanych w 1. poście u mnie tak nie jest.
Do Pawła.
Mam cały czas na myśli zdefniowaną właściwość z modelu (przeniesioną do rysunku) .
ad 2- co jeśli na jednym rysunku mamy widoki różnych modeli ?

 
Wykonam każde makro w SolidWorks
2012-09-05, 10:14
Pomógł 12 raz(y).
Dim swDraw As DrawingDoc
Dim swView As View
Dim sModelName As String

swDraw = iSwApp.ActiveDoc
swView = swDraw.GetFirstView
swView = swView.GetNextView
sModelName = swView.GetReferencedModelName
 
.
2012-09-05, 22:35
Pomógł 52 raz(y).
Dzięki za pomoc, właśnie tego szukałem.
Po usunięciu drobnyego błędu i pewnej modyfikacji zadziałało. Oto mój kod:

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swView As View
Dim PlikGlownegoWidok As String
Dim swDraw As DrawingDoc
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
PlikGlownegoWidoku = swView.GetReferencedModelName

.
 
Wykonam każde makro w SolidWorks
2012-09-06, 14:17
Pomógł 12 raz(y).
Pozostaje jeszcze problem, o którym wspominałeś!! Co jeśli na jednym rysunku mamy widoki różnych modeli?
 
.
2012-09-06, 16:17
Pomógł 52 raz(y).
To nie jest chyba problem, bo główny widok jest zawsze jeden (można go zmienić w oknie właściwości arkusza).
Natomiast pojawił mi się nowy pomysł aby można pokazać widok i on będzie dalej brany pod uwagę (np. w celu otwarcia powiązanego z nim modelu) lub nie pokazywać nic i wtedy jest brany główny widok.
Napisałem nawet programik ale znowu utknąłem na rozróżnieniu czy jest wybrany widok czy nie.
W poniższym kodzie wskazałem miejsce "zagwózdki".




Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSelMgr As SldWorks.SelectionMgr
Dim swDraw As DrawingDoc
Dim swView As View
Dim SpecyfikacjaPliku As String
Dim SpecyfikacjaPlikuWidoku As String

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swSelMgr = swModel.SelectionManager
Set swDraw = swModel

If ... tu jest zagwózdka ... Then
' Gdy nic nie wybrano
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
SpecyfikacjaPliku = swView.GetReferencedModelName
Else
' Gdy pokazano widok
Set swView = swSelMgr.GetSelectedObject5(1)
SpecyfikacjaPlikuWidoku = swView.GetReferencedModelName
SpecyfikacjaPliku = SpecyfikacjaPlikuWidoku
End If
MsgBox "Rysunek = " & swModel.GetPathName & Chr(13) & _
"Główny widok = " & SpecyfikacjaPliku & Chr(13) & _
"Wskazany widok =" & SpecyfikacjaPlikuWidoku

Programik wykrywa główny widok ( gdy zamaskuję opcję wyboru) lub wybrany widok ale gdy nic nie wybiorę i nie zamaskuję to pojawia się błąd MISMACH
 
Wykonam każde makro w SolidWorks
2012-09-06, 19:02
Pomógł 12 raz(y).
Dim swApp As SldWorks
Dim swModel As ModelDoc2
Dim swSelMgr As SelectionMgr
Dim swDraw As DrawingDoc
Dim swView As SolidWorks.Interop.sldworks.View
Dim SpecyfikacjaPliku As String
Dim SpecyfikacjaPlikuWidoku As String

swApp = Application.SldWorks
swModel = swApp.ActiveDoc

'wprowadź zabezpieczenie,żeby makro działało tylko na rysunkach
If swModel.GetType = 3 Then

swSelMgr = swModel.SelectionManager
swDraw = swModel
'GetSelectedObjectCount zwróci ci liczbę zaznaczonych obiektów
If swSelMgr.GetSelectedObjectCount = 0 Then
' Gdy nic nie wybrano
swView = swDraw.GetFirstView
swView = swView.GetNextView
SpecyfikacjaPliku = swView.GetReferencedModelName

ElseIf swSelMgr.GetSelectedObjectCount = 1 Then
' Gdy pokazano jeden widok
' Wprowadź zabezpieczenie - jeżeli zaznaczony jest jeden widok to dopiero wtedy działaj
If swSelMgr.GetSelectedObjectType(1) = swSelectType_e.swSelDRAWINGVIEWS Then
swView = swSelMgr.GetSelectedObject5(1)
SpecyfikacjaPlikuWidoku = swView.GetReferencedModelName
SpecyfikacjaPliku = SpecyfikacjaPlikuWidoku
End If

Else
'wprowadź pętlę
End If

MsgBox("Rysunek = " & swModel.GetPathName & Chr(13) & _
"Główny widok = " & SpecyfikacjaPliku & Chr(13) & _
"Wskazany widok =" & SpecyfikacjaPlikuWidoku)
End If
 
.
2012-09-07, 07:35
Pomógł 52 raz(y).
Wielkie dzięki, zaraz się zabiorę do pracy nad całym programem.
A tak przy okazji, skąd najlepiej pobrać jakieś materiały dotyczące programowania VB i funkcji API ?
Ja nie zajmuję się zawodowo programowaniem, ale mnie to wciągnęło i chcę trochę poeksperymentować a
bardziej chciałbym się chwalić swoimi wynikami niż męczyć innych ciągłymi pytaniami :)
 
Wykonam każde makro w SolidWorks
2012-09-07, 08:14
Pomógł 12 raz(y).
Wystarczy Ci SolidWorks Help API.

Ja zajmuję się tym tematem programowania SolidWorks od wersji 2005/2006, a komercyjnie od dwóch lat. Temat jest szeroki - a problemów mnóstwo. Powodzenia w nauce.
 
.
2012-09-07, 16:57
Pomógł 52 raz(y).
Dzięki, idzie mi coraz lepiej :D
 
.
2012-09-10, 16:02
Pomógł 52 raz(y).
Witam,
Niestety znowu utknąłem. Tym razem na wydawałoby się banalnym problemie.
Nie mogę odczytać daty utworzenia pliku rysunku. Śledeziłem różne przykłady z netu i nic nie chce zadziałać. Pomocy.
 
Wykonam każde makro w SolidWorks
2012-09-10, 19:19
Pomógł 12 raz(y).
Dim objFileInfo As New FileInfo("Tutaj wpisz ścieżkę do pliku")

'plik utworzony
Dim dtCreationDate As DateTime = objFileInfo.CreationTime

'plik zmodyfikowany
Dim dtLastWriteTime As DateTime = objFileInfo.LastWriteTime

'Ostatnio używany
Dim dtLastAccessTime As DateTime = objFileInfo.LastAccessTime
 
.
2012-09-11, 09:05
Pomógł 52 raz(y).
Niestety nic z tego. Interpreter nie przyjmuje już pierwszej linijki (syntax error)

edit:

Zastosowałem takie rozwiązanie (trochę naokoło ale działa)

Dim DataUtworzeniaRysunku As String
Dim Numer2 As SldWorks.CustomPropertyManager
Set swModel = swApp.ActiveDoc
Dim Wpis As Long
Dim Zmienna As String

Set Numer2 = swModel.Extension.CustomPropertyManager("")
Wpis = Numer2.Delete("DataUtworzeniaRysunku")
Zmienna = "$PRP:" + Chr(34) + "SW-Data utworzenia(Created Date)" + Chr(34)
Wpis = Numer2.Add2("DataUtworzeniaRysunku", swCustomInfoText, Zmienna)
Numer2.Get2 "DataUtworzeniaRysunku", "", DataUtworzeniaRysunku
Wpis = Numer2.Delete("DataUtworzeniaRysunku")

MsgBox DataUtworzeniaRysunku
 
2013-07-01, 21:36
Pomógł 0 raz(y).
Witam
Czy może mi ktoś pomóc.
Chciałbym żeby z nazwy pliku która składa się z nr rysunku i jego nazwy pobrać dane do tabelki rysunku, np nazwa pliku to: 2003040_xxxxxxxxx a w tabelce zeby pokazać dwie wartości oddzielnie tj nr rys. 2003040 i oddzielnie nazwę w innym miejscu tabelki nazwa rys. xxxxxxxxxxx.
 
.
2013-07-02, 07:38
Pomógł 52 raz(y).
Witam,
Nie chcę się powtarzać więc odsyłem tu : http://www.pswug.info/forum/20/Makra/897/Uzupelnianie_wlasciwosci_czesci/

Trzeba go tylko zmodyfikować pod swoje nazwy dostosowanych właściwości.
 

PSWUG

Strefa Resellera

Publikuj

Społeczność

Ankieta

Linki

RSS

BOT