Topograf Online

Software => LISP, AutoLISP => Subiect creat de: zamfy din Iun 03, 2011, 06:39 PM

Titlu: Un pic de ajutor
Scris de: zamfy din Iun 03, 2011, 06:39 PM
Am primit de la cineva niste studii topo, iar punctele sunt reprezentate ca entitati de tip circle si cotele ca entitati de tip text. Eu am reusit sa inlocuiesc cercurile din desen cu blocuri cu atribute (punctul din topolt). As dori sa stiu daca pot sa transfer textul care reprezinta cota in atributul "Cota" din blocul "Punct" (sper ca ati inteles la ce ma refer). Eu am gasit o metoda, dar trebuie sa fac asta pentru fiecare bloc in parte (si sunt vreo 3000...). Ma gandeam daca nu exista un script care sa preia cel mai apropiat text de blocul cu atribute si sa inlocuiasca atributul respectiv.
Am nevoie de asta pentru ca trebuie sa fac niste modelari digitale ale terenului si nu pot fara cote...Nu am nici fisierul de coordonate la dispozitie...
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 03, 2011, 08:34 PM
Cel mai bine ar fi sa postezi fisierul respectiv pentru a ne incerca perspicacitatea. Sa ne dam parerea cu aspecte teoretice - nu te ajuta!
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 03, 2011, 08:51 PM
http://www.fileshare.ro/20870859001.2 (http://www.fileshare.ro/20870859001.2)
Aceasta este doar o mica parte din ridicare, si, din motive de securitate, am translatat-o. Sper sa fie suficient.
Ceea ce vreau eu este sa inlocuiesc cercurile care reprezinta punctele cu blocuri cu atribute, iar in atributul COTA sa pun automat textul cel mai apropiat de punct care reprezinta cota.
Ar fi util un lisp care sa selecteze in ordine blocurile cu atribute, apoi sa selecteze acelasi numar de texte in aproximativ aceeasi ordine (de la stanga la dreapta sau de sus in jos) si sa inlocuiasca atributul cu textul respectiv.
Eu am incercat sa fac un lisp, dar imi dadea niste erori si m-am lasat pagubas.
Sau daca poate cineva sa genereze curbele de nivel pentru ridicarea respectiva, jos palaria!

Modificat de zamfy (03-06-2011 17:58:58)
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 04, 2011, 12:10 AM
M-am uitat. Daca ar exista o legatura intre coordonatele punctelor si amplasarea textului de cota, ACEEASI pentru toate punctele din desen, s-ar putea scrie un algoritm care sa-ti scoata un inventar de coordonate cu tot cu Z. Daca cineva a mai miscat cotele, atunci eu n-am de unde sa stiu care text este cota carui punct - ceea ce este si in cazul de fata. Cineva a mai aranjat desenul si a mutat cotele, sau e facut din mai multe bucati in stiluri diferite dar eu cel putin nu vad nici o legatura intre textele cotelor si punctul corespunzator. Stii tu vreuna? in afara de "cel mai apropiat", ca nu tine.
Ma mai gandesc, dar daca gasesc ceva... nu jos palaria, jos portofelul !
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 04, 2011, 01:06 PM
Logica initiala de optimizare a pozitiei textelor, de evitare a suprapunerilor cu alte entitati din desen este greu de reconstituit. Informatia despre cota nu exista pentru toate punctele, posibil a fost pe un layer inchis care nu ti-a fost transmis. In plus, lipsesc liniile ajutatoare de marcaj catre puncte.
Incearca sa utilizezi functia "Data extraction" pentru a obtine coordonatele centrelor punctelor si a punctelor de insertie texte pentru cote.
Daca ai abilitati de manevrare a unor filtre in Excel poti face selectia si apoi corelarea informatiilor.
Spor!
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 04, 2011, 07:01 PM
Se poate scrie si un script in care sa faci manual legatura dintre fiecare cerculet si fiecare text pe rand, dar nu ai toate cotele, nu merge. Nu am verificat, dar nici n-as baga mana in foc ca in desen sunt trecute in ordine, ca entitati, punctul si dupa aia cota lui.
Cere fisierul de coordonate zic eu, am mai vazut stiluri echivalente si cred ca iti pierzi vremea si nervii degeaba cu asa ceva. Desenul e frumos, e artistic dar inutil pentru ce vrei tu.
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 04, 2011, 08:37 PM
O prelucrare rapida dupa metoda descrisa mai sus a dat rezultatele din foto.
Fisier dwg: http://www.fileshare.ro/20931603012.5 (http://www.fileshare.ro/20931603012.5)

