Un pic de ajutor

Creat de zamfy, Iun 03, 2011, 06:39 PM

« precedentul - următorul »

John Doe

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.

advex

#16
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!

John Doe

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...

zamfy

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.

zamfy

#19
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!

advex

#20
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!

zamfy

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...

John Doe

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.

advex

#23
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)