Podešavanje Viewporta pomoću lispa

More
14 years 4 months ago #75 by zrendula
mbozicevic 31-08-2009 14:08
Pozdrav.... ovako glasi skraćeni kod....koji ne radi. u čemu je fora??? Sa svim objektima radi normalno, ali s viewportom nikako......hmmm

(defun proba (/ info)
(setq viewport (entget (ssname (ssget) 0)))
(setq sc_old (assoc 45 viewport))
(setq sc 176.00)
(setq sc_new (cons 45 sc))
(setq viewport (subst sc_new sc_old viewport))
(entmod viewport)
)

Nakon ovog dijela ...
(defun proba (/ info)
(setq viewport (entget (ssname (ssget) 0)))
... viewport izgleda:
((-1 . <Entity name: 7efd50f0>Wink (0 . VIEWPORT) (330 . <Entity name: 7efb3ef0>Wink
(5 . 10E) (100 . AcDbEntity) (67 . 1) (410 . Layout2) (8 . 0) (100 .
AcDbViewport) (10 128.5 97.5 0.0) (40 . 205.6) (41 . 156.0) (68 . 2) (69 . 2)
(12 210.0 148.5 0.0) (13 0.0 0.0 0.0) (14 10.0 10.0 0.0) (15 10.0 10.0 0.0) (16
0.0 0.0 1.0) (17 0.0 0.0 0.0) (42 . 50.0) (43 . 0.0) (44 . 0.0) (45 . 321.16)
(50 . 0.0) (51 . 0.0) (72 . 1000) (90 . 32864) (281 . 0) (71 . 1) (74 . 0) (110
0.0 0.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (79 . 0) (146 . 0.0) (170 .
0))

- htio bi promjeniti (45 . 321.16) sa (45 . 176.00), što na kraju uspijem i var, viewport je
((-1 . <Entity name: 7efd50f0>Wink (0 . VIEWPORT) (330 . <Entity name:
7efb3ef0>Wink (5 . 10E) (100 . AcDbEntity) (67 . 1) (410 . Layout2) (8 . 0) (100 .
AcDbViewport) (10 128.5 97.5 0.0) (40 . 205.6) (41 . 156.0) (68 . 2) (69 . 2)
(12 210.0 148.5 0.0) (13 0.0 0.0 0.0) (14 10.0 10.0 0.0) (15 10.0 10.0 0.0) (16
0.0 0.0 1.0) (17 0.0 0.0 0.0) (42 . 50.0) (43 . 0.0) (44 . 0.0) (45 . 176.00) (50
. 0.0) (51 . 0.0) (72 . 1000) (90 . 32864) (281 . 0) (71 . 1) (74 . 0) (110 0.0
0.0 0.0) (111 1.0 0.0 0.0) (112 0.0 1.0 0.0) (79 . 0) (146 . 0.0) (170 . 0))

poslije toga ide (entmod viewport)...... nil

hmm, ne radi...zašto?? ne kužim... Sad

molim lisp znalce da mi pomognu... hvala unaprijed...poz..

JackOfHearts 31-08-2009 16:20
Ne možeš ENTMODE-ati viewport. Možeš pokuštati s objektima tj. sa vla funkcijama, ali s njima ne možeš direktno mijenjati visinu pogleda u modelu (code 45 koji ti želiš promijeniti) već možeš mijenjati npr. custom scale.
Npr.
Code:
(vl-load-com) (defun proba01 (/ eview viewport CustomScale) (setq eview (car (entsel))) (setq CustomScale 0.2) (setq viewport (vlax-ename->vla-object eview)) (vla-put-customscale viewport CustomScale) )

mbozicevic 01-09-2009 08:23
ahaaa....zakon!! Smile hvala

u mom početničkom lisparenju nisam se još sreo s vla-fjama.
Hvala još jednom... pozdrav...

JackOfHearts 01-09-2009 08:33
znam da su malo zeznute naredbe za shvatit u početku, ali su u nekim stvarima nezamijenjive.

mbozicevic 01-09-2009 10:33
Imaš pravo, malo su zeznute Smile ...
al' to je ono što sam i htio, upisati CustomScale, a ne računat nekih 176 za mjerilo 1:1000
Riješio sam problem nekom ludom metodom, radi, ali da znam kako i zašto...ne znam.
Da pojasnim: Selektirajući lokaciju u Modelu lisp kreira layout sa svim stranicama koje ulaze u elaborat, naslovnica, skica M1:1000, pregledna M1:5000 itd...

U jednom layout-u crtam dva viewporta. Lisp nacrta jedan pa uđe u nj, (MS) pa zoom center pa scalefactor pa nazad u layout (PS). Pa crta drugi, uđe u nj, zoom, center, sclefactor, pa nazad u layout.... ee..takva je bar bila ideja...hehe..

- dešavaju se neke čudne stvari, stvarno ne kužim zašto, ali.....
...sve je u redu s prvim viewportom, nacta ga normalno i poštela.....problem ili nejasnoća nastaje kad crta drugi viewport. Dešava se to da kad crta drugi viewport prvi vport potisne (prebaci) na mjesto drugog i zadrži njegove postavke (post.prvog), a na mjesto prvog stavi drugi s njegovim postavkama (pos.drugog). hmm... nadam se da se kuži radnja...
i to sve radi ako Layout nije unaprijed kreiran... ako je kreiran unaprijed (drugi put dok pokrenem lisp, taj layout već postoji) onda sve normalno....Frown hmmm.. znanstvena fantastika...
-problem sam riješio na način da sam zamjenio scfactore....sad je kod nejasan ali mi radi OK, i dok postoji i ne postoji layout.

-čini mi se da je prirodnije to riješit s vla-fjama

... nisam još potražio popis vla-fja, al' nadam se da ima u Helpu...

JackOfHearts 01-09-2009 18:30
ja sam prije jedno dvije godine radio sličan lisp, možda ti pomogne.
Nešto sam komentirao, ali mislim da ćeš sve shvatiti. Koliko je meni poznato, moraš raditi preko vla funkcija ako želiš to napraviti pomoću lispa.
Postoji jedan mali problem kod izrade layout na ovaj način, čini se da Garbage Disposal ne funkcionira baš dobro kod lispa tj. kod izrade layouta, pa nakon nekih 15-tak kreiranih layouta, memorija se napuni i jednostavno sruši AutoCAD. Moj prijedlog ti je da, ako ti se to bude dešavalo, jednostavno loop limitiraš na 15-tak layouta. Nisam imao vremena tada da se poigram s time, a sada bi to vjerojatno napravio u .NET-u. Možda na novijim AutoCAD-ima su to popravili, nisam testirao.

ActDoc ti je Active Document
Code:
;clay - generira layout NewLayoutName i s pt tockom u modelu(k) (defun clay (NewLayoutName pt / vi NewLayoutObj CurLayoutList) (setq CurLayoutList (vla-get-Layouts ActDoc)) (setq NewLayoutObj(vlax-invoke-method CurLayoutList 'Add NewLayoutName)) (vla-put-configname NewLayoutObj "\\\\xxx.xxx.xxx.xxx\\HP Color LaserJet 5550") (vla-put-CanonicalMediaName NewLayoutObj "A4") (vla-put-plotrotation NewLayoutObj 1) (setvar "ctab" NewLayoutName) (setq vi (vla-addpviewport (vla-get-block NewLayoutObj) (vlax-3d-point (list 144 99.06)) 284 198)) ;144,99.06 centar viewporta; 284 198 velicina (vla-put-ViewportOn vi -1) (vla-put-layer vi "viewports") ;(vla-put-customscale vi 10) (command ".mspace") (setq pt1 (list (+ (car pt) 16.63) (+ (cadr pt) 13.66));16.63 i 13.66 su deltaX i deltaY od centra u viewportu (nivelete) do gore-desno viewporta dijeljeno sa 10 zbog mjerila pt2 (list (- (car pt) 11.77) (- (cadr pt) 6.14));11.77 i 6.14 su deltaX i deltaY od centra u viewportu (nivelete) do dolje-lijevo viewporta dijeljeno sa 10 zbog mjerila ) (command "zoom" "w" pt1 pt2) (command ".pspace") (setvar "psltscale" 0) (setvar "ctab" "Model") )

mbozicevic 04-09-2009 15:58
Da, imaš pravo, napravi ih oko 10-tak. Probao sam i više ali onda prvih pet ne napravi pa napravi 10 pa zadnje ne napravi...

U svakom slučaju hvala... javim se s novim pitanjima

Please Prijava or Create an account to join the conversation.

Time to create page: 0.095 seconds