(http://img695.imageshack.us/img695/500/aaa10j.png)

Modificat de advex (04-06-2011 17:39:25)
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 05, 2011, 10:41 AM
Citat din: zamfyAceasta este doar o mica parte din ridicare, si, din motive de securitate, am translatat-o. Sper sa fie suficient.

Dupa diverse teste facute pe fisierul postat am descoperit existenta unor informatii suplimentare privind locatia initiala, ascunse in diverse variabile. Solutia ta de securizare nu este suficienta!

Modificat de advex (05-06-2011 10:07:47)
Titlu: Re: Un pic de ajutor
Scris de: diagodose2009 din Iun 05, 2011, 11:11 AM
Daca ai gasit locatia oriiginala sau coordonatele originale
Ce mare lucru!!!!!!!
Vine clientul sa-ti dea banii pentru munca topografica depusa de domnul zamfy..
Daca nu vin si banii!!!!!!!!
Degeaba.......


 :)

Modificat de diagodose2009 (05-06-2011 08:11:50)
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 05, 2011, 12:58 PM
Citat din: diagodose2009Daca ai gasit locatia oriiginala sau coordonatele originale
Ce mare lucru!!!!!!!
Vine clientul sa-ti dea banii pentru munca topografica depusa de domnul zamfy..
Daca nu vin si banii!!!!!!!!
Degeaba.......


Zamfy a pus problema securizarii datelor. Pe forum, cel putin in privinta mea, ne intereseaza mai putin locatia exacta pentru folosirea informatiilor.
Este bine sa mai abordam si probleme teoretice, fara gandul la bani... :) :)
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 11, 2011, 03:19 PM
Citat din: advexZamfy a pus problema securizarii datelor.
Ce securizare, dom'le... :)  Au spart astia serverul companiei care produce avioane F1 si au facut pagube de 1 miliard de dolari. @advex, daca nu specificam faptul ca am translatat lucrarea, mai aflai coordonatele originale sau le luai de bune pe astea? :) . Oricum, conteaza 1% locatia lucrarii, putea sa fie si in locale si in UTM, stereo 70...tot aia  :)
Am mai multe ridicari prelucrate intr-un mod asemanator, unele sunt mai "dezordonate",cum e si cazul de fata, altele pot fi reconstituite mai usor, deoarece textele sunt pozitionate cam in acelasi mod pentru toate punctele si cred ca se poate scrie un algoritm pentru ele. Ce mi s-a parut ciudat la asta de fata: faptul ca sunt mai multe cote in desen decat vertecsi si simboluri la un loc (o fi fost vreun layer inchis...)
@advex, nu am gasit nicaieri functia Data extraction, e totuna cu attribute extraction? Fisierul postat de tine este perfect pentru ceea ce am eu nevoie, foarte buna solutia gasita de tine. Insa eu, ca un capos ce sunt, cand aud de excel si word mi se face parul gaina (am o "fobie" pentru programele astea  :dinti:) si am cautat o solutie alternativa. Ea exista, insa mai trebuie perfectionata si cand e gata am sa postez un filmulet cu metoda gasita de mine.
@ John Doe: "Ma mai gandesc, dar daca gasesc ceva... nu jos palaria, jos portofelul !" Sigur ca da! Cine e destept si il duce capul merita (ras)platit, ca asta e, suntem saraci cu totii si ne "trebe" bani. Prefer sa platesc pe cineva destept si priceput, decat sa dau spaga la un inspector mai prost ca mine.
@advex, ai putea sa imi trimiti un tutorial cu metoda facuta de tine (daca ai timp si chef, desigur)? Nu prea ma descurc cu data extraction...(asta e, sunt mai greu de cap).
Oricum, advex, John Doe si diagodose2009, multumesc pentru idei si propuneri si tot tre' sa ne intalnim odata la o bere, ca e cald tare afara...
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 11, 2011, 05:15 PM
Citat din: zamfyAceasta este doar o mica parte din ridicare, si, din motive de securitate, am translatat-o. Sper sa fie suficient.

