_

taka mała prośba

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

taka mała prośba

Postprzez asa » sty 15, 2020 22:21

Szanowne Koleżanki i Koledzy.
W związku z tym, że moje synapsy coraz gorzej przewodzą zwracam się do Was z małą prośbą.
Mam dwg pliczka ma on też layoyty fajniutkie. Zaczytuje sobie te layouty lispowo, lecz ... nie są one w takiej kolejności jak zakładeczki w okienku AC. Co ja mam teraz biedny zrobić jak sobie upisałem lispa co mnie numerki w dokumentacji dodaje z automatu a te layouty nie poklei ...
Pozdrawiam ciepło
asa
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01

Re: taka mała prośba

Postprzez badziewiak » sty 16, 2020 01:38

Zapodaj proszę tego dwga, a dla wron by się pewnie przydał też rzeczony lisp... Jeśli ten dwg jest tajny przez poufny, to wywal całą zawartość modelu, tabelki rysunkowe, purge wykonaj itp. Ja ze swej strony spróbuję się rozeznać, choć pewnie z lispem to za wiele wspólnego nie będzie miało...

A przy okazji zerknij proszę na:
Autodesk.AutoCAD.DatabaseServices Namespace > Layout Class > Layout Properties > Layout.TabOrder Property
Layout.TabOrder Property
C#
public int TabOrder;

Description

Accesses the tab order field, which controls the order in which the layouts are displayed in the tab control that is docked to the bottom of the viewport. The tab order should be unique and sequential for each layout in the database.

Conditions
Read / Write

Links
Layout Class, Autodesk.AutoCAD.DatabaseServices Namespace
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2316
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: taka mała prośba

Postprzez ziele_o2k » sty 16, 2020 10:16

Rozumiem, że chciałbyś jakoś powiązać to, który vport na której zakładce się znajduje i jaka jest kolejność zakładek?
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 791
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

taka mała prośba

Postprzez asa » sty 16, 2020 12:23

Problem powstał przez ... Płeć Przeciwną, zwaną dalej PP.
Wiadomo, że dokumentacja techniczna powinna mieć ponumerowane strony i jest szybciej się klepie opisy gdy na ten przykład zrzuci się informacje z tabelek rysunkowych do pliczku tekstowego.
Tutaj nie mam problemów lisp takowy załatwia sprawę
Kod: Zaznacz cały

; zaczytuje layauty grzebie tabelki i ich dane i zapisuje do pliku, bloki tabelek musza sie zaczynac tabelka
; i posiadac atrybuty NR_RYS, TYT_RYS, SKALA

