Topograf Online

Software => LISP, AutoLISP => Subiect creat de: arttopo din Mar 06, 2012, 01:55 PM

Titlu: ajutor autolisp
Scris de: arttopo din Mar 06, 2012, 01:55 PM
Exista un autolisp care sa imi selecteze mai multe linii care sunt puse cap in cap, selectand una din liniile care alcatuiesc traseul, eventual ceva care sa uneasca respectivele linii fara sa imi schimbe proprietatile lor, culoare, grosime, layer, etc.?
Multumesc

Modificat de arttopo (06-03-2012 11:59:21)
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 07, 2012, 05:30 PM
http://www.fileshare.ro/49473713696.4 (http://www.fileshare.ro/49473713696.4)
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 07, 2012, 06:21 PM
Citat din: arttopoExista un autolisp care sa imi selecteze mai multe linii care sunt puse cap in cap, selectand una din liniile care alcatuiesc traseul, eventual ceva care sa uneasca respectivele linii fara sa imi schimbe proprietatile lor, culoare, grosime, layer, etc.?
Multumesc

In versiunile mai noi sau mai vechi de Autocad mu exista posibilitatea de a avea o polilinie care sa se plimbe prin mai multe layere. Sa vedem ce aduc versiunile viitoare (Autocad 2013 s-a lansat acum cateva zile...)
Singura solutie o vad ca fiind gruparea liniilor in blocuri cu respectarea cerintelor de culoare, grosime... 
In privinta culorii, s-a gasit o solutie pentru a folosi in desene linii, polilinii multicolore.
vezi: http://www.cadforum.cz/cadforum_en/qaID.asp?tip=1818



Modificat de advex (07-03-2012 18:25:13)
Titlu: Re: ajutor autolisp
Scris de: John Doe din Mar 07, 2012, 08:34 PM
Arata ca doua polilinii de culori diferite una peste alta, una continua dedesubt si una "dashed" peste. Sau invers? parca e intrebarea aia cu zebra...

Am vazut totusi aceeasi polilinie (geometric vorbind) pe mai multe layere... userul o desenase pe un layer pe urma l-a inchis si a uitat, n-a mai gasit polilinia si a desenat-o inca o data, mai tarziu a inchis si layerul asta si iar n-a mai gasit-o... si tot asa...
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 07, 2012, 09:45 PM
Citat din: John DoeAm vazut totusi aceeasi polilinie (geometric vorbind) pe mai multe layere...

De fapt, sunt mai multe polilinii, pe layere diferite...  suprapunerea este intamplatoare :)  :)
Titlu: Re: ajutor autolisp
Scris de: John Doe din Mar 07, 2012, 11:02 PM
Era doar un exemplu de rezolvare a unei probleme ("disparitia" poliliniei), de catre un user care nu intelege ce s-a intamplat. Tot din intamplare, efectul semana cu ce s-a discutat aici.
Titlu: Re: ajutor autolisp
Scris de: zamfy din Mar 08, 2012, 10:14 AM
O metoda foarte simpla este sa folosesti comanda GROUP (G de la tastatura) si sa creezi un grup cu poliliniile respective. Am reconstituit exemplul lui arttopo:
http://www.fileshare.ro/49572943887.7
In desenul respectiv, valoarea variabilei de sistem PICKSTYLE este setata pe 1, astfel poliliniile dintr-un grup sunt selectate ca un intreg. Daca setam PICKSTYLE pe 0, poliliniile sunt selectate individual. Pentru a seta valoarea variabilei PICKSTYLE, scriem PICKSTYLE la tastatura urmat de 0 sau 1 (implicit este 0) sau apasand tastele CTRL+H pentru a schimba rapid valorile.
Astfel sunt pastrate si culorile si layerele si putem manipula entitatile mult mai bine decat daca le-am fi constituit intr-un bloc.
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 08, 2012, 11:39 AM
Mersi de raspuns, dar ma ajuta partial. Liniile de acolo sunt fire de Fibra Optica, un cablu de FO, are cam 96 fire colorate diferit care se sudeaza intr-un enclosure cu alta FO si pleaca mai departe la alt enclosure, trecand prin sute de astfel de en. Eu am nevoie de ceva care sa imi selecteze liniile continue a.i. daca modific ceva sa nu mai selecteze acolo unde nu mai exista continuitate. Sper ca m-am facut inteles.