Ce securizare, dom\'le...   Au spart astia serverul companiei care produce avioane F1 si au facut pagube de 1 miliard de dolari. @advex, daca nu specificam faptul ca am translatat lucrarea, mai aflai coordonatele originale sau le luai de bune pe astea?

Eu zic sa fii mai hotarat atunci cand postezi. Nu ma intereseaza de nici o culoare locatia, iau coordonatele de bune. Daca tu ai motive sa faci translatia, fa-o mai bine data viitoare. Daca nu stii cum, intreaba!!
Citat@advex, nu am gasit nicaieri functia Data extraction, e totuna cu attribute extraction?
Nu stiu ce versiune de Autocad ai, vezi meniul Tools!



Citat....Insa eu, ca un capos ce sunt, cand aud de excel si word mi se face parul gaina
Ne plac sau nu, Word si Excel (in diverse versiuni, free, clone, opensource etc) sunt indispensabile pentru activitati de editare si prelucrare date, chiar si topografice!

Este gresit sa pui problema cu "tare de cap", nu te pricepi, bla-bla... Daca te straduiesti sa inveti ceva in cateva ore sau zile, ai sansa sa scutesti in viitor ore de munca silnica, plictisitoare si multe dureri de cap!!
Daca sunt si altii interesati, am sa dezvolt pe forum subiectul cu utilizarea functiei Data extraction, este mult spus tutorial, acum chiar nu am timp...

O sa revin cat de curand si eu cu o solutie lisp pentru actualizare z cu valoarea din textul alaturat punctului.
Mai departe, distractie placuta in zilele libere!
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 11, 2011, 08:57 PM
Cel mai elegant ar fi cu Data extraction, cred ca e mai usor de manipulat datele in Excel decat sa scrii un algoritm LISP pentru fiecare desen. Nu e mare lucru in Excel, vezi pe la "Format Cells...", "Sort" sau "Filter".
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 11, 2011, 10:17 PM
Eu am AutoCAD 2007 si nu am asa ceva in meniul tools, am doar Attribute extraction. Puteti sa imi spuneti scurtatura la linia de comanda? eu am doar attext si eattext, atat. Stiu, e simplu in excel, mai ales in Excel 2010 e floare la ureche sa sortezi coloane.
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 12, 2011, 12:26 AM
http://www.youtube.com/watch?v=VPD0FxbPz8Q

Nu am la dispozitie Autocad 2007.
Incearca comanda _dataextraction.
Daca nu functioneaza este cazul sa apelezi la Google - este foarte generos si ofera solutii!
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 12, 2011, 09:00 PM
AutoCAD 2007: comanda este cea care ai gasit-o si tu, ma asteptam sa mergi pe ea sa vezi prima data de se intampla, pe urma sa intrebi. Dar ma rog...
Sintaxa comenzii este EATTEXT, se foloseste pentru extragerea atributelor anumitor entitati din desen. De exemplu, daca ai ceva puncte raportate cu TopoLT, da comanda asta pe ele fiindca sunt blocuri cu atribute gata inserate, sa vezi ce misto extragi tot ce vrei tu in fisiere text sau Excel.
Mai multe nu stiu cum sa-ti explic, uita-te in Help la AutoCAD dupa EATTEXT, scrie destul de clar ca sa te prinzi.
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 13, 2011, 12:30 AM
Nu suntem singuri pe lume, sunt si altii care se confrunta cu problema atribuirii cotei la punctele din fisierele Autocad.

Recomand studierea solutiilor propuse de profesionisti in autolisp:
http://www.cadtutor.net/forum/showthread.php?43103-Little-complicated-lisp...assign-Z-coord-to-a-point

Am verificat cate ceva in viteza si este tare interesant. Este recomandat sa va inscrieti pe forum pentru a avea acces la foto si fisierele atasate.
Spor!
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 13, 2011, 10:55 PM
Da, e bun tipul. N-am inteles din prima ce-a facut acolo si nici n-am cartile la mine sa ma uit, si nici n-am timp ca sunt in delegatie dar sunt chiar curios, si mai bine postai altceva advex, acuma am de lucru...
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 13, 2011, 11:04 PM
Nu exista _dataextraction in AutoCAD 2007, doar attribute extraction. John Doe, stiam cum se foloseste attribute extraction, credeam ca data extraction mai aduce ceva in plus (cum ar fi extragerea de informatii si din alte tipuri de entitati, nu doar din blocuri), dar m-am inselat. Nici exportul in excel si manipularea datelor nu da rezultate multumitoare, deoarece pentru minim 40% din entitati cota este atribuita in mod eronat.
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 14, 2011, 05:54 PM
Asa cum am promis, revin cu 2 metode semi-automate de atribuire a cotei in block sau punct. Dupa mai multe teste, am ajuns la concluzia ca fisierul respectiv este imposibil sau foarte greu de reconstituit automat. Am facut 2 capturi de ecran la metodele respective si una din ele se foloseste de un lisp prezent in link-ul dat de advex (ii multumesc pe aceasta cale!).
Sunt 2 arhive in care sunt 2 fisiere swf si fisierul htm care le ruleaza. Daca deschideti fisierul htm cu Internet Explorer, dati allow blocked content ca sa ruleze filmuletul.
Prima metoda:
http://www.fileshare.ro/21568814208
A doua metoda:
http://www.fileshare.ro/21569333451.1
Astept criticile dvs!
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 15, 2011, 12:19 PM
Citat din: zamfyAsa cum am promis, revin cu 2 metode semi-automate...
Astept criticile dvs!

Nu criticam, ne dam cu parerea!!
In primul rand, vizionarea fisierelor flash este dificila, iti fac ochii ca la melc, viteza este mare si obositoare. Nu stiu daca am posibilitatea sa reduc viteza de derulare fara soft auxiliar (cu stop-start este greu!).
Ca la orice problema sunt mai multe solutii. Ai folosit GeoTools, aplicatie pe care nu o au toti la dispozitie. In rest, automatizarea sufera, atribuirea cotei se face manual, punct cu punct.
Important este ca ai gasit solutii, ai invatat cate ceva si nu se stie daca te vei mai intalni curand cu astfel de probleme...
Spor!
Titlu: Re: Un pic de ajutor
Scris de: zamfy din Iun 15, 2011, 01:24 PM
Imi cer scuze ca am folosit fisiere flash, dar au o dimensiune mult mai redusa decat un fisier avi (am viteza de upload proasta).Nu e problema, pot sa le encodez si in avi. Geotools este la rubrica software si este un program foarte util (cel putin pe mine ma scuteste de multe rutine plictisitoare).
Extragerea atributelor o folosesc de mai demult, am facut si programe lisp care extrag informatii din blocuri cu atribute, nu e mare lucru, dar nu pe cea din AutoCAD, pentru ca mi se pare cam greoaie. Stiam de attribute extraction, insa credeam ca am si data extraction, de aia am fost putin confuz (astia de la Autodesk cu ideile lor...)
Automatizarea sufera, dar nu se poate aplica mereu, un robot nu poate substitui un creier uman...
Etapele pentru automatizare in Excel ar fi urmatoarele, dupa mine:
-transformarea cercurilor in blocuri cu atribute, pentru a putea extrage coordonatele
-transformarea textelor care reprezinta cota in blocuri cu atribute, pentru a putea extrage coordonatele
-compararea si filtrarea coordonatelor in excel
-raportarea fisierului excel din nou in autocad
Totusi, exista  8-10 puncte care au un singur text apropiat, exista 5-6 texte care au un singur punct apropiat, asa ca rezultatele din excel nu reflecta 100% realitatea (nici nu au cum).
Daca entitatile din desen ar fi in lista intr-o ordine stricta, ar putea fi "rezolvate" de un lisp, insa ele sunt distribuite intr-o ordine aleatoare. Ca solutie ar fi crearea unui selection set, care sa ia in aceeasi ordine si punctele si textele si pentru fiecare punct sa caute si in stanga si in dreapta si sus si jos si sa ia cel mai apropiat punct fata de o distanta anume data de user.
Sper sa nu ma mai intalnesc cu astfel de fisiere, genereaza dureri de cap. Recomand descarcarea datelor din statia totala folosind blocuri cu atribute, sunt cel mai usor de manipulat. Sau daca nu se poate, macar sa fie in 3D desenul prelucrat. Ca optimizare a textelor cotelor, o recomand pe cea din TopoLT, este de departe cea mai buna pe care am vazut-o pana acum.
Prin metodele de mai sus, reconstituirea desenului a durat in jur de 80 de minute, deci nu e chiar un capat de tara...
Pentru desene mai ordonate, am gasit o metoda de automatizare simpla pe care o voi posta mai tarziu.
@advex, cu totii ne confruntam cu diverse probleme zilnice si esti nevoit sa gasesti solutii, indiferent ca sunt mai bune sau mai proaste, problema tot trebuie sa o rezolvi cumva. Si apeland la un forum, gasesti specialisti care sa te indrume si sa iti dea diverse sfaturi si critici (constructive sau nu...). Cine zice ca stie tot, ala are cel mai ingust orizont al gandirii...
@advex, inca ceva, ai putea sa imi spui cum ai filtrat coordonatele in Excel, vad ca ai obtinut rezultate mai bune ca ale mele...
Titlu: Re: Un pic de ajutor
Scris de: John Doe din Iun 15, 2011, 02:47 PM
Iti mai dau o idee: daca iei la rand entitatile AutoCAd cu ENTGET, ti le citeste in ordinea in care au fost scrise in desen. Daca s-a raportat punctul si imediat dupa aia s-a scris textul de la cota, ar fi OK. Daca s-au raportat toate punctele si dupa aia s-au scris toate textele, nu merge. Verifica in desenul tau, eu nu-l mai am.
Titlu: Re: Un pic de ajutor
Scris de: advex din Iun 15, 2011, 03:44 PM
Citat din: zamfyImi cer scuze ca am folosit fisiere flash...

Nu sunt necesare scuze, ideea era sa poti analiza metodele propuse fara dureri de cap =)

Daca m-ai provocat cu a ta problema text-cote am rascolit prin colectia de programe culese de pe tot globul, am reanalizat desenul tau si iti propun solutia de mai jos:

(defun c:txtz (/ polst txtlstf dstf)

  (setq wd (getpoint "\nSelectie zona:")
wdc (getcorner wd)
        tss (ssget "_W" wd wdc '((0 . "TEXT")(8 . "T_COTA")))
        poss (ssget "_W" wd wdc '((0 . "POINT")(8 . "P_COTA")))
num 0
num1 0
num2 0)
  (repeat (sslength poss)
    (setq ent (entget (ssname poss num))
  poip (cdr (assoc 10 ent))
  polst (append (list poip) polst)
  num (+ 1 num)))
 
  (repeat (sslength tss)
    (setq txtent (entget (ssname tss num1))
  txtval (atof (cdr (assoc 1 txtent)))
  txtcoord (cdr (assoc 10 txtent))
  txtlst (list txtcoord (list txtval))
  txtlstf (append (list txtlst) txtlstf)
  num1 (+ 1 num1)))
  (repeat (length txtlstf)
    (setq txtcoordt (nth num2 txtlstf)
  dlst (mapcar '(lambda (x) (list x (list (distance (car txtcoordt) x)) (cadr txtcoordt))) polst)
  dlstmin (vl-sort dlst '(lambda (d1 d2) (< (car (cadr d1))(car (cadr d2)))))
  dstf (append (list (car dlstmin)) dstf)
  num2 (+ 1 num2)))
  (setq ptf (mapcar '(lambda (x)(entmake (list (cons 0 "POINT")
(cons 8 "00_Puncte_Z")
(cons 10 (list (car (car x))(cadr (car x))(* (+ (caddr (car x)) 1) (car (caddr x)))))))) dstf)))

Pentru a testa mai usor este necesar sa faci cateva operatiuni:
- textele le plasezi pe layer T_COTA;
- punctele pe layer P_COTA (transformi cercurile in puncte cu orice metoda, cu GeoTools etc)
- incarci autolisp txtz.lsp;
- punctele cu atribut cota le gasesti pe layer 00_Puncte_Z
- prin orice metoda transformi aceste puncte in blocuri compatibile cu TopoLT.

Programul autolisp l-am adaptat la cerinte, nu imi asum meritele de autor...

vezi dwg test: http://dl.transfer.ro/transfer_ro-15jun-46fec1c13cee944d.zip

Spor!

Modificat de advex (15-06-2011 15:38:45)