Solidworks API Dodaj właściwość części, a następnie zobacz ją na rysunku

Witam

Mam makro, które dodaje właściwość "Nom_Modificateur" w części, Problem polega na tym, że gdy otwieram mój układ (nadal w makrze) tło się nie zmienia, jestem zmuszony edytować plan tła, a następnie rozbić blok i pojawia się mój podany. Aby wiedzieć, czy od początku rozsadziłem blok, makro działa idealnie. Ale nie chcę łamać bloku, ponieważ mam inne makro, które również pisze czystość, które jest w kartridżu i działa, gdy kod jest identyczny.

Oto kod:

Ustaw część = swApp.OpenDoc6(Plik, 1, 0, "", longstatus, longwarnings)
    Ustaw swApp = Application.SldWorks
    "Dostajemy aktywny dokument
    Ustaw swModel = swApp.ActiveDoc

swCustPropMgr.Add3 "Type_Validation", swCustomInfoText, "", 2
swCustPropMgr.Add3 "Date_Validation", swCustomInfoText, "", 2
swCustPropMgr.Add3 "Indeks", ciąg swCustomInfoText, 2
Jeśli ciąg = "02" Następnie
swCustPropMgr.Add3 "Raison_Modification_A02", swCustomInfoText, Powód, 2
swCustPropMgr.Add3 "Nom_Modificateur_A02", swCustomInfoText, Nom_Modif, 2
ElseIf string = "03" Następnie
swCustPropMgr.Add3 "Raison_Modification_A03", swCustomInfoText, Powód, 2
swCustPropMgr.Add3 "Nom_Modificateur_A03", swCustomInfoText, Nom_Modif, 2
ElseIf string = "04" Następnie
swCustPropMgr.Add3 "Raison_Modification_A04", swCustomInfoText, Powód, 2
swCustPropMgr.Add3 "Nom_Modificateur_A04", swCustomInfoText, Nom_Modif, 2
Zakończ jeżeli:

swApp.CloseDoc Nazwa pliku

Dziękuję 

Witam

 

Skomplikowane w pracy z tak niewielkimi danymi, czy możesz umieścić kod swojego drugiego makra? Kiedy uruchamiasz drugi, jesteś już na rysunku, czy otwiera się również dokument?

Witam

Po prostu edytuj tło, a następnie rozbij blok i ponownie zapisz szablon mapy bazowej jako blok i domyślnie zablokowany w edycji.

2 polubienia

Dziękuję za odpowiedź,

Umieszczę na tobie pełne makro, uruchomię je z zestawu - >

- Musisz wybrać komponent z drzewa komponentów, a następnie uruchomić makro

(Wiem, że makro nie jest zoptymalizowane, ale przed jego optymalizacją staram się, aby wszystko działało)

 


3_prise_dindice.swp

Mam kilka formatów planów .slddrt (A4H, A4V, A3H...) Wszystkie te formaty mają łącze blokowe do pliku bloku, aby zdefiniować wszystko, co powinno znaleźć się w tabelce rysunkowej (pliku .sldblk). Dzięki temu, jeśli chcę dodać jakiś element, dodaję go do pliku sldblk i wszystkie moje formaty są modyfikowane. To lepsze niż edytowanie we wszystkich formatach planów (mam 30 lat)

Czy więc jeśli moja mapa bazowa zawiera rozstrzelony blok, utracę łącze?

Tak, tracisz link, ponieważ zostanie on zniszczony.

Witam

Czy naprawdę trzeba rozbić blok, żeby zmiany zostały uwzględnione, czy wystarczy prosta przebudowa?

Dla Twojej informacji, zmiany dokonywane przez makro dość często wymagają rekonstrukcji , aby wziąć je pod uwagę, to słynny CTRL + Q, który jest trochę odruchowy.

Pozdrowienia

1 polubienie

d.roger, Rekonstrukcja nic nie daje

Makro nie może działać z blokiem, ponieważ blok jest chroniony przed zapisem, chyba że dodasz pole bezpośrednio do nazwy modyfikatora i wypełnisz właściwość części.

To jest dokładnie to, co robię, dodaję osobistą właściwość do mojego pliku 3d i w moim kartridżu mam nazwę tej właściwości, która jest taka sama. Ale mój problem polega na tym, że się nie pojawia. I nawet jeśli wcześniej rozwalę mój blok, nadal muszę edytować plan tła, aby się pojawił

 

A w jaki sposób inne właściwości pojawiają się w tabelce rysunkowej?

W ten sam sposób i nie ma problemu (patrz załącznik). Dlatego w ogóle tego nie rozumiem


propriete_piececartouche.png

Ale w tym  miejscu musisz dodać właściwość "Nom_Modificateur", a następnie utworzyć link w bloku.

1 polubienie

Tak, to jest to, co robię, kiedy patrzę na właściwości mojej części, są one rzeczywiście dodawane, ale nic w tabelce rysunkowej, gdy jest link

Ale tam w twoich nieruchomościach nie ma "Nom_Modificateur" według wykonanego przez ciebie sitodruku...

Jak mówi ac cobra, zmienna wydaje się nie istnieć, więc twój kod musiałby pasować do tego:

swCustPropMgr.Add3 "Type_Validation", swCustomInfoText, "", 0
swCustPropMgr.Add3 "Date_Validation", swCustomInfoText, "", 0
swCustPropMgr.Add3 "Indeks", ciąg swCustomInfoText, 0
Jeśli ciąg = "02" Następnie

...

 

Pod poniższym linkiem widzisz, że zmienne muszą istnieć, jeśli umieścisz "2" na końcu, zastępuje to wartość tylko wtedy, gdy ta ostatnia istnieje. Z 0 tworzy zmienną, jeśli nie istnieje.

http://help.solidworks.com/2018/english/api/swconst/SOLIDWORKS.Interop.swconst~SOLIDWORKS.Interop.swconst.swCustomPropertyAddOption_e.html

 

Z drugiej strony uważaj, musisz zaplanować przyrost podczas jazdy, w przeciwnym razie przy pierwszym użyciu utworzysz A02 - A03 .... A następnym razem, gdy ich użyjesz, ponieważ są już stworzone, nic nie zrobi. A jeśli umieścisz "1", za każdym razem będzie na nim ponownie pisany, więc nie będziesz już miał historii.

Rozwiązałem swój problem. Podczas pierwszego makra, które wstawia dane, umieszczam wszystkie moje przyszłe wartości indeksu i nie wiem dlaczego, skoro już utworzyło wartość, za drugim razem samo robi aktualizację. 

Dziękuję za wszystkie odpowiedzi, wiem, że nie wszystko jest jasne...