(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_29015.jpg)
367/322px 22.6KB
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 08, 2012, 11:51 AM
Daca ai posibilitatea de a incerca solutia Autocad Electrical este posibil sa gasesti solutii la problema ta.
Versiune demo: http://usa.autodesk.com/autocad-electrical/trial/ (http://usa.autodesk.com/autocad-electrical/trial/)

(http://images.autodesk.com/adsk/images/AutocadElectrical2012_boxshot_204x300.jpg)
Titlu: Re: ajutor autolisp
Scris de: zamfy din Mar 08, 2012, 12:13 PM
Citat din: arttopoMersi de raspuns, dar ma ajuta partial. Liniile de acolo sunt fire de Fibra Optica, un cablu de FO, are cam 96 fire colorate diferit care se sudeaza intr-un enclosure cu alta FO si pleaca mai departe la alt enclosure, trecand prin sute de astfel de en. Eu am nevoie de ceva care sa imi selecteze liniile continue a.i. daca modific ceva sa nu mai selecteze acolo unde nu mai exista continuitate. Sper ca m-am facut inteles.

Si asta e usor de facut (asta in cazul in care am inteles corect ceea ce ai vrut sa spui). Daca ai un grup de linii continue si vrei sa modifici una dintre ele si apoi sa o scoti din grupul respectiv, apelezi comanda GROUP, selectezi grupul din lista, apoi dai remove, selectezi linia sau liniile pe care vrei sa le modifici si apoi dai ok. Daca dai click pe grupul respectiv, iti va selecta doar ce a mai ramas.
Poate iti va fi de folos aceasta informatie.
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 09, 2012, 11:55 AM
Varianta cu GROUP nu se poate aplica la mine. Eu am traseele de linii puse in mai multe fisiere dwg, in coordonate. Am atasat un exemplu si sunt mii de astfel de cutii de jonctiune. Ca sa fac pentru fiecare fir cate un grup..... O sa incerc eu sa fac un fisier lisp. Daca aveti ceva idei.

(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_29059.jpg)
581/303px 12.4KB
Titlu: Re: ajutor autolisp
Scris de: adrianc din Mar 09, 2012, 03:23 PM
Nu poti selecta cu un filtru liniile de aceeasi culoare (banuiesc ca ai folosit culori diferite pentru fiecare filtru fire) si apoi sa le grupezi?
Aplici filtru, dai comanda group si cand iti cere sa selectezi, tastezi p si enter (adica previous). Vezi ce iese.
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 09, 2012, 04:07 PM
Citat din: arttopoVarianta cu GROUP nu se poate aplica la mine. Eu am traseele de linii puse in mai multe fisiere dwg, in coordonate. Am atasat un exemplu si sunt mii de astfel de cutii de jonctiune. Ca sa fac pentru fiecare fir cate un grup..... O sa incerc eu sa fac un fisier lisp. Daca aveti ceva idei.

Un exemplu de fisier dwg ar fi mai sugestiv...
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 09, 2012, 04:25 PM
Cam asa arata, doar ca acel trseu poate contine mii de linii. Cand schimb niste fire undeva pe traseu eu am nevoie sa vad de unde pleaca si unde ajunge un traseu de linii care au continuitate.

(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_29073.jpg)
580/297px 23.9KB
Titlu: Re: ajutor autolisp
Scris de: AlexGIS din Mar 09, 2012, 08:33 PM
Citat din: arttopoCam asa arata, doar ca acel trseu poate contine mii de linii. Cand schimb niste fire undeva pe traseu eu am nevoie sa vad de unde pleaca si unde ajunge un traseu de linii care au continuitate.

Dacă nu foloseşti Autocad dedicat pentru reţele, poţi folosi Autocad Map.
În autocad Map poţi atribui liniei respective un indice şi apoi poţi face topologie de tip "link". Pe baza acelui indice poţi schimba modul în care se va reprezenta grafic linia respectivă. De fapt, ăsta este şi modul de lucru în reţelistică. Rezultatul va fi un strat tematic peste linia ta, pe care îl poţi schimba cum doreşti (adică vei avea o haşură buffer pe care o poţi customiza cu culorile dorite).
Dacă schimbi linkul, adică dacă liniei i se modifică traseul, refaci topologia şi, implicit, stratul tematic va fi afişat pe noul traseu dintr-un capăt în celălalt.Totodată, poţi atribui liniei respective şi alte info, cum ar fi arie secţiune sau material (cupru/aluminiu, de ex) iar atunci când vei interoga traseul, vei şti ce reprezintă.
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 09, 2012, 10:06 PM
Multumesc de raspuns, dar mi se pare complicat. Eu vad un program care sa verifice coordonatele de plecare si de sfarsit ale lniei si daca sunt egale cu una din coordonatele altei linii sa o selecteze, si operatia sa se repete pana nu mai gaseste nicio pereche de coordonate egale. Problema e ca nu stiu sa il scriu in lisp sau alt limbaj de programare compatibil cu autocadul.
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 12, 2012, 04:33 PM
S-a rezolvat. Multumesc. :rotfl:
Titlu: Re: ajutor autolisp
Scris de: John Doe din Mar 12, 2012, 08:57 PM
Pai daca e numai asta, de ce nu folosesti comanda PEDIT? Si selectezi linia ta de plecare, pe urma tot ce prinzi prin jur (cu crossing) si vezi ce iese...
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 13, 2012, 11:46 AM
Citat din: arttopoS-a rezolvat. Multumesc. :rotfl:

Daca ai gasit o solutie la problema enuntata, ar fi interesant sa o si postezi. Mai invatam si noi cate ceva...
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 14, 2012, 07:35 PM
Cu mare placerea as fi pus autolispul, dar in conditiile in care unii de pe forum cer bani ca sa te ajute prefer sa il tin ptr. mine. Oricum multumesc de raspunsuri.
Titlu: Re: ajutor autolisp
Scris de: John Doe din Mar 14, 2012, 09:47 PM
Da, unii cer bani. Dar uita-te in sectiunea "Scripturi in LISP, AutoLISP" si ai sa vezi ca nu e chiar asa. Depinde ce consideri tu ajutor sau produs vandabil. Sper sa mai treci pe-aici si poate, in timp, ai sa-ti schimbi parerea actuala.
Titlu: Re: ajutor autolisp
Scris de: AlexGIS din Mar 14, 2012, 11:14 PM
Citat din: arttopoCu mare placerea as fi pus autolispul, dar in conditiile in care unii de pe forum cer bani ca sa te ajute prefer sa il tin ptr. mine. Oricum multumesc de raspunsuri.

Ai putea totusi sa faci abstractie de faptul ca unul ti-a cerut bani...
Titlu: Re: ajutor autolisp
Scris de: arttopo din Mar 15, 2012, 11:45 AM
O sa fac abstractie. Autolisp-ul e facut de cineva de pe un forum de afara, care nu a cerut nimic in schimb. Bafta si sper sa ne ajutam pe viitor " pe bani multi " ;)  Am atasat autolispul, si daca cineva are nevoie de ajutor in domeniul geodeziei cu placere. Poate reusim sa il mai imbunatatim. La un fisier prea mare dureaza cam mult.

(defun c:test ( / el en fl i l1 l2 ls ss so x )
 (if
   (and
     (setq ss (ssget "_X"      '((0 . "LINE" ))))
     (setq en (ssget "_+.:E:S" '((0 . "LINE" ))))
   )
   (progn
     (setq so (ssadd)
           en (entget (ssname en 0))
           l1 (list (cdr (assoc 10 en)) (cdr (assoc 11 en)))
     )
     (repeat (setq i (sslength ss))
       (setq en (ssname ss (setq i (1- i)))
             el (entget en)
             ls (cons (list (cdr (assoc 10 el)) (cdr (assoc 11 el)) en) ls)
       )
     )
     (while
       (progn
         (foreach x ls
           (if
             (vl-some
               (function
                 (lambda ( p )
                   (or (equal (car x) p 1e-8) (equal (cadr x) p 1e-8))
                 )
               )
               l1
             )
             (setq so (ssadd (last x) so) l1 (cons (car x) (cons (cadr x) l1)) fl T)
             (setq l2 (cons x l2))
           )
         )
         fl
       )
       (setq ls l2 l2 nil fl nil)
     )
   )
 )
 (sssetfirst nil so) (princ)
)

Modificat de arttopo (15-03-2012 12:40:22)
Titlu: Re: ajutor autolisp
Scris de: DorinMuresan din Mar 16, 2012, 12:28 PM
Imi da urmatoarea eroare cand incarc lispul de mai sus:
New Text Document.lsp successfully loaded.
Command: ; error: extra cdrs in dotted pair on input
Poate sa-mi spuna cineva care e solutia?Multumesc
Titlu: Re: ajutor autolisp
Scris de: advex din Mar 16, 2012, 12:44 PM
Citat din: DorinMuresanImi da urmatoarea eroare cand incarc lispul de mai sus:
New Text Document.lsp successfully loaded.
Command: ; error: extra cdrs in dotted pair on input
Poate sa-mi spuna cineva care e solutia?Multumesc

Atentie la "smilies" din corpul programului, genereaza multe erori...

(defun c:test ( / el en fl i l1 l2 ls ss so x )
  (if
    (and
      (setq ss (ssget "_X"      '((0 . "LINE"))))
      (setq en (ssget "_+.:E:S" '((0 . "LINE"))))
    )
    (progn
      (setq so (ssadd)
            en (entget (ssname en 0))
            l1 (list (cdr (assoc 10 en)) (cdr (assoc 11 en)))
      )
      (repeat (setq i (sslength ss))
        (setq en (ssname ss (setq i (1- i)))
              el (entget en)
              ls (cons (list (cdr (assoc 10 el)) (cdr (assoc 11 el)) en) ls)
        )
      )
      (while
        (progn
          (foreach x ls
            (if
              (vl-some
                (function
                  (lambda ( p )
                    (or (equal (car x) p 1e-8) (equal (cadr x) p 1e-8))
                  )
                )
                l1
              )
              (setq so (ssadd (last x) so) l1 (cons (car x) (cons (cadr x) l1)) fl T)
              (setq l2 (cons x l2))
            )
          )
          fl
        )
        (setq ls l2 l2 nil fl nil)
      )
    )
  ) 
  (sssetfirst nil so) (princ)
)

sursa: http://www.theswamp.org/index.php?topic=38315.0
Titlu: Re: ajutor autolisp
Scris de: DorinMuresan din Mar 16, 2012, 01:27 PM

                  Da, am observat emoticons alea si adevarul e ca eu le-am inlocuit cu ";)" , acuma observ ca trebuie doar o ")". Dar acuma incarc lispul il lansez cu test si nu se intampla absolut nimic, poate sa fie influentat de versiunea Autocad(2010)?

Modificat de DorinMuresan (16-03-2012 11:29:29)



               
Titlu: Re: ajutor autolisp
Scris de: John Doe din Mar 16, 2012, 01:35 PM

                  La liniile cu "ssget X" se inlocuise automat de site glilimele+paranteza cu un smilies, si s-a pierdut o paranteza la copy-paste.
Mi-am permis sa pun un spatiu intre glilimele si paranteza, acuma cred ca e bine. Ia inca o data textul cu copy-paste.