(setq doc  (vla-get-ActiveDocument(vlax-get-Acad-Object))  layouts (vla-get-layouts doc)  lista_lay nil)
(vlax-for el layouts (setq lista_lay(append lista_lay(list el))))  (mapcar '(lambda(el) (vla-get-name el)) lista_lay)
(mapcar '(lambda(el) (vla-get-name el)) lista_lay)
(setq lista_lay(vl-remove-if '(lambda(el) (=(vla-get-name el) "Model")) lista_lay))
(setq  j 0  wynik nil)
(repeat (length lista_lay)
(setq la_j (nth j lista_lay))
(setq lay_bl nil) (vlax-for el (vla-get-block la_j) (setq lay_bl(append lay_bl (list el))))
(setq bloki (vl-remove-if-not'(lambda(el) (=(vla-get-objectname el) "AcDbBlockReference"  )) lay_bl))
(setq tabelka (car (vl-remove-if-not'(lambda(el) (wcmatch  (vla-get-effectivename  el)"tabelka*" ))  bloki)))
(setq  nr(car(vl-remove-if-not '(lambda(el) (=(vla-get-tagstring el)"NR_RYS"))(vlax-safearray->list(vlax-variant-value(vla-GetAttributes tabelka))))))
(setq  tytul(car(vl-remove-if-not '(lambda(el) (=(vla-get-tagstring el)"TYT_RYS"))(vlax-safearray->list(vlax-variant-value(vla-GetAttributes tabelka))))))
(setq  skala(car(vl-remove-if-not '(lambda(el) (=(vla-get-tagstring el)"SKALA"))(vlax-safearray->list(vlax-variant-value(vla-GetAttributes tabelka))))))
(setq wynik (append wynik (list(mapcar'vla-get-textstring (list nr tytul skala)))))
(setq j (1+ j))
)

(setq wynik(vl-sort wynik '(lambda (a b) (< (atoi (car a)) (atoi (car b))))))
(setq el (car wynik) ) (strcat(strcat(strcat (car el) "," (cadr el)) ",") (last el))
(setq txt nil)(setq txt (getfiled "Create Text File" "" "txt" 1))
(setq des (open txt "w"))
(mapcar '(lambda(el) (write-line (strcat(strcat(strcat (car el) "," (cadr el)) ",") (last el))  des)) wynik)   (close des)
;;;;;;;;;;;;;;;;

Ale jeszcze numerek strony w dokumentacji w prawym górnym rogu. Niby proste na lispa w 10 minutek lecz....
jak potraktuje sobie takim czymś
Kod: Zaznacz cały

(setq doc  (vla-get-ActiveDocument(vlax-get-Acad-Object))  layouts (vla-get-layouts doc)  lista_lay nil)
(vlax-for el layouts (setq lista_lay(append lista_lay(list el))))
(setq lista_lay(vl-remove-if '(lambda(el) (=(vla-get-name el) "Model")) lista_lay))
(mapcar '(lambda(el) (vla-get-name el)) lista_lay)

to dostaje nazwy layoutów w takiej kolejności
("Ala" "ale" "i" "jest" "ma kota" "mam" "mały" "nie" "problem" "to" "tu" "zofilką" "świadczy" "że")
a w AC
jest
układ zakładek w rysunku.JPG

Dodawanie numerku w kolejność zakładek grzebanych lispem nie ma sensu :(
Pozdrawiam ciepło
asa
Załączniki
lay_balagan.dwg
(337.23 KiB) Pobrane 14 razy
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01

Re: taka mała prośba

Postprzez asa » sty 16, 2020 12:48

badziewiak napisał(a):Zapodaj proszę tego dwga, a dla wron by się pewnie przydał też rzeczony lisp... Jeśli ten dwg jest tajny przez poufny, to wywal całą zawartość modelu, tabelki rysunkowe, purge wykonaj itp. Ja ze swej strony spróbuję się rozeznać, choć pewnie z lispem to za wiele wspólnego nie będzie miało...

A przy okazji zerknij proszę na:
Autodesk.AutoCAD.DatabaseServices Namespace > Layout Class > Layout Properties > Layout.TabOrder Property
Layout.TabOrder Property
C#
public int TabOrder;

Description

Accesses the tab order field, which controls the order in which the layouts are displayed in the tab control that is docked to the bottom of the viewport. The tab order should be unique and sequential for each layout in the database.

Conditions
Read / Write

Links
Layout Class, Autodesk.AutoCAD.DatabaseServices Namespace

Dzięki Badziwiaku. taborder daje numerki jak trzeba. Wiedziałem że mogę tu liczyć na pomoc.
((1 "Ala") (2 "ma kota") (3 "ale") (4 "nie") (5 "świadczy") (6 "to") (7 "że") (8 "jest") (9 "zofilką") (10 "i") (11 "tu") (12 "mam") (13 "mały") (14 "problem")) :)
pozdrawiam ciepło
asa
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01

mały lispik do numerków

Postprzez asa » sty 16, 2020 21:19

Znalazłem trochę czasu i napisałem coś takiego co by problem rozwiązać
1. ramka rysunku na layautach musi być na warstwie: 1 grube (lub zmienić trzeba w lispie tam gdzie jest na swoją
2. bloczek musi się nazywać nr_str i posiadać atrybut STR (lub tak jak wyżej)
reszta działa z automatu
Kod: Zaznacz cały
(defun c:ponumeruj_layouty (/ doc blocz_nr layouts lista_lay blocz_nr path dane dbx dane nr_ins ramka a b atr start_nr nr_ins_i)
; sortujemy layouty po kolejnosci
(setq doc  (vla-get-ActiveDocument(vlax-get-Acad-Object))  layouts (vla-get-layouts doc)  lista_lay nil)
(vlax-for el layouts (setq lista_lay(append lista_lay(list el))))
(setq lista_lay(vl-remove-if '(lambda(el) (=(vla-get-name el) "Model")) lista_lay))
(setq lista_lay(vl-sort lista_lay '(lambda(a b) (<(vla-get-taborder a)(vla-get-taborder b)))))

;; szukamy definicji bloczku i jak nie ma go w bazie rysunkowej to kopiujem dbxem z pliku gdzie jest
(setq blocz_nr nil)
(vlax-map-collection (vla-get-blocks doc)  '(lambda(el)(if (=(vla-get-name el)  "nr_str")(setq blocz_nr el))) )
(if (null blocz_nr)(progn
(setq path nil)(setq path (getfiled "Bloczek numerku" "" "dwg" 8))
(setq dbx (vla-getInterfaceObject(vlax-get-acad-object) (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2) )))
 (vla-open dbx path)
(vlax-map-collection (vla-get-blocks dbx)  '(lambda(el)(if (=(vla-get-name el)  "nr_str")(setq blocz_nr el))))
(setq dane (vlax-make-safearray vlax-vbObject (cons 0 0)))  (vlax-safearray-fill dane (list blocz_nr))
(vlax-map-collection (vla-get-blocks doc)  '(lambda(el)(if (=(vla-get-name el)  "nr_str")(setq blocz_nr el))) )
(vla-CopyObjects dbx dane (vla-get-blocks doc))
(vlax-release-object dbx) (setq dbx nil)
))
(setq start_nr (getint "\n podaj numer strony początkowej"))
; wstawiamy na papierku aktywnym numerek
(setq nr_ins nil)
(vlax-for el (vla-get-PaperSpace doc)(if (=(vla-get-objectname el) "AcDbBlockReference" )
(if (=(vla-get-effectivename el) "nr_str")(setq nr_ins el))))
(if(null nr_ins) (setq nr_ins(vla-insertblock (vla-get-paperspace doc)(vlax-3d-point 0 0 0) "nr_str" 1 1 1 0)))
(setq ramka nil)
(vlax-for el (vla-get-PaperSpace doc) (if (=(vla-get-objectname el) "AcDbPolyline")
(if (=(vla-get-layer el) "1 grube") (setq ramka (append ramka (list el))))))
(setq ramka(car(vl-sort ramka '(lambda (a b) (>(vla-get-area a)(vla-get-area b))))));(vla-highlight ramka t)
(vla-GetBoundingBox ramka 'a 'b) (vla-put-insertionpoint nr_ins (vlax-make-variant b))

(setq atr(car(vl-remove-if-not '(lambda(el) (=(vla-get-tagstring el)"STR"))(vlax-safearray->list(vlax-variant-value(vla-GetAttributes nr_ins))))))
(vla-put-textstring atr (strcat   "str." (itoa(+ start_nr(+ 0(vl-position (vla-get-activelayout doc) lista_lay))) )))
(setq lista_lay (vl-remove-if '(lambda(el) (=(vla-get-name el) (vla-get-name(vla-get-activelayout doc))))lista_lay))   
(vla-put-layer nr_ins "0")

; teraz po wszystkich layoutach ganiamy  dokopiowujem do bazy block layout wrazie co nr_ins a dalej jak wyzej
(mapcar '(lambda( la_i)
(setq nr_ins_i nil)
(vlax-map-collection (vla-get-block la_i) '(lambda(el)(if (=(vla-get-objectname el) "AcDbBlockReference" )
(if (=(vla-get-effectivename el) "nr_str")(setq  nr_ins_i el)) )))
(if(null nr_ins_i)(progn
(setq dane (vlax-make-safearray vlax-vbObject (cons 0 0)))  (vlax-safearray-fill dane (list nr_ins))
(setq nr_ins_i(vlax-safearray-get-element (vlax-variant-value(vla-CopyObjects  doc dane (vla-get-block  la_i))) 0));ok(vla-highlight nr_ins_i t)
))
(setq ramka nil)
(vlax-map-collection  (vla-get-block la_i) '(lambda(ob)(if (=(vla-get-objectname ob) "AcDbPolyline")
(if (=(vla-get-layer ob) "1 grube") (setq ramka (append ramka (list ob)))))));;;;; tu tuuu
(setq ramka(car(vl-sort ramka '(lambda (a b) (>(vla-get-area a)(vla-get-area b))))))
(vla-GetBoundingBox ramka 'a 'b) (vla-put-insertionpoint nr_ins_i (vlax-make-variant b))
(setq atr(car(vl-remove-if-not '(lambda(el) (=(vla-get-tagstring el)"STR"))(vlax-safearray->list(vlax-variant-value(vla-GetAttributes nr_ins_i))))))
(vla-put-textstring atr (strcat   "str."  (itoa (+ 1(vl-position la_i lista_lay)start_nr)) ))
(vla-put-layer nr_ins_i "0")
) lista_lay)

);;;;;;;;;;;;;

Pozdrawiam ciepło asa
P.S.
Jutro PP dostanie do testowania ;)
Coś tam jeszcze ... ale jak ktoś znajdzie ... to pogadamy ;)
Załączniki
lay_balagan.dwg
tutaj testowałem
(203.29 KiB) Pobrane 15 razy
dłub layouty.LSP
tutaj to co wyżej
(5.89 KiB) Pobrane 18 razy
bloczek nr.dwg
w tym pliczku jest bloczek
(75.81 KiB) Pobrane 12 razy
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01

Re: taka mała prośba

Postprzez ziele_o2k » sty 16, 2020 22:32

A może tak ?
Obrazek
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 791
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: taka mała prośba

Postprzez asa » sty 17, 2020 08:58

ziele_o2k napisał(a):A może tak ?
Obrazek

O ładniutkie ;-) i pomysłowe. Czuję tu moc fieldow. Co prawda ja jestem z zakonu reaktorów ale i one sobie poradzą.
A teraz podsumowując potencjalne uciążliwość które mogą dokuczać PP
1 numeracja w dokumentacji
2 numerki w tabelkach rysunkowych
3 skala w tabelkach
Coś Wam jeszcze przychodzi na myśl ?
Pozdrawiam ciepło i miłego dnia życzę
asa
P
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01

Re: taka mała prośba

Postprzez ziele_o2k » sty 17, 2020 18:14

Ja generalnie przerzucam się z takimi sprawami do excela i xml, czyli:
  1. wywalam info z dwga do xml
  2. wczytuję xml do excela
  3. edytuję co trzeba w excelu
  4. aktualizuje xml z excela
  5. aktualizuję ac
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 791
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: taka mała prośba

Postprzez asa » sty 18, 2020 19:12

ziele_o2k napisał(a):Ja generalnie przerzucam się z takimi sprawami do excela i xml, czyli:
  1. wywalam info z dwga do xml
  2. wczytuję xml do excela
  3. edytuję co trzeba w excelu
  4. aktualizuje xml z excela
  5. aktualizuję ac

W sumie ciekawy sposób i ja osobiście skłaniałbym się by sympatyczna PP poszła w tym kierunku. Co prawda to co Jej podesłałem do numerków się podoba więc dopisałem kilka linijeczek no wzór Twojego pomysły. Aktualizuje w tabelce nr rys. no i kółeczk z nr str.
Dopiszę jeszcze kilka linijek by wykorzystać reaktor obiektu ze zdarzeniami :vlr-copied :vlr-erased, ;)
Pozdrawiam ciepło
asa
P.S.
W sumie jakby tak przez schowek do tego excela ...
Załączniki
dłub layouty.LSP
(8.63 KiB) Pobrane 12 razy
asa
 
Posty: 596
Dołączył(a): lut 18, 2007 20:01


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników