Orice script realizat de voi pe care doriti sa il prezentati membrilor forumului il puteti publica la aceasta rubrica.
http://www.cadastru.home.ro/noutati.html (http://www.cadastru.home.ro/noutati.html)
:)
Un script pentru raportare fisier de coordonate in (Auto/Intelli)cad, pentru listare la scara 1:500. Sunt necesare straturile 0, cote, nrpunct.
Format fisier: nrpunct[spatii]nord[spatii]est[spatii]z.
Fisierul trebuie sa aiba extensia .sos.
http://rapidshare.com/files/19314891/rap500.VLX.html (http://rapidshare.com/files/19314891/rap500.VLX.html)
lansarea in executie se face cu comanda
rap
Modificat de soso (04-03-2007 11:44:58)
Command: rap
Cannot set CLAYER to that value.
; error: Function cancelled
*Invalid*
.sos
37 316032.427 404957.208 73.630
101 316015.275 404954.478 73.745
103 316011.521 404953.881 73.770
102 316003.173 404952.552 72.452
100 315990.358 404950.512 70.430
Sunt necesare straturile (layer-ele) 0, cote, nrpunct.
Acuma ne chinuim sa facem 1 lisp care pe baza noului regulament de predare a lucrarilor sa-ti creeze si sa completeze toate tabele , precum caroiaju si inventaru de coordonate daca folosesti polilinii inchise ptr caldiri si teren .... :cool:
shadow_: accelerati si terminati programele, astfel se schimba iar regulamentul si formatul de predare a lucrarilor!
si daca ati terminat vreau si eu... dau o bere sau mai multe!!!:)
serios daca a facut cineva asa ceva vreau si eu cu bani daca altfel nu se poate
Citat din: sosoUn script pentru raportare fisier de coordonate in (Auto/Intelli)cad, pentru listare la scara 1:500. Sunt necesare straturile 0, cote, nrpunct.
Format fisier: nrpunct[spatii]nord[spatii]est[spatii]z.
Fisierul trebuie sa aiba extensia .sos.
http://rapidshare.com/files/19314891/rap500.VLX.html
lansarea in executie se face cu comanda
rap
uite ce dragut e autocadul cand ma avertizeaza :
CitatCommand: rap
; error: bad argument type: numberp: nil
:rolleyes: vreo idee ? :rolleyes:
ca tot e discutia de lispuri ... are cineva vreo idee unde gasesc si eu un lisp de usi si ferestre pt autocad care sa imi puna si dimensiunile ?
cu respectele cuvinete .... multumesc
Sunteti interesati de Autolisp?
(http://topograf.3xforum.ro/img/pics/topograf.3xforum.ro/ok_1394.jpg)
581/436px 58.4KB
Modificat de DanCad (16-01-2008 10:32:52)
Deja testez un vitor program care are la baza autolisp, dcl si disel, pentru intocmirea documentatilor cadastrale, eu nu sunt autorizat dar colaborez cu autorizati.
:D
Lispul de care zice shadow_ l-am facut deja.
Calcul de suprafete relevee+ intocmire tabel. ordin 634 anexa 11
Ce faceti cand tabelul contine peste 80 de incaperi cum calculati totalul la suprafata ?!!? :zzz:
Mai am un lisp care afiseaza textul la Z cand aveti puncte 3D. (plan cotat)
E-mail pentru cine este interesat de lispuri
catalinord > sa puna dimensiunile la usi pentru plan arhitectural ???
Citat din: TOPDAVLADLispul de care zice shadow_ l-am facut deja.
Calcul de suprafete relevee+ intocmire tabel. ordin 634 anexa 11
Ce faceti cand tabelul contine peste 80 de incaperi cum calculati totalul la suprafata ?!!? :zzz:
bv foarte tare, poti fi un bun samaritean si sa'l uploadezi sa ne bucuram si noi de el?
Citat din: scootergtsCitat din: TOPDAVLADLispul de care zice shadow_ l-am facut deja.
Calcul de suprafete relevee+ intocmire tabel. ordin 634 anexa 11
Ce faceti cand tabelul contine peste 80 de incaperi cum calculati totalul la suprafata ?!!? :zzz:
bv foarte tare, poti fi un bun samaritean si sa'l uploadezi sa ne bucuram si noi de el?
Cu cea mai mare placere. Va trimit mai multe numai sa-mi ziceti unde sa fac uploadul.
ID-ul meu pe yahoo
E-mail
http://rapidshare.com/files/75918585/TOPDAVLAD.rar.html
Multumesc TOPDAVLAD! Sper sa ma descurc cu ele!
daca ai intrebari ma gasesti pe mess....in mod normal la profil ar trebui sa-mi
vezi si mailul
Merci TOPDAVLAD, foarte util cel cu releveul, te scuteste de mult timp pierdut cu introducera suprafetelor, denumirilor de camere, etc. Destul de putini oameni au caracterul tau, ca imi dau seama ca sa faci o rutina lisp nu e lucru usor, cel putin pt nestiutori. Ai tot respectul meu!
_______________________________________
It's nice to be important, but is more important to be nice !
Cand esti pasionat de ceva si ai caracter, nu te gandesti numai la castiguri materiale. Sper sa avem cat mai multi colegi pe forum care gandesc si actioneaza astfel.
Numai bine!
Cu placere! Cel care face totalul la suprafete l-am realizat pentru ca aveam
mai multe relevee, cu vreo 80-90 camere pe nivel si nu aveam timp sa le mai calculez cu calc. de mana. Sunt convis ca exista si alte metode de calcul fara
ca sa exporti in fisier excel dar lispul asta l-am facut mai repede.
Mai ziceti si voi ceva !!!!
Misto. Da-i si tu share.
un programel care pune usi si ferestre gasiti aici http://www.virses.com/doorwin.html
Cotare automata (cum este in topoLT) si generare puncte.
Cine doreste aplicatia sa ma caute pe mail.
mdeah!!! TOPDAVLAD.....NU POT SA ZIC DECAT CA SUNT NISTE FURACIUNI ORDINARE!!!!
Cristinel Bujor si al sau TopoLt iti spune ceva?!?!?!?!
iti spun eu daca nu.....
ce ai tu acolo sunt franturi din al sau program....mult mai complex si facut de unul....mult mai destept...asa ca las-o mai usor cu "MERITELE"
WOOOW, ALPHA, CATA OSTILITATE
. Ce am facut era ptr mine si ptr ca aveam nevoie de ceva rapid sa-mi coteze . In momentul respectiv nu aveam TOPO LT. Dar, frate, zi-mi si mie cum as putea sa "fur" ceva din TopoLT avand in vedere ca lispurile din program sunt protejate ?!?!
Gandeste si tu putin.
Respecte. Sunt nou venit si ma intereseaza si pe mine LISP in general, si intrand aici am vazut discutia aprinsa despre furaciuni, si as dori sa spun ca se poate fura din lispuri protejate, care sunt numa criptate. Doar ca trb sa stii cum
.
Corect Corvinus.
Nu m-a interesat sa fur. Procedura de executie la lispul meu este alta decat la TOPO LT tocmai ptr ca eu am gandit-o altfel si ptr ca nu fac lispuri, aplicatii ca sa-mi casting existenta. In fine, eu am crezut ca aici putem face schimb de aplicatii si alte informatii utile ptr noi, dar vad ca mai mult se transforma intr-o competitie.
Nu stiu cat e competitie dar pe mine nu ma deranjeaza cand cineva se inspira de undeva, de exemplu (si nu stiu cat e de legal ce o sa spun )
, dar am cam decriptat niste lispuri de la Topograph sa le vad constructia , si am facut-o doar pentru inspiratie nu ca sa fur, si uite asa , fara sa folosesc catusi de putin din codul de acolo am reusit sa fac ceva lispuri cu setari pt autocad, pt diferite scari, si repet doar pt inspiratie leam folosit. Deci nu vad ceva rau in a te inspira dintr-un program atata timp cat nu afectezi integritatea programului prin insusiri de cod. In orice caz bravo Topodavlad pentru ca esti un "puturos".
Modificat de Corvinus (21-07-2008 00:18:23)
Si ca sa iti spun de ce te-am facut "puturos" - Prof. meu de topo inginereasca are o vorba: omul lenes e ala care nu vrea sa faca nimic, iar omul puturos e ala care vrea sa faca pe cat posibil cat mai mult da cu cat mai putina munca. Deci automatizand procesul de constructie a unui plan cu lispuri e o chestie foarte tareee, multumesc pe aceasta cale celor care au inventat limbajul LSP pentru ca s-au gandit si la noi astia mai puturosi.
Si cele de mai sus fiind spuse, as avea nevoie de putin ajutor, in ultima vreme am tot prins sate intregi de masurat pentru modernizare infrastructura (apa, canal, sosele... e un chin partea de birou tinand cont ca trb luate profile din 15 in 15 m) si ma gandeam sa fac un lsp pentru a uni punctele intre ele, doar cautand nr punctului, adica sa lansez comand pline si dupa sa ii dau punctele prin care sa treaca. Nu stiu daca se poate da m-am tot documentat si tot nu am aflat cum se poate atasa unui punct din autocad un nume dupa care sa fie recunoscut, nu doar textul cu matricola punctului. Asa ca daca aveti idei va rog "bombardati-ma".
doru nu cred ca mai inteles, eu nu ma refer la planuri de intabulare sau de parcelare s.a.m.d., care sunt relativ mici si care daca ai fost in teren le unesti si dupa ce iti aduci aminte ca arata terenul. Ma refeream strict la lucrari mari cu 8000+ puncte, in care ti-ar fi mult mai usor sa unesti cum ma gandeam eu. Si da sunt de acord cu tine de ce sa dai pe autocad atat, dar ce sa ii faci, a fost monopolizat de scoli autocad-ul si in principiu cam ala e progr de cad care se preda, deci la ce vrei sa se gandeasca noii absolventi sa cumpere
, chiar daca nu face atatea.
Modificat de Corvinus (21-07-2008 14:47:06)
corvinus: In cazul lucrarilor cu numar mare de puncte singura solutie viabila este utilizarea codurilor si un soft corespunzator.
Nu strica sa parcurgi putin documentatia referitoare la principiul "linework" - de ex. http://www.ejsurveying.com/FBK_from_CSV ... _Codes.pdf
Daca folosesti TopoLt versiuni 7.x - comanda JoinPct permite unirea punctelor dupa codurile acestora (vezi Help).
_______________________________________
http://info-topograf.blogspot.ro/
as fi interesat de acest mod de lucru cu linework,numai ca inteleg mai greu termenii din engleza.
daca e cineva care poate explica pe romaneste... as da mai multe beri...
ms mult doru pt lamuriri si advex pt informatii, o sa ma documentez sa incerc si eu sa fiu mai eficient. Ms mult inca odata.
nu se baga nimeni sa ajute si un sarman topometrist....
Pentru Corvinus:
Hai sa-ti dau o idee cu profilurile: fa-ti terenul o retea tip "mesh", pe urma expodeaz-o, iti va rezulta o colectie de entitati "3dface", cu care te poti descurca mult mai usor in materie de profile, curbe de nivel, interpolari.
Mai este un utilitar la care-i spune PROFIL sau PROFILE, merge sub DOS, îi dai fisierul de coordonate [nume punct X Y Z], pe urma îi spui aproximativ numele punctelor cele mai apropiate de profilul tau si scarile pe lungime si inaltime si-ti scoate un DXF destul de misto.
Bafta !
BRAVO topodavlad, chiar dacă şi eu calculez automat suprafeţele cu un program lisp adaptat pentru formatul propriu de releveu - şi scuteşte de mult timp întocmirea unui releveu. Încercările de programe lisp ale user-ului topodvlad mi se par benefice, [ furăciuni de autolisp sunt în tot INTERNET-ul ].
.............
Aşa că este legal, poate nu extrage din TopoLT subprograme lisp,
dar găseşti şi pe GOOGLE.com fisiere sursă lisp.
Limbajul lisp are o deficienţă mare, nu există opţiunea de compilare
a programelor lisp acceptată de intellicad şi zwcad, (excepţie vlx-ul din internă autocad).
Modificat de diagodose2009 (04-12-2009 21:18:10)
_______________________________________
http://we.tl/D8HOKFyTJ7
cine ma poate ajuta cu un lisp pt generare taluz, sau un dume ceva
De ce Lisp pt. generare taluz ? Ai fisierul de definitii de linii, acolo sunt mai multe tipuri de linii pentru taluzuri. Daca chiar nu gasesti, cauta alt fisier cu extensia LIN si vezi pe-acolo ce gasesti (parca este topo.lin).
Nu stiu ce sunt alea dume (daca vorbim serios), cu asta nu te pot ajuta.
viozel:
La http://www.glamsen.se/CadTools.htm gasesti o aplicatie utila care te va ajuta in generarea liniilor dorite de tine + alte solutii bune pentru topografi.
Spor!
Modificat de advex (10-03-2009 16:49:54)
_______________________________________
http://info-topograf.blogspot.ro/
scz de "dume", ma interesau de fapt NUME de aplicatii ce ma pot ajuta
Da, advex, dar stii ce e interesant ? Este FOARTE greu de apasat F1 daca nu stii ceva, si, se pare, mult mai usor de postat aici. Ca cineva tot "musca". Iar stilul asta ma enerveaza.
Scuze pentru exprimare, nu m-am adresat nimanui direct... dar exista si chestiuni pe care nu le înghit. Fiecare cu defectele lui...
stiam de existenta unui LISP pt asa ceva si cautam in special pe acesta, cat despre utilizarea acadului mai am multe de invatat, folosesc si f1, experiente de tot felul, dar depinde si de timpul avut la dispozitie. sincer la a cata postare a fost (prima) nici nu ma asteptam la ceva in timp relativ scurt, dar se vede ca m-am inselat si multam celor care au sarit in ajutor.
P.S. oricum parerea fiecaruia trebuie respectata
Daca tot vorbim de taluz, de rampe... credeti ca la constructia din foto a participat si vreun topograf la trasare?
450/356px 27.5KB
_______________________________________
http://info-topograf.blogspot.ro/
viozel:
Spune-mi (daca vrei) ce adresa de mail ai, si-ti trimit eu un fisier de definitii de linii care are si vreo 3-4 linii de tip taluz. Daca nu stii ce sa faci cu el, zi-mi si-ti spun - nu ma apuc acum fiindca poate deja stii. Ar trebui sa mai stiu daca desenele tale le mai dai si altora, care poate nu au fisierul respectiv - se rezolva si asta.
De LISP-ul ala n-am auzit.... probabil foloseste comanda "divide" sau "measure" si-ti insereasa un block din loc in loc.... daca e asa, nu te-as sfatui sa-l folosesti, mai mult te incurci. Foloseste pur si simplu linia de tip TALUZ, vezi la ce scara iti convine si gata.
Probabil o sa incep sa postez diferite utilitare LISP; daca veti fi interesati, voi continua. Primul este:
;;;Cere inaltimea dorita a textelor de modificat si le aduce la aceasta marime pe toate cele selectate,
;;; , si se pot muta daca se doreste. Se repeta cu CR sau click-dreapta.
(setq htext (getreal "\nMarimea textului: " ))
(defun C:HT()
(setq a (entget(car(entsel "\nSelectati textul de modificat: " )))) ;;;selectam textul = a
(progn
(setq a (subst (cons 40 htext) (assoc 40 a) a))
(entmod a)
);;;de la PROGN
(command "move" (cdr (car a)) "" ) ;;;de obicei trebuie si mutate dupa rotire
);;;DEFUN
(princ "\nLansare cu comanda HT" )
Si al doilea:
;;;SCRIE IN FISIERUL "PUNCTE.XYZ" X, Y, SI Z DE LA PUNCTELE SELECTATE ; cere numele punctului
;;;FISIERUL ARE FORMA: PCT Y X Z
;;;Pentru extragere coordonate si numerotare puncte
(defun c:zx()
(while
(setq fis (open "c:\\puncte.xyz" "a" ))
(setq pct (getpoint "\nSelectati punctul:" ))
(setq x (rtos (car pct) 2 3)
y (rtos (cadr pct) 2 3)
z (rtos (caddr pct) 2 3))
(setq nume (getstring T "\nNume punct?" ))
;;;(command "text" (list (+ 1.2 (car pct)) (+ 1.2 (cadr pct))) "0" nume)
(setq linie (strcat nume " " y " " x " " z))
(write-line linie fis)
(close fis)
);;;WHILE pentru selectie nula
);;;DEFUN
(princ "\nLansare cu ZX" )
(princ "\nSuspendare cu ENTER" )
Uneori, am avut de adus la unghiul zero (directia = East) mai multe texte de pe o plansa, pe care le scrisese altcineva la tot felul de unghiuri. Mi-a fost mai usor cu lispul de mai jos:
;;;ADUCE TEXTELE SELECTATE LA UNGHIUL 0 (ASSOC 50)
;;;se poate introduce comanda de mai jos pt. setare unitati
;;;(command "units" "2" "3" "3" "4" "0.0000" "Y" ) (graphscr)
(defun C:RT()
(setq a (entget(car(entsel "\nSelectati textul de rotit: " )))) ;;;selectam textul
(progn
(setq a (subst (cons 50 0) (assoc 50 a) a))
(entmod a))
(command "move" (cdr (car a)) "" ) ;;;de obicei trebuie si mutate dupa rotire
) ;;;DEFUN
(princ "\nLansare cu comanda RT" )
John Doe: multumim pentru programe!
Iti recomand o vizita la http://www.asmitools.com/Files/Programs.html unde gasesti solutii si idei interesante in acest domeniu.
_______________________________________
http://info-topograf.blogspot.ro/
Da, o sa ma uit. Ce am postat pana acum sunt chestiuni simple, le-am facut pentru mine si exact pentru ce-mi trebuia la un moment dat. Toate functioneaza, si sunt testate inainte de postare, merg cam pe orice AutoCAD pana la 2007 inclusiv, mai departe nu am. Am adaugat si comentarii, ca sa se poata modifica diverse chestiuni. Si nu sunt imbricate prea mult, tocmai ca sa fie mai usor de înteles.
O sa vina si lucruri mai complicate, dar sunt mai greu de explicat. Sa vedem daca e nevoie.
Sunt si pe Net o groaza de lispuri, dar nu toate merg, nu fac chiar ce vreau eu, nu pricep eu bine engleza sau nu s-a pierdut timpul cu explicatii la ele. Partea buna e ca sunt gratis.
cine ma ajuta cu un lisp, program de facut profile, nu vreau sa aud de profLT, si altele de genu pe care trebuie sa le platesc, ca sa fac cate un profil din an in pasti`.
Pana acum am mai incercat cateva programele, lispuri, dar fara rezultat.
Am mai auzit discutandu-se de ceva program PROF.exe, sau cam asa ceva, "merge" e bun de ceva ?, sau alta solutie, este binevenita.
Numai bine !
Prof.exe e sub DOS, merge binisor; iti trebuie un fisier <numepunct> <X> <Y> <Z> , îi spui prin ce puncte vrei profilul si poti exporta un DXF cu profilul. Spune-mi ce adresa de mail ai.
prof.exe e tot profLT dar e o versiune mai veche, sub dos. oricum e tot de Bujorel facuta, iti faci treaba cu el. daca te intereseaza da msg si rezolvam
_______________________________________
It's nice to be important, but is more important to be nice !
am rezolvat cu profilele, multumesc !
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Modificat de diagodose2009 (04-12-2009 21:18:55)
_______________________________________
http://we.tl/D8HOKFyTJ7
Un utilitar micut pentru schimbarea stilului textului. Merge sub orice AutoCAD, se poate adapta usor la nevoile fiecaruia. Probabil sunt multe altele asemenea, sper sa va fie de folos.
;;;MODIFICA STILUL TEXTULUI SELECTAT LA "ARIAL" , SI LE MUTA PE URMA.
;;;========definim nout stil ARIAL; merge si daca exista deja=======
(command "-style"
"Arial" ;;;numele stilului
"arial.ttf" ;;;numele fontului, cu extensie
0.00 ;;;height
1 ;;;width factor
0 ;;;obliquing angle
N ;;;backwards
N) ;;;upside-down
;;;========comanda propriu-zisa
(setq s_text '"Arial" )
(defun C:SX()
(setq a (entget(car(entsel "\nSelectati textul de modificat: " ))))
(progn
(setq a (subst (cons 7 s_text) (assoc 7 a) a))
(entmod a)
) ;;;de la PROGN
(command "move" (cdr (car a)) "" )
) ;;;DEFUN
(princ "\nLansare cu comanda SX" )
Utilitar care transforma cate una suprafetele scrise de TopoLT din "123.00mp" în "S=0.0123Ha" ; daca faceti parcelari cu TopoLT e destul de util. Nu am reusit sa configurez TopoLT sa faca singur asta.
;;;MODIFICA toate textele din "1000.00mp" in "S=0.1000Ha"
;;;Se selecteaza câte unul
(defun C:MD()
(setq a (entget(car(entsel))))
(setq txt (cdr (assoc 1 a))) ;;;assoc 1 = textul
(setq txt (atof txt))
(setq txt (/ txt 10000))
(setq supraf (rtos txt 2 4)) ;;;2=modul de transformare, 4=nr. zecimale
(setq tmod (strcat "S=" supraf "Ha" ))
(setq a (subst (cons 1 tmod) (assoc 1 a) a))
(entmod a)
)
(princ "\nLansare cu comanda MD" )
Si inca unul, daca vreti sa scrieti suprafata unui contur inchis sub forma "S=xxxmp", prin pick in interiorul conturului, alegeti punctul de start pt. text si unghiul de rotatie (cu stilul curent):
;;;Se selecteaza un contur, calculeaza aria lui
;;;si o scrie sub forma S=xxxmp
(defun C:A ()
(command "-boundary" "A" "I" "N" "" "" pause "" )
(command "area" "e" "last" ) ;;;calculam aria ei
(setq sup1 (getvar "area" )) ;;;si o extragem cu numele SUP1
(command "erase" "l" "" )
(setq sint (fix sup1))
(setq dif (- sup1 sint))
(if (>= dif 0.5) (setq sint (+ 1 sint)))
(setq rez (strcat "S=" (rtos sint 2 0) "mp" ))
(setq pct (getpoint "Punct start text:" ))
(command "text" pct "" pause rez "" )
);;;DEFUN
(princ "\nLansare cu comanda A" )
puneti topolt-ul aici bucata cu bucata?
Sunt aplicatii simple, facute de mine, postate in ideea ca pot fi de ajutor si altora uneori. Contin codul sursa cu comentarii, nu sunt imbricate prea tare, pentru a putea fi si modificate dupa nevoia fiecaruia.
john Doe, de ce nu te apuci de facut ceva mai complex daca tot te pricepi?
Reiau si aici ideea scrisa in topicul topolt. De ce nu face cineva un site cu scopul declarat de a construi un program cu contributia oricui vrea sa vina cu idei si experienta, un open source, unde un colectiv de baieti buni(am vrut sa spun destepti, dar acest cuvant a primit o conotatie pe care nu voiam sa o dau acestui cuvant) care sa adune si sa asambleze aceste idei intr-un program utilizabil.
Aplicatiile mai complexe nu sunt pe gustul tuturor, faci anumite treburi cu ele dar altele nu, si de obicei cam fiecare vrea altceva sau altfel. M-am obisnuit sa lucrez cu aplicatii relativ consacrate, iar ce nu fac ele automatizez eu. Cam asta e nivelul meu - sunt topograf de formatie, nu programator. Ca pot judeca logic si construi o aplicatie, asta e altceva.
Cred ca a construi un site pe tema propusa implica mai multe lucruri decat pare la prima vedere. Mai multi oameni o pot face, eu singur nu - ramân totusi deschis la propunerea asta. In plus, exista deja astfel de site-uri - ramane de vazut daca e mai util sa se deschida inca unul sau sa colaboram cu cele existente deja si cu oamenii de acolo.
Pana acum am vazut site-uri specifice pentru popularizarea unor programe, sau cum site-ul tau, pentru prelucrari directe de date, dar nu am vazut un site de colaborare(ca un fel de Wikipedia, dar pentru un program, nu pentru un dictionar, deci la o scara mult mai mica). Aceasta e ideia - hai sa facem toti un program care sa fie pe placul fiecaruia!
Oare putem sa ne inhamam la acesta sarcina? Efortul este mare... da' macar sa incercam!
Nu stiu daca chiar trebuie un site separat. Putem deschide pe acest forum un subiect dedicat.
Putem chiar sa incepem de aici:
Am facut o aplicatie care genereaza automat PAD-ul, nota de tarifare, calculul suprafetelor si anexele 1, 2, 5 pentru o documentatie de prima inscriere in CF. Caseta care trebuie completata arata ca mai jos, iar in afara de completarea ei mai trebuie trei pick-uri si gata tot:
325/236px 18.6KB
Urmeaza sa o completez cu generarea planului de incadrare in zona (asta cred ca o descurc singur), si cu generarea tabelului de miscare parcelara; deocamdata am facut doar un proiect de caseta ca mai jos, dar m-am cam blocat in idei. Aveti propuneri ?
421/239px 21.1KB
Foarte bine John Doe, automatizarea activitatii arata ca esti foarte activ si nu ti-e jena sa gandesti sau sa inovezi. Eu am ramas doar la stadiul de sabloane, dar la activitatea mea e bine si asa... Ce as fi vrut eu sa facem ar porni de la CP si datele pe care le punem acolo. Variabilele Cp-ului pot fi folosite in automatizare.Dar as fi vrut sa facem un program care sa aiba sectiune de calcule(prelucrari de masuratori, chiar daca sunt forte rar folosite-din pacate- cum are goguletz, daca nu ma insel), o sectiune de prelucrari grafice(cum e CadTools sau asemanatoare topolt si proflt), o sectiune juridica(cu toate legile, ordinele si mai stiu eu ce ne atinge direct si indirect), eventual o arhiva actualizata in permanenta cu rezultatele activitatii. Pot parea aiureli, dar daca am avea un astfel de program s-ar standardiza oarecum munca, ar fi unitara prezentarea la OCPI a lucrarilor si ce e mai important, ar eficientiza enorm activitatea noastra. Putem rade de o astfel de idee sau putem sa ne dam mana sa o realizam si cine stie, poate ca o va adopta chiar ANCPI si o va dezvolta! NU?
Inteleg ce vrei tu. Chestiunea cu CP-ul e o idee, si eu m-am tot gândit dar nu am aflat înca cum as putea introduce variabilele mele in program.
Sectiune de prelucrari masuratori: prea putin folosite, cere foarte multa munca, exista deja - deci nu are sens. Desi... parca vad ca daca voi fi obligat sa fac asa ceva, am s-o fac...
Baza de date legislativa: am facut deja vreo doua variante (in Access si Word), si nu mi-a folosit nici mie.
Prelucrari grafice: exista TopoLT si altele. Nici roata n-a fost reinventata, stii. Indiferent de numarul de spite.
Mai poti fi sigur de ceva: nimeni nu va lucra unitar decat daca va fi obligat. Iar pana acolo mai este. Si de obicei, pâna la Dumnezeu îti rup sfintii picioarele.
Scuze pentru pesimism; nu inseamna ca ma opresc aici.
Fiecare din sectiunile propuse exista.Nu vreau sa pun eu coada la cireasa!. Dar nu exista intr-n program GRATUIT. Cum ti-am spus, am sabloane pentru toate activitatile de editare a lucrarilor de cadastru, dar nu e un program care sa faca TOT. Sunt convins ca nu e usor si se poate incape cu ceea ce exista. Bujor are variabilele CP, deci se pot obtine. ANCPI are tot interesul sa ne ajute! Nu stiu daca si cere ceva pentru asta!
Baza de date legislative nu e mare scofala-o fereastra in care poate fi derulat un pdf e suficienta. Eu mereu consult 634 modificat cu 134, deasemenea L7 si D834 cand e cazul si regulementele ANCPI, tarife, etc.
As vrea ca la terminarea unei lucrari sa actualizez un desen dwg ce contine toate lucrarile cu planul realizat, cu puncte noi si vechi, eventual cu un link spre fisierul de masuratori sau folder-ul cu lucrarea. Si toate astea cu un click pe o iconita.
Mi-ar placea ca toate astea sa fie intr-un pachetel. Si pentru pachetelul acesta am pledat eu pana acum. Si ma opresc.
S-a mutat
334/580px 18.1KB
Modificat de diagodose2009 (10-01-2010 00:01:42)
_______________________________________
http://we.tl/D8HOKFyTJ7
John Doe "Am facut o aplicatie care genereaza automat PAD-ul, nota de tarifare, calculul suprafetelor si anexele 1, 2, 5 pentru o documentatie de prima inscriere in CF. Caseta care trebuie completata arata ca mai jos, iar in afara de completarea ei mai trebuie trei pick-uri si gata tot:"
Astepam cu interes aplicatii care sa ne usureza munca.
Spor la treaba si asteptam sa le postati ca sa le putem incerca si noi.
Da, nu am uitat si o sa ma tin de cuvânt.
Am constatat ca aplicatia includea o portiune de cod preluata de la altcineva, portiune pe care trebuie sa o rescriu, si apoi dupa aia o pot posta aici. In plus, vreau sa completez aplicatia ca sa scrie si tabelul de miscare parcelara iar asta imi da ceva de lucru.
Daca as sti ca nu se modifica regulamentele din nou, poate as avea mai mult chef de lucru...
Am avut de verificat suprafetele la mai multe parcele de pe un plan, si m-am saturat de selectat contururi, deschis si inchis caseta "properties" si Escape. Asa ca am scris câteva randuri de Lisp, si daca fac un click in interiorul unei parcele cu contur inchis imi afiseaza pe ecran o caseta de dialog in care scrie "S=1234mp". Caseta are un singur buton, OK. Nu modifica nimic in desen. Codul este:
;;;Se selecteaza un contur, calculeaza aria lui (rotunjita la intreg)
;;;si o zice omului pe ecran, intr-o caseta de alerta cat e aria
(defun C:A ()
(command "-boundary" "A" "I" "N" "" "" pause "" )
(command "area" "e" "last" ) ;;;calculam aria ei
(setq sup1 (getvar "area" )) ;;;si o extragem cu numele SUP1
(command "erase" "l" "" )
(setq sint (fix sup1))
(setq dif (- sup1 sint))
(if (>= dif 0.5) (setq sint (+ 1 sint)))
(setq rez (strcat "S=" (rtos sint 2 0) "mp" ))
(alert rez)
);;;DEFUN
(princ "\nLansare cu comanda A" )
Tastati A si Enter, si porneste. Daca nu va convine, schimbati A de dupa "defun" si porneste cu ce ati scris voi. Schimbati si textul de la ultima linie ca sa nu va incurcati mai tarziu.
Suprafata este rotunjita la intreg.
Pentru verificari rapide in Autocad de suprafete, lungimi laturi, perimetre etc va recomand si utilizarea BubbleCAD, o aplicatie gratuita ( http://www.bubblecad.com/en/bubble.htm ) - necesita doar inregistarea pe site.
Tinand cursorul mouse-ului peste elementul grafic (linie, polilinie, block) aveti afisate caracteristicile pe ecran. Se pot seta elementele si durata de afisare.
Modificat de advex (05-02-2010 09:54:30)
_______________________________________
http://info-topograf.blogspot.ro/
Misto chestia.
Am avut nevoie sa cotez mai multe parcele pe un plan, si am scris un Lisp care face asta. Conditia este sa fie un contur inchis. Aplicatia genereaza un fisier auxiliar numit "Cord.txt", unde scrie coordonatele punctelor de inflexiune ale conturului ultimei parcele cotate; am avut nevoie de asa ceva ca suport de date externe. Verificat pe AutoCAD 2000-2007.
Listez fisierul aici:
;;;Scrie pe desen lungimile laturilor unui contur inchis
(defun c:cote ()
(setq pct (getpoint "\nFaceti un click in interiorul parcelei: " ))
(setq htext (getreal "\nInaltime text: " ))
(setq dmin (getreal "\nDistanta minima care sa fie cotata, metri: " ))
(command "-boundary" pct "" )
(setq lent (entget (entlast)))
(command "area" "e" "last" ) ;;;calculam aria ei
(setq smas (getvar "area" ))
(setq smasfix (fix smas))
(setq dif (- smas smasfix))
(if (>= dif 0.5)(setq smas (+ 1 smasfix))(setq smas smasfix))
;;;stergem boundary
(command "erase" (entlast) "" )
;;;scriem coordonatele si nr. crt. in fisier
(setq ncor 0)
(setq cont 0)
(setq fis (open "Cord.txt" "w" ))
(while (setq entc (nth cont lent))
(setq cont (+ 1 cont))
(if (= 10 (car entc))(progn
(setq ncor (+ 1 ncor))
(write-line (itoa ncor) fis)
(write-line (rtos (cadr entc)) fis)
(write-line (rtos (caddr entc)) fis)
);;PROGN de la IF
);;; IF
);;WHILE
(close fis) ;;;inchidem fisierul de coordonate scris
;;;ncor=nr. de puncte
(setq fis (open "Cord.txt" "r" ))
;;;stocam x, y de la pct. nr. 1 ca ne trebuie
(read-line fis) ;;;pentru nr. pct., nu ne trebe la sfarsit
(setq x1 (distof (read-line fis))
y1 (distof (read-line fis)))
(setq xx1 x1)
(setq yy1 y1)
(setq cont 1)
(while (< cont ncor) ;;;ar trebui sa citeasca pana la ultimul punct, primul e citit deja
(setq cont (+ 1 cont))
(setq crt (read-line fis)) ;;;nr. punct, nu trebe
(setq x2 (distof (read-line fis)))
(setq y2 (distof (read-line fis)))
;;; x2y2 va fi citit din nou la urmatorul ciclu, deci se va pierde
;;; x, y anterioare se stocheaza cu numele x1, y1 si se folosesc ca atare in calcule
;;; x2, y2 = punctul din fata; x1, y1 = punctul din spate
(setq xm (/ (+ x2 x1) 2))
(setq ym (/ (+ y2 y1) 2))
(setq dx (- x2 x1))
(setq dy (- y2 y1))
(setq alfa (atan dy dx))
(setq rot (+ 200 (atof (angtos alfa))))
(setq pt1 (list x1 y1))
(setq pt2 (list x2 y2))
(setq dis (distance pt1 pt2))
;;;calculam offsetul textului fata de linie
(setq ofx (* 1 (cos alfa)))
(setq ofy (* 1 (sin alfa)))
;;;acum sa vedem scara, distanta si daca o punem, htext
(if (> dis dmin)(progn
(command "text" (list (+ ofx xm) (+ ofy ym)) htext rot ( strcat (rtos dis 2 2) "m" ))
(setq x1 x2)
(setq y1 y2)
));;;PROGN si IF de la verificare dist. minima
);;;WHILE de la citire fisier
(close fis)
;;;repetam toata povestea pentru segmentul dintre ultimul punct si primul
(setq x1 xx1)
(setq y1 yy1)
(setq xm (/ (+ x2 x1) 2))
(setq ym (/ (+ y2 y1) 2))
(setq dx (- x2 x1))
(setq dy (- y2 y1))
(setq alfa (atan dy dx))
(setq rot (atof (angtos alfa)))
(setq pt1 (list x1 y1))
(setq pt2 (list x2 y2))
(setq dis (distance pt1 pt2))
(if (> dis dmin)(progn
(command "text" (list xm ym) htext rot ( strcat (rtos dis 2 2) "m" ))
));;;PROGN si IF
);;;end defun
(alert "Lansare cu comanda COTE" )
Am mai facut un utilitar Lisp, pentru caroiaje. Cere scara si 2 puncte (puse oricum, face caroiaj intre ele). Sursa e cam lunga (vreo 100 de linii numai fisierul LSP, plus vreo 50 DCL-ul), nu stiu daca are sens sa postez aici. Daca e cineva interesat, sa spuna si ori le postez, ori le trimit pe mail. Arata ca mai jos; totul se pune pe un layer nou creat, nu sut blocuri sau grup ci doar linii si text. Revine la setarile OSNAP si la layerul de pe care s-a pornit.
194/219px 10.5KB
John Doe a scris:
Nu stiu daca chiar trebuie un site separat. Putem deschide pe acest forum un subiect dedicat. Putem chiar sa incepem de aici: Am facut o aplicatie care genereaza automat PAD-ul, nota de tarifare, calculul suprafetelor si anexele 1, 2, 5 pentru o documentatie de prima inscriere in CF. Caseta care trebuie completata arata ca mai jos, iar in afara de completarea ei mai trebuie trei pick-uri si gata tot: |
ma ajuti si pe mine cu chestia asta?
Ti-am trimis mail.
sunt si eu interesat de scripturile astea LISP, dar nu ai putea sa le uploadezi pe un site, sa le ia de acolo toti cei care sunt interesati ?!
O zi faina !
@kod: Ba da, dar e ceva mai complicat fiindca ar trebui sa le compilez intr-un singur fisier, care nu se mai poate modifica dupa cum are chef utilizatorul, iar unul dintre scopurile mele era tocmai sa faca cine ce vrea cu ele. Stiu cum era cand invatam eu Lisp, si cat mi-ar fi folosit asa ceva. Iar cine e chiar interesat se uita si aici. Daca vor fi prea multi, probabil asa am sa fac; deocamdata nici nu mai stiu o adresa unde se pot uploada ca mi s-a busit address book-ul.
Ti le trimit si tie. Spor !
Multumesc, mult ! Nu din rautate am intrebat daca le poti pune pe toate intr-un folder si sa-l uploadezi pe vre-un site gen:
www.megaupload.com
www.mediafire.com
www.netdrive.ws ...mai sunt si altele da nu-mi vin in minte acum.
Ci ideea era ca daca tot sunt mai multi interesati sa nu te deranjeze de fiecare data cu aceeasi rugaminte: "Poti sa mi le trimiti si mie ?
"
Toate cele bune !
@kod: Mi-am dat seama de ce ai zis sa le uploadez, nu-ti fa probleme. Mersi pentru linkuri.
Si inca ceva: se poate scrie fisierul CP direct din AutoCAD. Deschideti un fisier CP cu Notepad si o sa vedeti ca are o structura relativ simpla. Eu am reusit sa-l fac, dar mai e de lucru.
Da asa este practic un cod sursa .xml scris sub forma de tag-uri, se poate deschide/edita cu excel si/sau notepad. Desi nu stiu cine se apuca sa completeze linie cu linie decat sa completeze un tabel. Poate daca s-ar face un lisp in care sa-ti completezi informatiile in mod succesiv, eventual sa se automatizeze tot ce s-ar putea (gen suprafata, generare fisier dxf, salvare sub ext. cpxml...etc. ) stiu eu ce s-ar mai putea face, probabil multe altele, eu nu ma prea pricep la Lisp, cum am spus !
Numai bine !
Modificat de kod (09-03-2010 10:21:17)
Se Sterge
Modificat de diagodose2009 (05-05-2010 05:28:03)
_______________________________________
http://we.tl/D8HOKFyTJ7
Am fost unul din cei care au cistigat licitatia aia cu PLANURILE CADASTRALE. Am avut de facut citeva mii de CP-uri. Am folosit o aplicatie care le genera automat. Le-am predat la OCPI care le-a integrat in E-Terra 2 si nu am avut nici o problema de preluare.
@diagodose: nu te contrazic, poate sa fie si cum spui tu. Am verificat ce am facut eu prin toate metodele care mi-au dat prin cap, am corectat tot ce dadea eroare si acum astept sa vad ce spune si programul de la OCPI. Personal, nu as crede ca pentru fisierul CP ai nevoie de nu stiu ce hipergenerator XML dar pana la proba contrarie ma abtin.
@marian: felicitari.
va salut !
Un program/addon/lisp pentru autocad care sa-mi insereze usi/geamuri la relevee de genul descris in imagine stie cineva? ii multumesc anticipat
p.s. folosesc Autocad 2009
580/389px 23.2KB
_______________________________________
It's nice to be important, but is more important to be nice !
Cred ca mai usor ti-ar fi sa creezi blocuri (block) pentru usi, ferestre, etc. Dupa care le poti copia dintr-o plansa in alta.
Multa bafta!
_______________________________________
www.topo-online.ro
www.firmecadastru.ro
Am nevoie de urmatorul lucru cand inserez un patrulater in ACad.
comanda: "rectangle"
datele problemei: am 2 coordonate (Y colt stanga jos si X colt dreapta sus)
specific celelalte coordonate se vor determina automat prin intersectii de linii, orizontale si verticaleale.
intrebare: cum fac sa-mi deseneze chenarul (patrulaterul) ?
eu sa introduc doar cele 2 coordonate (atentie nu perechi de coordonate, doar Y colt stanga jos si X colt dreapta sus)
Vre-un lisp ceva, stiu sigur ca se poate.
Si alta intrebare, dupa ce am georeferentiat un raster cum il pot salva din AutoCAD ca si imagine *TIFF + word file (contine coordonatele in stereo `70) sau alt format *.JPG, *BMP , dar neaparat sa-mi salveze automat si fisierul *.TFW ce contine coordonatele !
kod a scris:
Am nevoie de urmatorul lucru cand inserez un patrulater in ACad. comanda: "rectangle" datele problemei: am 2 coordonate (Y colt stanga jos si X colt dreapta sus) specific celelalte coordonate se vor determina automat prin intersectii de linii, orizontale si verticaleale. intrebare: cum fac sa-mi deseneze chenarul (patrulaterul) ? eu sa introduc doar cele 2 coordonate (atentie nu perechi de coordonate, doar Y colt stanga jos si X colt dreapta sus) Vre-un lisp ceva, stiu sigur ca se poate.
Si alta intrebare, dupa ce am georeferentiat un raster cum il pot salva din AutoCAD ca si imagine *TIFF + word file (contine coordonatele in stereo `70) sau alt format *.JPG, *BMP , dar neaparat sa-mi salveze automat si fisierul *.TFW ce contine coordonatele ! |
1. Nu cred ca este suficient sa introduci doar aceste valori pentru a genera patrulaterul dorit de tine.
De exemplu:
2. Poti utiliza un program gratuit pentru generare fisier tfw, jpw (a mai fost semnalat pe forum)
Raster Manager: http://www.abcautocad.it/software_autoc ... er_AutoCAD
_______________________________________
http://info-topograf.blogspot.ro/
mda, sa raspund:
1. advex uite cum arata un "coord. file" ce contine coordonatele (asa cum am spus anterior Y colt stanga jos, X colt dreapta sus)
format *.twf
0.500000000000000
0.000000000000000
0.000000000000000
-0.500000000000000
417080.250000000000000
553241.250000000000000
se poate si fara atatea zecimale, dar asta e:
linia 1 si 4 reprezinta precizia unui pixel exprimata in m (0,5 m) iar ultimele 2 linii : linia 5, respectiv 6 cele 2 coord. Y colt stanga jos, X colt dreapta sus
liniile 2 si 3 nu stiu exact ce sunt, dar oricum sunt 0 "zero" tot timpul.
Presupun ca lungimile laturilor vor fi date de aceasta scara (0,5 m/pixel in cazul de fata) si asa se face georeferentierea 
2. mi-am dat seama ca merge si daca schimb extensia "word file-urilor" ce contin coordonate: si anume: *.twf pt. *TIFF-uri cu *.jgw pt. *.JPG-uri
desi la unele extensi gen *.ers trebuiesc extrase, dar nu e complicat
kod:
Fata de enuntul initial, acum sunt altele datele problemei. Este o diferenta intre a genera un patrulater stiind x, y la colturi si fisierele world file.
Explicatia ta privind caracteristicile fisierului este incompleta. Vezi articol: http://en.wikipedia.org/wiki/World_file
Pentru a genera patrulaterul dorit de tine, coordonatele x,y ale colturilor sunt extrase din fisierul world dar si din foto (transformare afina).
Pentru georeferentiere planuri topo, ortofotoplanuri la care aveti si fisierele world asociate va recomand un fisier autolisp. El este disponibil pe http://www.theswamp.org/index.php?topic=8904.0 - autor ronjonp.
;;;Reads world tiff file (.tfw) to scale and place image correctly in autocad.
;;;First insert all tiff images into drawing at whatever scale and insertion point.
;;;If the TFW exists in same directory and is named the same as the image selected,
;;;it will automatically be found and the image will be scaled and placed. If it is
;;;not in the same directory the browser. Currently the routine does not
;;;support image rotation and disregards lines 2 and 3 of the TFW file.
(defun c:tfw (/ file_select line1 line2 line3 line4
line5 line6 ent obj hgt wdth bbox
tfwlist name llc urc ulc pt
)
(vl-load-com)
;MP'S ROUTINE________________________________
(defun FileToList (filename / handle result)
(cond
((and
(eq 'str (type filename))
(setq handle (open filename "r"))
)
(while (setq stream (read-line handle))
(setq result
(cons (vl-string-trim
" "
stream
)
result
)
)
)
(close handle)
(reverse result)
)
)
)
;____________________________________________
(defun getboundingbox (obj / minpt maxpt llc urc)
(vla-getboundingbox obj 'minpt 'maxpt)
(mapcar 'vlax-safearray->list (list minpt maxpt))
(setq llc (vlax-safearray->list minpt)
urc (vlax-safearray->list maxpt)
)
(list llc urc)
)
(while
(= ent nil)
(setq ent (car (entsel "\n Select Image: ")))
(if (= ent nil)
(alert "\n You lush, you missed your pick...")
)
)
(setq obj (vlax-ename->vla-object ent)
name (vla-get-name Obj)
hgt (vla-get-height Obj)
wdth (vla-get-width Obj)
)
(if (findfile (strcat (getvar 'dwgprefix) name ".tfw"))
(setq file_select (strcat (getvar 'dwgprefix) name ".tfw"))
(progn
(setq file_select
(getfiled (strcat "Select TFW File to read for image " name)
(strcat (getvar 'dwgprefix) name)
"tfw"
8
)
)
(if (findfile (strcat (getvar 'dwgprefix) file_select))
(setq file_select (strcat (getvar 'dwgprefix) file_select))
)
)
)
(setq tfwlist (FileToList file_select)
line1 (nth 0 tfwlist)
line2 (nth 1 tfwlist)
line3 (nth 2 tfwlist)
line4 (nth 3 tfwlist)
line5 (nth 4 tfwlist)
line6 (nth 5 tfwlist)
)
(vla-put-imageheight obj (* hgt (atof line1)))
(vla-put-imagewidth obj (* wdth (atof line1)))
(setq
bbox (getboundingbox obj)
llc (car bbox)
urc (cadr bbox)
ulc (list (car llc) (cadr urc))
)
(setq pt (list (atof line5) (atof line6)))
(vla-move obj (vlax-3d-point ulc) (vlax-3d-point pt))
(alert (strcat "DATA USED FROM FILE: " file_select "\n"
"\n" line1 "\n" line2
"\n" line3 "\n" line4
"\n" line5 "\n" line6
)
)
)
Modificat de advex (17-03-2010 07:13:37)
_______________________________________
http://info-topograf.blogspot.ro/
Asa este, ai dreptate advex, la primul post neintentionat,am uitat sa specific de celelalte valori care intra la un "word file" pe care le-am explicat in postul precedent. si da practic liniile 2 si 3 reprezinta, rotatia pe axele x, respectiv y (sau cum ii spui tu, afinitatea).
1.50000000000000 (X scale, pixel size in meters)
0.00000000000000 (affinity - Y-scale in X dir.)
0.00000000000000 (affinity - X-scale in Y dir.)
-1.50000000000000 (Y scale)
1934001.50000000000000 (X coordinate of the upper left pixel)
1187698.50000000000000 (Y coordinate of the upper left pixel)
si uite inca un Lisp, foarte bun de georeferentiere automata cand ai "word file-ul" merge pt. orice tip raster cu word file-ul corespunzator: *.Tiff, *.Jpeg, *.Bmp, *.Png etc.
http://www.xanadu.cz/dl/GeoRefImg.zip
cum procedati:
1. se copiaza GeoRefImg.VLX in subdirectorul "Support" din directorul Autocad (nu cred ca merge cu progecad, sau zwcad - nu am incercat)
2. In autocad se incarca aplicatia cu comanda: "APPLOAD"
3. se introduce un raster oriunde pe ecran (de ex aaa.tiff si aaa.tfw sa fie in acelasi director)
4. cu comanda "GeoRefImg" (fara ghilimele) se selecteaza conturul imaginii inserate si automat o va pozitiona pe coordonatele bune ! 
Numai bine !
Modificat de kod (17-03-2010 07:39:40)
Cu asta cred ca s-au rezolvat multe probleme, dar a mai ramas una: ce se poate face cu imaginile SID ? AutoCAD-ul obisnuit (adica fara Raster) nu le poate insera fiindca nu recunoaste formatul, si se pare ca nu e chiar simplu de schimbat asta.
John Doe a scris:
Cu asta cred ca s-au rezolvat multe probleme, dar a mai ramas una: ce se poate face cu imaginile SID ? AutoCAD-ul obisnuit (adica fara Raster) nu le poate insera fiindca nu recunoaste formatul, si se pare ca nu e chiar simplu de schimbat asta. |
Pentru imagini MrSID in AutoCAD ai incercat sa intalezi Raster Design Object Enabler?
detalii: http://usa.autodesk.com/adsk/servlet/ps ... ID=9240617
_______________________________________
http://info-topograf.blogspot.ro/
exista sigur si pt. asta solutie si anume:
descarci programul acesta (practic este un plug -in care se instaleaza pt. Internet Explorer - nu va recomand IE, dar si pt. FireFox- recomand cu caldura)
http://www.lizardtech.com/download/down ... _setup.exe
Il instalati si....
-desi am mai zis asta pe undeva 
kod a scris:
revin cu ultima versiune "up to date" a celui mai bun, sigur si rapid browser din lume, Mozilla firefox v. 3.5.2 editie portabila dedicata in mod exclusiv topografilor de pe acest forum si nu numai. Are in componenta lui cateva extensii si plugin-uri f. utile navigarii in siguranta pe net, plus daca aveti ortofotoplanuri cu extensia *.SID le puteti deschide direct din browser, sau mai usor drag`n`drop fiser.SID in fereastra de mozilla firefox + alte surprize placute !
il puteti downloada de aici: http://www.megaupload.com/?d=33UB6VZ6
se dezarhiveaza cu 7-zip http://topograf.3xforum.ro/redir.php?ht ... ight_click ....... |
parca pe aici daca nu ma insel http://topograf.3xforum.ro/post/887/3/A ... _PROGRAM_/
1. dupa care iei frumos fisierul *.SID si-l tragi peste fereastra browserului => *.SID-ul gata georeferentiat pe coordonate
2. iti alegi o zona interesata unde ai ridicarea ce vrei sa o suprapui
3. cu clik dreapta ai multe obtiuni ("show coordinate info, save aS.. etc.)
4. dai save as.. si il salvezi ca si Tiff + Word File
5. il incarci in autocad ca raster (fisierul nou salvat de ex. ridicare.tiff + ridicare.tfw)
6. il georeferentiezi automat cu "GeoRefImg.VLX"
7. ...dai o bere cand ne intalnim 
8. O mica precizare, la firefox-ul ala portabil din link-ul de mai sus, nu mai trebuie instalat plug-in-ul esta gata instalat 
O zi faina !
Il aveam si eu, dar mi-am reinstalat AutoCAD-ul si am uitat de el. Acum merge, si "GeoRefImg" chiar functioneaza. Mersi.
Am uitat sa atasez si un screen sut 
581/465px 70KB
Modificat de kod (17-03-2010 09:22:56)
Daca tot discutam despre georeferentiere, ANCPI a lansat de curand un ordin privind aprobarea Specificatiilor tehnice pentru scanarea si georeferentierea planurilor vechi de carte funciara.
http://www.ancpi.ro/images/legislatie/Ordin_78.pdf
Modificat de advex (17-03-2010 15:13:32)
_______________________________________
http://info-topograf.blogspot.ro/
Am ajuns si la proba contrarie de mai sus: am câteva zeci de fisiere CP (adica *.cpxml) facute automat si receptionate de OCPI fara nici o problema. Deci se pot face si asa.
Message empty
552/584px 46KB
Modificat de diagodose2009 (29-08-2010 15:11:24)
_______________________________________
http://we.tl/D8HOKFyTJ7
Un lisp pentru generarea unui inventar de coordonate polare?
Am numai pentru coordonate plane.
Pentru cele polare are TopoLT ceva de genul, la "Coordonate -> Calculeaza radiate".
Anul asta n-a mai intrat nimeni aici?!
Programez si eu sub autolisp&DCL .Poate va ajuta unele dintre micile mele realizari.
DAN.ARBA a scris:
Anul asta n-a mai intrat nimeni aici?! Programez si eu sub autolisp&DCL .Poate va ajuta unele dintre micile mele realizari. |
Asteptam cu mare interes, bun venit in clubul omenilor...hopa, adica topografilor
Daca te uiti la datele postarilor, vezi ca s-a intrat si anul asta pe-aici. Pe urma, chiar numai sectiunea asta are 5 pagini acum, deci e ceva. Mai sunt si altele pe aceeasi tema, deci exista si interes.
Bun venit, si asteptam sa ne prezinti aplicatiile tale.
Stim ca autocadul nu are comanda de afisare arie pe un contur (sau polilinii deschise) in mediul de lucru ( ma rog, stie sa calculeze ariile dar nu sa le afiseze).In momentul in care ai nevoie sa indici pe desen aceste valori, e foarte util scriptul pe care l-am realizat. E destul de simplu ,dar foarte util ,credeti-ma!
Aveti posibilitatea sa scalati textul . Modificati valoarea "dimscale <1>" daca e necesar. IN plus, se repeta nelimitat pana la anularea comenzii.
Pentru cei necunostatori, scrieti in prompterul de comenzi al autocadului comanda
_appload si incarcati aplicatia de mai jos pe care ati salvat-o in prealabil cu ajutorul notpad-ului in format " .lsp " :
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; script autolisp realizat de Dan Arba; ;;;
;;; adresa email: E-mail ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:arie ()
(setq mag (getvar "osmode"))
(setvar "osmode" 0)
(setvar "snapmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(command "_undo" "begin")
(setq ddi (getvar "dimscale"))
(setq dd (getreal (strcat "\n dimscale <" (rtos ddi) ">" )))
(cond ((= dd nil) (setvar "dimscale" ddi))
((/= dd nil)(setvar "dimscale" dd))
)
(while (not nil) (aria))
(setvar "osmode" mag)
(command "undo" "end")
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun aria ()
(setq mag (getvar "osmode"))
(setvar "osmode" 0)
(setvar "snapmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(command "_undo" "begin")
(setvar "osmode" 513)
(while
(not(and (not(prompt "\n Selectati un contur!")) ;;;
(setq ob (ssget (setq p(getpoint)) '((0 . "lwpolyline,circle,ellipse,polyline,spline"))))
)
)
)
(redraw (ssname ob 0) 3)
(command "area" "o" ob)
(setvar "osmode" 0)
(setq ar (rtos (getvar "area") 2 3))
(setvar "dimldrblk" "DotSmall")
(command "leader" p pause "" (strcat "S= " ar " mp") "" )
(redraw (ssname ob 0) 4)
(setvar "osmode" mag)
(command "undo" "end")
)
;;;; gata prog arie
;;;; se lanseaza in executie la comanda ARIE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Modificat de DAN.ARBA (30-10-2010 14:26:15)
Pentru desenarea unui triunghi oarecare cand se cunosc doar laturile triunghiului:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; script autolisp realizat de Dan Arba; ;;;
;;; adresa email: E-mail ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:trio ()
(setq mag (getvar "osmode"))
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq D1 (getdist "\nIntroduceti latura AB:")
D2 (getdist "\nIntroduceti latura BC:")
D3 (getdist "\nIntroduceti latura AC:"))
(if (and (< (abs (- D1 D2)) D3) (< D3 (+ D1 D2))
(< (abs (- D1 D3)) D2) (< D2 (+ D1 D3))
(< (abs (- D2 D3)) D1) (< D1 (+ D2 D3)))
(PROGN (setq A (getpoint "\nPrecizati coltul A al triunghiului:")
B (list (+ D1 (car A)) (cadr A))
L (/ (- (expt D3 2) (+ (expt D1 2) (expt D2 2))) (* 2 D1))
H (sqrt (- (expt D2 2) (expt L 2)))
C (list (+ L (car B)) (+ H (cadr A))))
(cond ((> (car B) (car C))
(setq intBC (list (car B) (cadr C))))
((> (car C) (car B))
(setq intBC (list (car C) (cadr C))))
((equal (car B) (car C))
(setq intBC (list (car B) (cadr C))))
)
(command "_zoom" "window" a intBC)
(command "pline" A B C "c" "")
(colturi AAA BBB CCC D1 D2 D3 notA notB notC)
)
(alert (strcat "\nNu este indeplinita conditia de existenta al triunghiului!"
"\n A se vedea conditia lui Herron!"))
)
(setvar "osmode" mag)
)
(defun colturi (AAA BBB CCC D1 D2 D3 notA notB notC)
(setq MINIM (min D1 D2 D3))
(setq ZECIMEDEMINIM (/ MINIM 10))
(setq notA (getstring T "\nColtul 1 al triunghiului:"))
(setq notB (getstring T "\nColtul 2 al triunghiului:"))
(setq notC (getstring T "\nColtul 3 al triunghiului:"))
(setq AAA (list (- (car A) ZECIMEDEMINIM) (cadr A)))
(setq BBB (list (+ (car B) ZECIMEDEMINIM) (cadr B)))
(setq CCC (list (car C) (+ ZECIMEDEMINIM (cadr C))))
(command "text" AAA ZECIMEDEMINIM 0 notA "")
(setq ob1 (ssget "l"))
(command "text" BBB ZECIMEDEMINIM 0 notB "")
(setq ob2 (ssget "l"))
(command "text" CCC ZECIMEDEMINIM 0 notC "")
(setq ob3 (ssget "l"))
(command "_zoom" "o" ob1 ob2 ob3 "")
)
Modificat de DAN.ARBA (30-10-2010 22:22:49)
daca e cineva interesat - am foarte multe scripturi ,insa destule dintre ele nu sunt bine puse la punct , le-am scris in graba in functie de ceea ce aveam de lucru in acel moment, dar se pot folosi ,chiar daca nu sunt foarte clar definite . Cel mai important pentru voi topografii (corectat la observatia lui diagodose2009) cred ca e importul si exportul de puncte. Cand vine vorba de puncte, am intalnit atatea situatii cati topografi ; unii aveau punctele in blocuri cu atribute ,altii in format text , altele desi aveau in atribut si cote ele erau inserate doar in plan ... sau unele care nu aveau nici macar elevatia atasata(indicata). Pentru aceste situatii a trebuit sa adaptez diverse scripturi pentru a le aduce la un model comun de lucru.
Exemplu mai concret :
Ridicare puncte podete . Desi erau inscrise cotele , ele erau situate in plan ,dar deja fiind unite intre ele conform situatiei din teren , cele mai multe manual (mentionez ca era vorba de multe poduri si podete) nu mai era rentabil sa le faci din nou ca sa fie 3D. Asa ca in autolisp am reusit sa le remodelez fortat 3D fara sa se piarda toate trasarile dintre ele si nici straturile sau tipul de linie.
Modificat de DAN.ARBA (06-11-2010 23:42:28)
Va mai dau unul frumusel pentru selectie filtrata . Land Desktop are implementata comanda pentru asta, dar autocadul nu prea (adica are ceva ,dar e mai pretentios . ma refer la quic select):
Aici postez interfata de dialog. Trebuie salvata cu numele " sssdcl.dcl " undeva unde autocadul are deja facuta o cale (un path) ,de pilda direct in " C:\Program Files\AutoCAD 2009 " ... sau ,ma rog, ce autocad folositi.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;-----------------------------------------------------------------;;;
;;;---DCL realizat de : Dan Arba------------------------;;;
;;;--- adresa email: E-mail ------------------------;;;
;;;-----------------------------------------------------------------;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Executa selectie similara pe un sector rectangular sau poligonal;;
;;; indicat la alegere printr-un patrulater sau printr=un poligon ;;
;;; deschis.
;;; Are si otpiunea pe intreg spatiul model ,atunci nefiind necesara;;
;;; indicarea zonei.
;;; Cauta obiectele dupa strat si tip de entitate.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
sssdcl : dialog {
label = "selectie similara " ;
: column {
: row {
: spacer {
width = 7;
//height = 1;
}
: text {
key = "t5" ;
value = "Includeti toate elementele selectate? " ;
width = 35 ;
}
}
: boxed_column {
label = "tip selectie" ;
: radio_column {
key = "radios";
: radio_button {
label = "retineti toate obiectele";
key = "full";
value = "1";
}
: radio_button {
label = "doar zona selectata";
key = "selectare";
value = "0";
}
}
}
: boxed_column {
label = "limite" ;
: row {
: text {
key = "t1";
value = "selectati o zona de cautare";
width = 24;
}
: button {
key = "rectangular";
label = "rectangular";
width = 1;
height = 1;
is_default = false;
}
}
: row {
: text {
key = "t2";
value = "tot spatiul model";
width = 23;
}
: button {
key = "nelimitat";
label = " Nelimitat ";
width = 1;
height = 1;
is_default = true;
is_cancel = true;
}
}
: row {
: text {
key = "t7";
value = "Poligonal (pt. a termina apasati click dreapta)";
width = 35;
}
: button {
key = "poligonal";
label = " poligonal ";
width = 1;
height = 1;
is_default = false;
is_cancel = true;
}
}
}
: row {
: spacer {
width = 10;
//height = 1;
}
: button {
key = "cancel";
label = " Cancel ";
is_default = false;
width = 8;
height = 1 ;
is_cancel = true;
}
: spacer {
width = 10;
//height = 1;
}
}
}
}
//pentru sss_dcl_final , face selectie filtrata cu fereastra de dialog
Modificat de DAN.ARBA (01-08-2011 15:00:50)
;;;Iar acesta functioneaza doar cu cel postat mia sus (sssdcl.dcl):
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;-----------------------------------------------------------------;;;
;;;---script autolisp realizat de : Dan Arba------------------------;;;
;;;---adresa email: E-mail ------------------------;;;
;;;-----------------------------------------------------------------;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Executa selectie similara pe un sector rectangular sau poligonal;;
;;; indicat la alegere printr-un patrulater sau printr=un poligon ;;
;;; deschis.
;;; Are si otpiunea pe intreg spatiul model ,atunci nefiind necesara;;
;;; indicarea zonei.
;;; Cauta obiectele dupa strat si tip de entitate ( o sa mai adaug in viitor si lista de optiuni pentru filtre)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; mai jos ultima versiune revizuita ( am corectat si partea cu selectia poligonala)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN c:sss ()
(setq mag (getvar "osmode"))
(setvar "osmode" 0)
(setvar "snapmode" 0)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq obiecte (ssget "_I")) ;;;------------------- trebuie pus inaintea oricarei "command" ,altfel ;se debifeaza
;;(command "undo" "begin")
;;;--- daca nu avem selectat anterior nici un obiect selectam acum
(if (equal obiecte nil)
(setq obiecte (ssget)))
(sssetfirst obiecte obiecte)
;;;--- gata selectare anterioara
;;--------resetam variabilele
(setq nume nil lung nil i nil nume nil strat nil lisnume nil lisstrat nil lfn nil lfs nil LUNGLISNUME NIL numej nil nume-strat nil
j nil k nil lista_filtre nil numejj nil lista_prefinala nil numel nil listal nil fil1 nil filtre nil fil nil lunglf nil p nil li nil ;;; aici sunt si elemente in plus aparute de la multiple incercari pe care nu le-am mai sters ;ulterior
sector nil p1 nil p2 nil punct nil poligon nil sector nil elemente nil )
(sssetfirst nil obiecte)
(setq lung (sslength obiecte)
i 0
)
;;---intocmire lista NUME
(while (<= i (- lung 1))
(setq nume (assoc 0 (entget (ssname obiecte i))))
(if (= (member nume lisnume) nil)
(setq lisnume (append (list nume) lisnume))
)
(setq i (1+ i))
)
(setq lunglisnume(length lisnume)
j 0
)
;;---gata lista cu (0 . "nume")
;;---intocmire lista cu straturi pentru fiecare nume in parte
(while (<= j (- lunglisnume 1))
(setq numej (list(nth j lisnume))
k 0
)
(while (<= k (- lung 1))
(if (and (equal (list(assoc 0 (entget(ssname obiecte k)))) numej)
(equal (member (cons 8 (cdr(assoc 8 (entget(ssname obiecte k))))) numejj) nil)
)
(setq numejj (append(list(assoc 8 (entget(ssname obiecte k)))) numejj)
k (1+ k)
)
(setq k (1+ k))
)
(princ)
)
(setq lista_prefinala (append numej numejj)
lista_filtre (append lista_prefinala lista_filtre)
numejj nil
)
(setq j (1+ j))
)
(setq lisnume(reverse lisnume))
;;;---gata lista cu straturi pentur fiecare nume in parte
;;;---prelucrare lista finala pentru selectia filtrata
(setq lunglf (length lista_filtre)
p 0
q 0
FILTRE lista_filtre
)
;;;;;;;;;;;;;;;;;;;;
;;; DEOARECE AVEM j LISTE CU NUME,O SA REPETAM DE j ORI ,PENTRU FIECARE NUME IN PARTE
(setq li5 (list(cons -4 "or>")))
(repeat j
(setq li (list (nth q lisnume)))
(setq p (1+ p)) ;;;;;;;;;;;; il incrementam cu 1 ca ;sa nu se opreasca pe (0 . "nume")
(while (equal (car(nth p lista_filtre)) (read "8"))
(setq li (append (list(nth p lista_filtre)) li))
(setq p (1+ p))
)
;;;--- trebuie sa transformam cdr-ul din (8 . "strat") in "stringuri" unite prin "," intre ele daca ;sunt mai multe
(progn
(setq r 0
lungli (length li)
li2 ""
)
(while (= (car(nth r li)) 8)
(setq li2 (strcat (cdr (nth r li)) "," li2))
(setq r (1+ r))
)
(setq li3 (cons 8 li2))
)
;;;--- gata transformare straturi in sir de caractere
(setq q (1+ q)
li4 (list (cons -4 "<and") (last li) li3 (cons -4 "and>"))
li5 (append li4 li5)
))
(setq li6 (append (list (cons -4 "<or")) li5))
;;;--- gata lista intocmita pentru ssget
;;------------------------------stabilirea zonei de cautare (limitat sau nelimitat)-----------------
;;(initget "R r N n P p ")
;(setq sector (getkword "\n [Sector/Nelimitat]: ?"))
;;;;;;;;;;;;;-----------------------------fereastra dialog DCL---------------------
(setq dcl_id (load_dialog "sssdcl.dcl"))
(if (not (new_dialog "sssdcl" dcl_id) ) (exit))
(action_tile "rectangular" "(setq ddiag 1)(saveVars)(done_dialog)")
(action_tile "nelimitat" "(setq ddiag 2)(done_dialog)")
(action_tile "poligonal" "(setq ddiag 4)(saveVars)(done_dialog)")
(action_tile "cancel" "(setq ddiag 3)(done_dialog)")
(start_dialog)
(unload_dialog dcl_id)
(cond ((= ddiag 1) (setq sector "R")) ;;---sector rectangular
((= ddiag 2) (setq sector "N")) ;;---sector nelimitat
((= ddiag 4) (setq sector "P")) ;;---sector poligonal
((= ddiag 3) (setq elemente nil))
)
;;;;;;;;;;;;;-----------------------------gata fereastra dialog DCL---------------------
(cond ((equal sector "R")
(progn (setq p2(getcorner (setq p1(getpoint "\nPunctul p1:")) "\nPunctul p2:")
elemente (ssget "w" p1 p2 li6)
)
))
((equal sector "P")
(rlf) ;;;regen-line-false + linie elastica
(setq elemente (ssget "wp" poligon li6))
)
((= sector "N") (progn (setq elemente (ssget "x" li6))(sssetfirst nil elemente)))
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(setq afis1 (strcat "\n S-au adaugat " (itoa (sslength elemente)) " entitati")
afis2 "\n Asteptati cateva secunde dupa ce apasati OK !")
(if (> (sslength elemente) 100)
(alert (strcat afis1 afis2))
(alert afis1)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;(command "_undo" "end")
;;(command "redraw" )
(cond ((= radio1 1)
(progn
(setq h 0)
(repeat (sslength obiecte)
(setq elemente(ssadd (ssname obiecte h) elemente)
h (+ h 1))
)
(sssetfirst nil elemente)))
((= radio2 1)(sssetfirst nil elemente))
)
(setvar "osmode" mag)
)
;;;--------------------------gata program selectie filtrata---------------------------------------
;;;;;;;;;;;;;; determinare prin "click pe radio" daca se retin toate obiectele,adica si cele initial ;selectate daca sunt inafara zonei de selectie
(defun saveVars()
(setq radio1(atoi(get_tile "full")))
(setq radio2(atoi(get_tile "selectare")))
)
;;;;;;;;;;;;;;gata determinare conditie "radio selectie"
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mai jos alcatuirea poligonului de selectie
(defun gr ( ) ;;;grdraw-repeat - afiseaza continuu liniile false ale poligonului
(setq jj 0)
(setq lungime2 (length poligon))
(if (cdr poligon)
(repeat (- lungime2 1)
(grdraw (nth jj poligon) (nth (+ jj 1) poligon) 3 1)
(setq jj (+ 1 jj))
)
)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(DEFUN rlf () ;(REGEN-LINE-FALSE)
(setq punct nil poligon nil)
(setq punct (getpoint "start poligon")
poligon (append (list punct) poligon)
)
(while (/= (car (setq pp1(grread t 1))) 25)
(cond ((= (car pp1) 5)
(redraw)
(gr)
(grdraw punct (cadr pp1) 2 1)
(grdraw (last poligon) (cadr pp1) 2 1)
)
((= (car pp1) 3)
(gr)
(setq punct (cadr pp1)
poligon (append (list punct) poligon)
)
(grdraw (last poligon) (car poligon) 2 1)
)
)
)
)
Modificat de DAN.ARBA (01-08-2011 15:05:19)
E ok acum. Am corectat si partea de la poligonal (mai sus varianta revizuita).
"Aveti posibilitatea de-a retine si obiectele deja selectate (chiar daca sunt de de diferite categori ) sau doar pe cele din sectorul indicat . La varianta POLIGONAL mai trebuie sa lucrez ; nu dati zoom in timp ce trasati zona de selectie! Le-am scris pe baza comenzilor de "grredraw" si dispar liniile la regen.
"
581/286px 26.2KB
Modificat de DAN.ARBA (01-08-2011 15:06:44)
Salut sunt nou pe aici , adica de urmarit va urmaresc de vreo 2-3 ani dar e prima data cand scriu
. John Doe as dori si eu cateva aplicatii si lisp uri. sunt interesante si cred ca ma vor ajuta. Deasemenea as fi interesat de aplicatia lui Marian de generare cp automata. ms anticipat
Chestie de gusturi... eu folosesc Qselect si merge destul de bine.
Referitor la metodele topografilor (nu tipografilor, Dane!): este un compromis intre ceea ce poate individul, ce i se cere si ce are la dispozitie. Si ce e mai ieftin. Nu intotdeauna e si solutia cea mai simpla, dar daca functioneaza...
Uneori ni se cere si un fel de carnet de teren care sa contina distante, orientari, etc. , care seamana cu fisierul IDX dar nu e intotdeauna usor de obtinut. Postez mai jos o aplicatie LISP care poate ajuta; dati "paste" la cod intr-un fisier text si schimbati extensia fisierului in LSP si se poate folosi.
Code:
;;;----------------------CARNET DE TEREN---------------------- ;;;trebuie sa avem pe plan polilinii si punctele de statie si de orientare - entitati POINT, asa s-a setat OSMODE ;;;Genereaza fisierul CARNET.csv in forma: [PS] [PV] [X] [Y] [Dx] [Dy] [Dist redusa] [Orientare] , pentru toate vertexurile poliliniilor din desen
(command "units" "2" "3" "3" "4" "0.0000" "N") (graphscr)
(defun C:CARNET () (setq msel (ssget "X" (list (cons 0 "LWPOLYLINE")))) (setq lng (sslength msel)) (setq index 0) (setq ncor (getint "\nNumerotare puncte începând cu <100>: ")) (if (= nil ncor)(setq ncor 100)) (setq des "q") (while (AND (/= des "y")(/= des "Y")(/= des "n")(/= des "N")(/= des "")) (setq des (getstring "\nScriem numarul punctelor pe desen? Yes/No <Y>:")) );;;while (if (= des "")(setq des "Y")) (setq des (strcase des)) (setq fis (open "Fiscord.txt" "w"));;;---asta e temporar, va fi sters la sfarsit
(while (< index lng) (setq nent (ssname msel index)) (setq index (+ 1 index)) (setq lent (entget nent)) (setq cont 0);;;numar de ordine al componentelor entitatii-lista, si daca da de codul de grup 10 extrage coordonatele (while (setq entc (nth cont lent)) (setq cont (+ 1 cont)) (if (= 10 (car entc))(progn (setq ncor (+ 1 ncor)) (write-line (itoa ncor) fis) (setq x (cadr entc)) (write-line (rtos x 2 3) fis) (setq y (caddr entc)) (write-line (rtos y 2 3) fis) (if (= des "Y")(command "text" (list (+ 1 x) (+ 1 y)) 3 0 ncor)) ));;PROGN si IF );;WHILE pe fiecare entitate );;;WHILE de la index entitati (close fis)
;;;------------------Acum avem fisierul de coordonate, il citim si facem carnetul de teren
(setvar "osmode" 8);;;------------pentru "Node" (setq ps (getpoint "\nSELECTATI PUNCTUL DE STATIE:")) (setq nps (getstring "\nNUMAR PUNCT STATIE: ")) (setq po (getpoint "\nSELECTATI PUNCTUL DE ORIENTARE:")) (setq npo (getstring "\nNUMAR PUNCT DE ORIENTARE: ")) (setq ys (nth 0 ps)) (setq xs (nth 1 ps)) (setq yo (nth 0 po)) (setq xo (nth 1 po)) (setq dx (- xo xs));;;---real (setq dy (- yo ys));;;---real (setq dist (distance ps po));;;---real (setq orient (angle ps po)) (setq orient (angtos orient 2 4));;;---string (setq orient (atof orient))
(if (AND (> dx 0) (> dy 0))(setq orient (- 100 orient)));;;---cadran 1 (if (AND (> dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 2 (if (AND (< dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 3 (if (AND (< dx 0) (> dy 0))(setq orient (- 500 orient)));;;---cadran 4
(setq cale (getvar "dwgprefix")) (setq fis2 (open (strcat cale "Carnet.csv") "w")) (write-line (strcat "Punct statie: " nps) fis2) (write-line (strcat "Punct orientare: " npo ) fis2) (write-line "" fis2) (write-line "" fis2) (write-line "PS,PV,X,Y,Dx,Dy,Dist. red.,Orientare" fis2) (write-line (strcat nps "," npo "," (rtos xo) "," (rtos yo) "," (rtos dy) "," (rtos dx) "," (rtos dist) "," (rtos orient 2 4) ) fis2)
(setq nfis1 (open "Fiscord.txt" "r" ))
;;;---------------citim pe rand fiecare linie din fisier (while (setq np (read-line nfis1)) (setq yp (read-line nfis1)) (setq xp (read-line nfis1)) (setq xp (atof xp)) (setq yp (atof yp)) (setq dx (- xp xs)) (setq dy (- yp ys)) (setq dist (distance ps (list yp xp))) (setq orient (angle ps (list yp xp))) (setq orient (angtos orient 2 4));;;string (setq orient (atof orient)) (if (AND (> dx 0) (> dy 0))(setq orient (- 100 orient)));;;---cadran 1 (if (AND (> dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 2 (if (AND (< dx 0) (< dy 0))(setq orient (- 500 orient)));;;---cadran 3 (if (AND (< dx 0) (> dy 0))(setq orient (- 500 orient)));;;---cadran 4
(write-line (strcat "," np "," (rtos xp) "," (rtos yp) "," (rtos dy) "," (rtos dx) "," (rtos dist) "," (rtos orient 2 4) ) fis2)
);;;while de la citire fisier (close nfis1);;;inventarul de coordonate (close fis2);;;carnetul de teren
(command "sh" "del Fiscord.txt") (setq linie (strcat "Fisierul CARNET.csv a fost creat in locatia: \n" cale )) (alert linie) );;;defun CARNET
(alert "Pentru generate carnet de teren, dati comanda CARNET") |
Tyyyy 10x John.
Foarte buna aplicatia, dar am cateva intrebari, nedumeriri:
Daca am mai multe statii din care am ridicat imobilul, practic aplicatia imi ia in considerare doar cea pe care eu o selectez nu ?
Si cum anume este gandita rutina, adica ce puncte radiate ia in considerare, tot ce am pe plan sau doar toate punctele care intra in constructia unei polilinii ?
Dar daca am mai multe polilinii ?
Nu o lua ca pe o mustrare sau o indicatie, ci doar vreau sa stiu cum anume a fost gandita, cum anume numeroteaza punctele (banuiesc ca de la statia de baza in sens direct matura tot ce iese la iveala nu ? ) sau ma insel ?
Carnetul de teren e pentru OCPI, care asa cere. Poliniliile le folosesc eu, sunt mai eficiente. Nu pot face aplicatii universale, pentru toate situatiile si stilurile de lucru, deci ramane cam pe gusturile mele... dar crede-ma, doua zile m-am tot gandit pana am facut aplicatia.
Ideea este cam asa: din desenul tau, iei cu copy elementele fiecarui punct de statie: poliliniile cu care ai unit punctele, statia si punctul pe care te-ai orientat, si le dai paste in coordonate intr-un desen nou. Incarci aplicatia, dai comanda si ai fisierul CSV. Atentie, fisierul are acelasi nume chiar daca e alta statie si o sa-ti scrie peste el, daca il ai acolo de la statia precedenta. Redenumeste-l sau muta-l inainte de a porni aplicatia.
Operatia se repeta pentru fiecare punct de statie separat.
Se poate face carnetul si pentru tot desenul deodata, prin mai multe seturi de selectii, dar e mult prea complicat ca sa fie rentabil.
Elementele sunt legate intre ele... faptic: punct de statie, punct de orientare, elemente radiate din statia aia unite cu polilinii.
Am folosit polilinii si nu puncte fiindca s-ar putea ca multi sa-si fi raportat punctele cu tot felul de alte programe, care folosesc diverse elemente in loc de puncte si m-as fi trezit cu o gramada de intrebari ca de ce nu merge... (fiindca nici o fapta buna nu ramâne nepedepsita, nu?).
Poliliniile si punctele sunt numerotate in ordinea in care sunt ele in desen, adica in ordinea in care au fost desenate. Unii ai nevoie doar de carnetul de teren ca foaie cu calcule de predat la OCPI, iar cine vrea sa faca si corespondenta dintre calcule si teren poate sa-si numeroteze punctele.
selectie entitati dupa atribute sau layere si multe alte functii : CADTOOLS http://www.glamsen.se/Download/CadTools ... _setup.EXE
John Doe a scris:
Carnetul de teren e pentru OCPI, care asa cere. Poliniliile le folosesc eu, sunt mai eficiente. Nu pot face aplicatii universale, pentru toate situatiile si stilurile de lucru, deci ramane cam pe gusturile mele... dar crede-ma, doua zile m-am tot gandit pana am facut aplicatia.
Ideea este cam asa: din desenul tau, iei cu copy elementele fiecarui punct de statie: poliliniile cu care ai unit punctele, statia si punctul pe care te-ai orientat, si le dai paste in coordonate intr-un desen nou. Incarci aplicatia, dai comanda si ai fisierul CSV. Atentie, fisierul are acelasi nume chiar daca e alta statie si o sa-ti scrie peste el, daca il ai acolo de la statia precedenta. Redenumeste-l sau muta-l inainte de a porni aplicatia. Operatia se repeta pentru fiecare punct de statie separat. Se poate face carnetul si pentru tot desenul deodata, prin mai multe seturi de selectii, dar e mult prea complicat ca sa fie rentabil.
Elementele sunt legate intre ele... faptic: punct de statie, punct de orientare, elemente radiate din statia aia unite cu polilinii.
Am folosit polilinii si nu puncte fiindca s-ar putea ca multi sa-si fi raportat punctele cu tot felul de alte programe, care folosesc diverse elemente in loc de puncte si m-as fi trezit cu o gramada de intrebari ca de ce nu merge... (fiindca nici o fapta buna nu ramâne nepedepsita, nu?). Poliliniile si punctele sunt numerotate in ordinea in care sunt ele in desen, adica in ordinea in care au fost desenate. Unii ai nevoie doar de carnetul de teren ca foaie cu calcule de predat la OCPI, iar cine vrea sa faca si corespondenta dintre calcule si teren poate sa-si numeroteze punctele. |
Da, ai dreptate nu poti sa te adaptezi pt. toti, cred ca ti-a dat ceva de gandit, ma bucur ca ai reusit sa-i dai de cap pana la urma, de asta am si intrebat care a fost logica. (la fel m-am gandit si eu)
O seara faina
Aplicatia a mai fost semnalata la http://topograf.3xforum.ro/post/2092/1/ ... t_AutoCAD/
Aici au sunt postate fisiere autolisp distincte, descoperite pe net sau creatie proprie, utile topografilor.
_______________________________________
http://info-topograf.blogspot.ro/
Uneori, cand avem de facut un tabel cu inventarul de coordonate ale punctelor unui contur apar unele chestiuni neplacute, sau daca sunt prea inghesuite punctele e ceva de lucru pana le aranjam.
Postez mai jos o aplicatie care numeroteaza punctele unui contur, le scrie pe plan si face si inventarul de coordonate cu "S=xxx mp" scris sub el, dar punctele sunt aranjate dupa alt algoritm. Ideea este sa scrie numarul punctului cu alta aliniere (stanga, dreapta, sus sau jos) functie de cadranul in care este segmentul la capatul caruia pune punctul.
Luati textul cu copy si dati paste intr-un fisier text gol, la care îi schimbati extensia in LSP si va merge. NU se ia si cuvantul "Code:", ala e scris automat de site.
Codul e scris destul de labartat, are si comentarii, tocmai ca sa poata fi inteles si modificat si de voi in functie de ce aveti nevoie concret.
Variabila "ofs" este offsetul la care scrie textul intr-o parte sau alta fata de punctul geometric, "alfa" este orientarea segmentului de dreapta, etc. - am folosit denumiri cat mai sugestive.
Exista mai multe optiuni de plasare a tabelului cu inventarul de coordonate, acum functioneaza cea mai potrivita pentru mine dar se poate anula cu ";;;" in fata liniilor corespunzatoare si se pate activa alta optiune daca stergeti ";;;" din fata liniilor de cod.
Code:
;;;pentru planse de parcelare OCPI - numeroteaza punctele de contur si face tabelul cu inventarul de coordonate
(defun C:TAB () (setq osn_old (getvar "osmode")) (setvar "osmode" 0) (command "pdmode" 35) (command "pdsize" 1.5) (command "ortho" "off") (command "units" "2" "3" "3" "4" "0.0000" "N") (graphscr) (command "-style" "Arial" "Arial.ttf" 0 1 0 "N" "N")
(setq pi2 (/ pi 2)) (setq 5pi2 (/ (* 5 pi) 2)) (setq 2pi (* pi 2)) (setq 3pi2 (/ (* pi 3) 2)) (setq mselt (ssadd))
(setq sel (car(entsel "\nSelectati conturul:")));;;----obiect (setq msel (entget sel));;;-----lista (setq lng (length msel))
;;;---------------ar trebui sa vedem cate vertexuri are, ca se suprapune ultimul cu primul (setq index1 0) (setq nmax 0) (while (< index1 lng) (setq nent1 (nth index1 msel)) (setq index1 (+ 1 index1)) (setq cod1 (car nent1)) (if (= 10 cod1)(setq nmax (+ 1 nmax)));;;asta e nr. maxim de puncte );;;while (setq nmax (- nmax 1)) ;;;-------------acuma le luam pe rand si scriem (setq index 0) (setq ncor 0) (while (< index lng) (setq nent (nth index msel));;;element de lista (setq index (+ 1 index)) (setq cod (car nent)) (if (AND (= 10 cod)(<= ncor nmax))(progn (setq ncor (+ 1 ncor)) (setq y (cadr nent)) (setq x (caddr nent)) (command "point" (list y x));;;parantezele se inchid mai incolo
(if (= ncor 1)(progn (command "text" (list (+ 1 y) (+ 1 x)) 3 0 ncor) (setq pant (list y x)) ));;;PROGN+IF ncor=1 (if (> ncor 1)(progn (setq alfa (angle pant (list y x))) (setq dist (distance pant (list y x))) (setq ofs 3) (if (<= alfa pi2)(setq alfa1 (- alfa 5pi2))) (if (> alfa pi2)(setq alfa1 (- alfa pi2))) (if (< dist 5)(setq alfap 1)(setq alfap 0)) (if (AND (< distant 5)(= alfant 1))(setq alfap 0)) (setq alfa1 (+ alfa1 (* alfap pi))) (setq aabs (abs alfa1)) (if (> aabs 2pi)(setq aabs (- aabs 2pi))) (if (AND (>= aabs 0)(< aabs pi2))(setq jt "BL")) (if (AND (>= aabs pi2)(< aabs pi))(setq jt "BR")) (if (AND (>= aabs pi)(< aabs 3pi2))(setq jt "TR")) (if (AND (>= aabs 3pi2)(< aabs 2pi))(setq jt "TL")) (setq dx (* ofs (cos alfa1))) (setq dy (* ofs (sin alfa1))) (command "text" "J" jt (list (+ y dx) (+ x dy)) 3 0 ncor) (setq pant (list y x)) (setq distant dist) (setq alfant alfap) ));;;PROGN+IF ncor>1 ;;;=================pentru liniile cap de tabel===========================luam X, Y pentru tabel de aici (if (= ncor 1)(progn (setq xs y) (setq ys x) (setq ps (list y x)) (command "text" (list xs (+ ys 5)) 3 0 "Nr X Y") (setq mselt (ssadd (entlast) mselt)) (command "line" (list (- xs 1) (+ ys 4)) (list (+ xs 55) (+ ys 4)) "");;;linia de sub Nr....X....Y (setq mselt (ssadd (entlast) mselt)) (command "line" (list (- xs 1) (+ ys 9)) (list (+ xs 55) (+ ys 9)) "");;;linia de deasupra Nr...X...Y (setq mselt (ssadd (entlast) mselt)) ));;;PROGN si IF ncor=1 ;;;================================================================================== (if (< ncor 10)(setq sp " ")) (if (AND (< ncor 100)(>= ncor 10))(setq sp " ")) (if (>= ncor 100)(setq sp " ")) (setq lin (strcat (itoa ncor) sp (rtos x 2 3) " " (rtos y 2 3))) (setq yc (- ys (* (- ncor 1) 4.8))) (command "text" (list xs yc) 3 0 lin) (setq mselt (ssadd (entlast) mselt)) (command "line" (list (- xs 1) (- yc 1)) (list (+ xs 55) (- yc 1)) "") (setq mselt (ssadd (entlast) mselt)) ));;PROGN si IF cod=10 );;;WHILE de la index lista entitati
;;;---------- liniile verticale (command "line" (list (- xs 1) (+ ys 9)) (list (- xs 1) (- yc 1)) "");;;verticala din stanga (setq mselt (ssadd (entlast) mselt)) (command "line" (list (+ xs 7.7) (+ ys 9)) (list (+ xs 7.7) (- yc 1)) "");;;verticala dintre numar si X (setq mselt (ssadd (entlast) mselt)) (command "line" (list (+ xs 30.85) (+ ys 9)) (list (+ xs 30.85) (- yc 1)) "");;;verticala dintre X si Y (setq mselt (ssadd (entlast) mselt)) (command "line" (list (+ xs 55) (+ ys 9)) (list (+ xs 55) (- yc 1)) "");;;ultima (setq mselt (ssadd (entlast) mselt))
;;;-----------acuma sa vedem ce suprafata are (command "area" "ob" sel) (setq supraf (getvar "area")) (setq sint (fix supraf)) (setq dif (- supraf sint)) (if (>= dif 0.5)(setq supraf (+ 1 sint))) (setq supraf (rtos supraf 2 0)) (command "text" (list (+ xs 12) (- yc 5)) 3 0 (strcat "S=" supraf " mp")) (setq mselt (ssadd (entlast) mselt))
;;;-------------acum sa facem conturul gros de 0.8 ca se vede mai bine (command "pedit" sel "W" 0.8 "")
;;;=================================aici avem mai multe optiuni=============================== ;;;OPTIUNEA 1: facem bloc, si il inseram dupa aia (if (= nil bn)(setq bn 1)(setq bn (+ 1 bn))) (setq bname (strcat "b" (itoa bn)));;;construim numele blocului, ca sa nu se suprapuna cu altele (command "-block" bname ps mselt "");;;il ascunde cu totul si trebe inserat dupa aia (command "insert" bname pause 1 1 0) (command "scale" "l" "" ps 1.2);;;scara 1:2000 nu se prea vede, scalam
;;;OPTIUNEA 2: se poate lua in memorie, si paste dupa aia ;;(command "_cutclip" mselt "") ;;(command "_pasteclip")
;;;OPTIUNEA 3: se face tabelul normal, si pe urma se muta direct ca il face langa punctul nr. 1 ;;;(command "move" mselt "" ps) ;;;================================================================================== (setvar "osmode" osn_old);;;revenim la osnapul dinainte
);;;DEFUN
(alert "Lansare cu comanda TAB") |
jos palaria, no comment !
Am o mica obiectie la generare automata carnet teren, (poate se verifica si rezolva usor, nu stiu) !
La distantele reduse la orizont cam are tendinta sa le puna cu erori destul de mari, nu tot timpul, dar mi sa intamplat de 2 ori consecutiv, nu stiu am facut eu ceva gresit, desi nu cred.
A nu se interpreta ca ar fi vreo mustrare, e doar o constatare de a mea 
Modificat de kod (25-11-2010 12:45:03)
In contextul asta, nu ma poate supara nici o critica; din contra, consider ca asa ceva e constructiv si duce doar la perfectionarea chestiunii in cauza. Vorbesc despre afirmatiile la subiect.
In cazul de fata, kod, am impresia ca unele dintre punctele tale sunt raportate cu Z cu tot, si tu masori in desen de fapt distanta inclinata si zici ca aia e buna. Este?
Oaresi-cum ai dreptate, da sunt toate cu cote, dar diferenta este prea mare de ordinul sutelor de m, deci nu asta cred sa fie problema, problema cred ca este la mine ZWCad-ul (la el am liceenta) cu care lucrez, asa cred 
Ca acum am incercat si cu AutoCAD-ul si nu-mi face figuri !
Oricum mare atentie si la setarile care trebuie facute de la bun inceput: grade cetisimale, zecimale, directie ...etc.
Si inca o intrebare, la aplicatia cu inventarul de coord. si tabel, unde ar trebui sa pun cele ";;;" sa-mi anuleze numerotare automata a poliliniei, sau cum as putea sa-mi pastrez "numarul punctului" sau mai concret zis sa mi-l ia in considerare direct cel de pe plan ?! cred ca ar fi foarte utila varianta asta ! (stiu ca deja devin enervant si cer imposibilul 
Modificat de kod (25-11-2010 17:49:46)
CARNET:
Am uitat eu sa spun ca punctele pot fi raportate cu sau fara Z, carnetul de teren e acelasi - coordonata Z daca exista, nu e luata in calcul. Cu unghiurile verticale nu am lucrat deloc fiindca exista mai multe moduri de raportare a punctelor. Aplicatia completa ar trebui sa fie una cu raportarea punctelor cu sau fara Z si pe urma carnet de teren cu sau fara unghiuri verticale. Dar asta ar insemna deja sa ma complic mai mult decat trebuie; daca te gandesti bine, aplicatia nu e foarte ortodoxa, ea doar raspunde la una dintre cerintele mai mult sau mai putin idioate ale OCPI. Si la cate s-au tot cerut si modificat pana acuma, oricat as fi vrut la inceputuri sa fac numai treaba ca lumea, mi-a cam trecut.
Nu conteaza setarile din AutoCAD, LISP-ul calculeaza gradele in radiani si pe urma le transforma in centesimale.
Totusi, ca sa evit diverse surprize la care nu ma astept, mai pe la inceput i-am dat comanda "-units" ca sa rezolv treaba asta cu unitatile, si l-am setat in metri, 3 zecimale coordonatele si 4 unghiurile, directia zero pe est.
La fel si cu OSNAP, pot aparea diverse surprize in timp ce ruleaza aplicatia daca e setat pe ce nu trebuie; asa ca l-am pus numai pe ce vreau eu in timpul executiei, si cand termina revine la ce-a fost inainte. Vezi variabila OSMODE in Acad.
TABEL:
Caracterul ";" (fara ghilimele) inseamna ca ce este dupa el pe linia aia e comentariu si nu e luat in considerare. Eu pun caracterul asta de 3 ori, ca sa-l vad mai bine. Deci, daca vrei sa nu functioneze vreo linie de comanda pui ";" chiar la inceputul ei.
Aplicatia cu tabelul nu e facuta ca sa-ti recunoasca tie numarul punctului de pe plan, nici nu stiu sigur cum s-ar putea face asta fiindca nu am gasit un algoritm de recunoastere a textelor corespunzatoare suficient de bun.
Daca vrei sa nu-ti mai scrie deloc punctele pe desen, cauta linia asta:
(command "text" "J" jt (list (+ y dx) (+ x dy)) 3 0 ncor)
, si pui ;;; in fata ei si gata. "ncor" este numarul punctului, "jt" este modul de aliniere a textului, x si y sunt coordonatele punctului iar dx si dy se adauga la ele ca sa scrie textul unde ar fi mai potrivit. Daca ai chef si timp, cauta fiecare dintre variabilele astea si ai sa vezi cum sunt calculate; nu e mare lucru, trebuie doar sa ai rabdare.
John Doe, mie mi-a facut cineva demult un program ptr. calculul suprafetelor in Excel si recunostea numarul punctului. Cind l-am intrebat cum face asta, mi-a raspuns ca programul vede punctul de insertie al cifrei(nr. pct) Nu sunt expert in soft, dar poate-ti dau o idee! Raportarea punctelor o faceam cu Toposys care, in functie de scara, pozitiona cifrele(nr. pct) la o distanta constanta pe x si y a punctului de insertie al cifrei! Distanta asta era de baza ptr recunoasterea nr.pct.
Modificat de Marian (26-11-2010 08:47:57)
Da e clar, chinezaria asta de ZWCAD ii cam "fucked up" cum zic los americanos, deci uite un ex. (numa la dist. redusa vad ca face figuri si culmea nu la toate punctele, chiar aia care cel mai usor de verificat la ospicii 
kod a scris:
A1,A2,520904.64,393234.62,580.079,4105.2495,4157.9791,8.9364 <-- var. gresita din ZWCad
A1,A2,520904.64,393234.62,580.079,4105.249,4146.03,8.9364 <-- vers. corecta din Autocad |
sunt setate amandoua cad-urile cum trebuie, unitati, unghiuri etc. dar deageaba, vb. aceea chinezaria tot chinezarie ramane 
Multzam fain John, da, asta cautam
John Doe a scris:
(command "text" "J" jt (list (+ y dx) (+ x dy)) 3 0 ncor) |
@Marian: inteleg ce spui; de exemplu, ia pe rand fiecare entitate de tip TEXT (care pot sa o pun eu pe alt layer, ca sa fiu sigur ca nu ia altceva), o citeste si îi asociaza cea mai apropiata entitate de tip POINT, dar am constatat ca nu intotdeauna poti fi sigur pe algoritmul asta.
S-ar mai putea face inca ceva: sa verifice prima data cate POINT si cate TEXT sunt in desen, si daca numarul lor difera sa spuna. Dupa ce userul rezolva asta manual, sa asocieze fiecare text la un singur punct (cel mai apropiat), si daca userul vrea sa poata verifica asocierea. Eventual cu linii de indicatie puse pe alt layer... da, cred ca ar merge... sa vedem. Daca raportez tot eu punctele e OK, dar daca le-a raportat (si poate si mutat dupa aia) userul trebuie sa presupun eu cum a facut-o.
Repet, orice critica/observatie e binevenita pentru mine. Nu am pretentia ca fac numai aplicatii corecte si cele mai bune, dar... sa nu uitam ca sunt si gratuite... o sa apara si din alea mai pe bani dupa ce rezolv chestiunea cu drepturile de autor. Daca reusesc.
Spor la munca tuturor pana atunci, cu ce avem deocamdata !
Am uitat sa precizez ca atunci cind calculam suprafata, programul imi cerea(facea zoom pe pct cu nr cel mai mic) distanta dintre pct si pct de insertie al textului corespunzator.
Da, cel mai sigur asa este, dar daca ai 200 - 300 de puncte nu te enervezi ? si-l înjuri pe programator...
Pai prin alea 200-300 puncte trece polilinia si pe aia o marchezi ca sa faci suprafata. Nu stiu daca te ajuta, dar as putea sa-ti trimit programul ala. L-a facut baiatul meu demult.
Mersi Marian, nu e nevoie, am inteles cum ai zis ca functioneaza si pana sa stau sa pricep cum a conceput altcineva algoritmul mai bine il scriu eu frumos de la inceput. Deocamdata însa, nu prea am timp si nici nevoie.
In plus, nu ma pot baza pe ideeea ca toate textele sunt la o distanta fixa de punctul lor - daca userul a mutat ceva texte fiindca nu se vedeau bine? ma suna si-mi zice ca nu merge si eu imi sparg capul sa-mi dau seama ce am gresit? crede-ma, am ceva experienta pe tema asta....
Am mai spus: aplicatiile pot suplini multe operatiuni si calcule repetitive, scutesc foarte mult timp, nu gresesc dar NU pot suplini anumite... lipsuri ale utilizatorilor. Prefer sa intuiesc cat mai multe chestiuni din partea a doua si sa le evit. De ce crezi ca i-am tras comanda UNITS la inceput? sau de ce m-am legat de OSNAP? si altele.
Voiam sa spun ca daca ar fi sa indici la toate textele de pe contur care e punctul corespunzator mori încet, nu e o solutie. Teoretic, o aplicatie e facuta pentru automatizarea lucrului deci utilizatorul trebuie sa intervina cat mai putin; daca e nevoie sa intervina prea mult, aplicatia nu-si mai are rostul.
In fine... hai ca ne lungim prea mult. Ai incercat sa vezi daca la tine merge aplicatia asta cu tabelul ?
Nu am incercat ca nu am nevoie. Am TopoLT cu licenta.
Salut la toti.
Urmaresc cu interes discutiile de pe acest forum, si am vazut ca lumea se ajuta intre ei cu diferite aplicatii concepute individual.
As dori sa va intreb dc stie cineva cum pot sa aduc niste puncte topo la cota scrisa in textul de langa ele.
Am niste ridicari topo in .dwg la niste stradute si nu am inventarul de coordonate. Punctele apar cu x,y, insa z=0. Cota este scrisa text langa punct, precum si numarul si codul punctului.
In functie de ce cod apartine, punctele sunt in layere separate, la fel si textele cotelor. Deci pot selecta sa vad doar punctele, textele si codurile pt margine drum spre exemplu.
Aveti careva vreun lisp care sa ma ajute sa ''mut '' punctele la cote de langa scrisa in text? Eventual sa atribui si codurile scrise tot langa.
Am nevoie de aceste puncte sa aiba si cota corespunzatoare, ca sa pot genera o suprafata.
Multumesc
P.S.: Daca as putea atribui si codurile pt fiecare punct as putea sa le unesc prin polilinii 3d, ce ma vor ajuta f mult la suprafata (de fapt aici vreau sa ajung)
Modificat de sharkymatei (02-12-2010 13:30:45)
cel mai usor ii ceri celui/celei care a masurat drumul sa-ti dea si inventarul de coordonate (sau chiar mai multe dace are) si le poti importa pe urma in ACad cu punctele direct pe cote sau cum mai ai nevoie.
Salut. Problema e ca nu vor sa ne dea inventarul de coordonate, ne cer bani pe el, chiar dc cineva i-a platit deja. E romanika frate.
S-au facut ridicarile la niste stradute, s-a realizat un SF si acum noi trebuie sa facem PT+DDE, dar ridicarile facute de ei le-au pus la dispozitie doar pe suport de hartie. Am primit de la cineva ridicarile ''brute'' dar nu sunt in formatul in care sa ma pot folosi de ele.
Nasol.
Sau poti incerca sa-ti generezi tu un inventar de coordonate din Tools -> Attribute Extraction ; ar trebui sa poti genera un XLS pe care-l faci pe urma text sau ce trebuie si il raportezi din nou, cu Z cu tot.
Sa fii atent doar la ce scrie prin casetele alea, ce bife pui sau nu, de mers trebuie sa mearga. Nu neaparat din prima incercare.
De vreo 2 zile imi apare o eroare in autocad in momentul in care vreau sa generez modele 3d pt calcul de volume cu TopoLt. Eroarea ii : " Bad argument type: stringp nil". Inainte mergea si acum nu mai reusesc nicicum. ( am ajuns pana la reinstalarea autocad-ului). Poate cineva sa ma ajute?
Modificat de Gunnerica (02-12-2010 20:04:23)
Gunnerica a scris:
De vreo 2 zile imi apare o eroare in autocad in momentul in care vreau sa generez modele 3d pt calcul de volume cu TopoLt. Eroarea ii : " Bad argument type: stringp nil". Inainte mergea si acum nu mai reusesc nicicum. ( am ajuns pana la reinstalarea autocad-ului). Poate cineva sa ma ajute? |
Semnaleaza eroarea pe forum TopoLT - http://www.topolt.com/en/resources/users-forum.html si sunt convins ca vei primi un raspuns clar din partea autorului programului!
_______________________________________
http://info-topograf.blogspot.ro/
Cred ca ai o eroare in fisierul .dwg. Incearca sa creezi modelul 3D intr-un fisier nou creat. Nu cred ca-i de la TopoLT.
Sunt de acod cu mit, copiaza totul intr-un dwg nou, eventual raporteaza punctele din nou si trebuie sa mearga.
_______________________________________
La muncă! nu la întins mâna.
Sau:
Incearca si in alt calculator, sa vezi ce se intampla. Poate fi din cauza comenzilor "Save As..." in alta versiune de AutoCAD, poate fi busit sistemul de operare... multe cauze.
Incearca si sa iei cu copy tot desenul, da-i paste in coordonatele originale intr-un desen nou si vezi daca asa merge.
John Doe a scris:
Sau: Incearca si in alt calculator, sa vezi ce se intampla. Poate fi din cauza comenzilor "Save As..." in alta versiune de AutoCAD, poate fi busit sistemul de operare... multe cauze. Incearca si sa iei cu copy tot desenul, da-i paste in coordonatele originale intr-un desen nou si vezi daca asa merge. |
Ideea era sa nu copieze date din fisierul pe care-l cred busit, ci sa creeze un nou dwg. de la zero. Daca nici atunci... inseamna ca-i de la sistem, ca din cate-am inteles, AutoCAD-ul a fost reinstalat.
John Doe a scris:
Sau poti incerca sa-ti generezi tu un inventar de coordonate din Tools -> Attribute Extraction ; ar trebui sa poti genera un XLS pe care-l faci pe urma text sau ce trebuie si il raportezi din nou, cu Z cu tot. Sa fii atent doar la ce scrie prin casetele alea, ce bife pui sau nu, de mers trebuie sa mearga. Nu neaparat din prima incercare. |
Din ce program sunt comenzile astea??
sharkymatei: AutoCAD 2007. Si 2002, si 2011 - am verificat.
Daca chiar nu te descurci, trimite-mi desenul pe mail si-ti trimit inapoi inventarul de coordonate 3D. Adresa de mail o gasesti la profilul fiecarui user. Chiar nu stiu daca merita sa-ti bati capul, mie mi-ar lua vreo 15 minute. Asta dupa ce prima data am stat vreo 3 ceasuri sa ma prind, cand tot asa pe gratis am lucrat... asa ca tie iti cer o bere cand dai prin Sibiu.
Am zis ca te ajut nu fiindca n-am alta treaba, ci fiindca stiu cam cum e sa fii la inghesuiala in situatii mai mult sau mai putin idioate.
Am incercat sa extrag coordonatele din desen si sa generez apoi un alt inventar de coordonate de tip .txt ( initial incarcam in autocad .gsi). Am incercat apoi sa raportez iar punctele si tot n-a mers. Am luat fisierul de coordonate pe stick si am incercat apoi si pe laptop si nici asa n-am reusit. Am instalat si autocad-ul si TopoLt de vreo 2 ori si nici asa n-a mers. Am incercat si pe autocad 2000, 2002, 2006 si 2008 si n-am reusit. Am instalat apoi si Leica geo tools si am facut iarasi setarile si nici asa n-a mers.( Aveam impresia ca e de la descarcarea aparatului problema, deoarece am descarcat aparatul pe laptop si acolo a mers si pe calc tot n-a mers). In cele din urma dupa 2 zile de lupte si nervi, a cedat calcu si dupa ce am venit de pe teren de la alta masuratoare, am reusit sa descarc si sa generez modelul 3D si apoi sa fac curbe de nivel si calcule de volum. Deocamdata merge si nu-mi dau seama ce s-a intamplat,dar sper sa nu reapara problema. Multumesc tuturor colegilor de ajutor.
Am incercat sa extrag coordonatele din desen si sa generez apoi un alt inventar de coordonate de tip .txt ( initial incarcam in autocad .gsi). Am incercat apoi sa raportez iar punctele si tot n-a mers. Am luat fisierul de coordonate pe stick si am incercat apoi si pe laptop si nici asa n-am reusit. Am instalat si autocad-ul si TopoLt de vreo 2 ori si nici asa n-a mers. Am incercat si pe autocad 2000, 2002, 2006 si 2008 si n-am reusit. Am instalat apoi si Leica geo tools si am facut iarasi setarile si nici asa n-a mers.( Aveam impresia ca e de la descarcarea aparatului problema, deoarece am descarcat aparatul pe laptop si acolo a mers si pe calc tot n-a mers). In cele din urma dupa 2 zile de lupte si nervi, a cedat calcu si dupa ce am venit de pe teren de la alta masuratoare, am reusit sa descarc si sa generez modelul 3D si apoi sa fac curbe de nivel si calcule de volum. Deocamdata merge si nu-mi dau seama ce s-a intamplat,dar sper sa nu reapara problema. Multumesc tuturor colegilor de ajutor.
Imi cer scuze pt postarea de mai multe ori, dar mi-a cazut netu si apoi m-am trezit ca l-a pus de mai multe ori. Am tot cautat si n-am descoperit cum pot sa-l sterg
Gunnerica: Dupa ce postezi, sub fiecare text scrie cu galben niste posibile actiuni de efectuat asupra postului; daca e al tau sigur este si "Stergeti". Pe cele cu "error" ti le-am sters eu.
Extragerea coordonatelor asa cum am zis au merge daca punctele sunt raportate sub forma unor blocuri cu atribute, raportate toate cu Z=0 dar la un anumit camp al blocului se regaseste valoarea Z. Asa cum raporteaza TopoLT, de exemplu.
salut John Doe... acestea sunt fisierele .csv cu ridicarile topo de care ziceam. Am reusit sa fac rost pt o parte din strazi de inventarul de coordonate. Problema e ca nu reusesc sa imi generez un plan cu punctele de acelasi cod unite cu polilinii 3d. Evorba de niste strazi care au puncte pt ax existent, margine p carosabila, santuri, limite prprietati, etc. Poate reusesti sa le generezi cu ceva program.....
Multumesc...
salut John Doe... acestea sunt fisierele .csv cu ridicarile topo de care ziceam. Am reusit sa fac rost pt o parte din strazi de inventarul de coordonate. Problema e ca nu reusesc sa imi generez un plan cu punctele de acelasi cod unite cu polilinii 3d. E vorba de niste strazi care au puncte pt ax existent, margine p carosabila, santuri, limite prprietati, etc. Poate reusesti sa generezi cu ceva program polilinii 3D (neaparat 3D).....
Multumesc...
Acestea sunt inventarele de coordonate pt acele strazi din 2 localitati
Coordonate strazi sharkymatei.rar - 39.3 Kb
PS: nu vad butonu de stergeti pt postarea de 2 ori de mai sus, acolo langa modificati :P:P
Modificat de sharkymatei (06-12-2010 11:47:35)
sharkymatei: Era sa ma bagi in ceata cu site-ul ala... au sarit pe mine vreo zece reclame, gagici... abia am scapat.
In fine, ai reusit sa-ti faci un carnet de teren cu Z cu tot si cu coduri. Daca-mi aduc bine aminte, TopoLT are o functie de unit puncte dupa coduri si nu prea vad rostul sa ma apuc eu acuma sa reproiectez ceva existent. Nu cred ca-ti uneste punctele cu polilinii 3D, dar iti face modelul terenului din 3DFace, pe care iti face pe urma si curbele de nivel daca-ti trebuie.
Sau: raporteaza-ti punctele pe layere separate, functie de coduri, si coloreaza fiecare layer altfel; pe urma o sa fie mai usor sa unesti de mana punctele.
Cât despre butonul ala de stergere... mai uita-te ca este.
john, butonul ala il vezi doar tu, ca esti moderator
nici eu nu il vad...deja ma gandeam k is pe langa... dar tot nu il vad...
Referitor la siteaul acela, l-au tot incarcat cu tot felul de publicitati, insa majoritatea de hosting gratuit au asa. Daca ai cont pe bani nu vezi publicitatile.
Topolt are functia de a uni, insa cu polilinii 2d, dar am nevoie neaparat de 3D.
Cu Autocad Civil 3D pot genera suprafata pe baza punctelor, dar am nevoie de acele linii 3d sa conditionez suprafata, sa se faca o triangulatie ce nu taie acele linii. Astfel iese o suprafata aproape de cea reala.
sharkymatei a scris:
Referitor la siteaul acela, l-au tot incarcat cu tot felul de publicitati, insa majoritatea de hosting gratuit au asa. Daca ai cont pe bani nu vezi publicitatile. |
Daca ai "Add block plus" si "WOT" (Web of Trust) <-- extensii pt. Mozilla firefox si Google Chrome, nu ai sa le vezi (pop-up-urile alea) si implicit nu poti da click pe ele => nu-ti poti infecta PC-ul cu tot felul de troieni si alte prostii 
Morla: Nu mai folositi oameni buni porcaria aia de Internet Explorer
"Be smart" !
Da, cu butonul ala probabil ca sunt eu pe langa. Si nici nu e buton de fapt, e hyperlink. Scuze.
Am inteles ce vrei, dar nu am nici o aplicatie care sa uneasca puncte dupa coduri. Si nici nu e chiar simplu de facut. Ai si ceva mii de puncte, cam naspa. N-am nici o idee in afara de ce am zis pana acum...
TopoLT iti uneste intradevar cu polilinii 2D dar tot cu TopoLT poti folosi comanda "liftup" sau din meniu->transformari->ridica la cota punctelor si iti transforma 2D in 3D la cota punctelor.
_______________________________________
La muncă! nu la întins mâna.
adrianc a scris:
TopoLT iti uneste intradevar cu polilinii 2D dar tot cu TopoLT poti folosi comanda "liftup" sau din meniu->transformari->ridica la cota punctelor si iti transforma 2D in 3D la cota punctelor. |
Am sa incers sa vad ce iese...mersi
Ziceam mai demult ca am reusit sa fac o aplicatie care face PAD-ul (A4 si A3), Anexele 1, 2, 5, nota de tarifare si fisierele CPXML si DXF pentru dosare de prima intabulare teren extravilan, persoane fizice sau juridice.
Ca sa vedeti ceva mai exact ce face, am postat doua filmulete aici:
http://dl.transfer.ro/transfer_ro-17dec-2eafda81ce.zip
Nu o distribui gratis, chiar am muncit prea mult la ea; va fi si de vanzare la un pret modic, dar deocamdata nu am reusit sa obtin drepturile de autor. Daca cineva m-ar putea ajuta la faza asta cu drepturile, nu raman dator.
Ai incercat pe forumurile juristilor/avocatilor ?
Da, dar mereu sunt indrumat catre cate un cabinet de avocatura... fie nu sunt ei prosti, fie au dreptate.
Cu hardul si softul sunt in regula dar sunt ale firmei la care lucrez; nu are nici o pretentie, dar pare ca e mai complicat din cauza asta.
Am vizionat filmuletele.
Sper sa obtineti cat mai repede drepturile de autor.
Asteptam sa vedem si preturile.
Pretul va fi modic... doar atat cat sa nu fie gratis. Ca sa nu merite oboseala de a o decompila si sa descurajeze tendinta de a o face cadou altora. E compilata si functioneaza numai pe calculatorul care are o anumita serie la hard.
John Doe:
Distribuirea unui produs este esentiala dupa efortul si entuziasmul creatiei.
O idee ar fi sa contactezi o firma specializata, acelasi lucru l-a facut si autorul TopoLt, ProfLt.
Vezi daca sunt interesati cei de la CADWARE Engineering: http://www.cadware-eng.ro/
_______________________________________
http://info-topograf.blogspot.ro/
Da partea asta cu alianta e cu 2 taisuri, la un moment dat, daca vad ca va fi profitabila treaba, or sa faca tot posibilul sa se fac ei stapani pe munca ta, si tu vei fi marginalizat.
Dupa ce am vazut filmuletele, mi-am dat seama, cat de mult depinzi de ordonantele si legile date de ancpi, si de programul generare CP, adica, la modul in care se misca lucrurile, ba cate un ordin care modifica fundamental cate o anexa, sau mai multe, ba un update la generare cp in care se mai schimba cate ceva, vei avea mult de furca la partea de "mentenanta" sau de update la zi !
In rest jos palaria
Am eu un programel, nu stiu de unde (Dxyz) care face exact ce vrei tu, in cateva secunde. :hi 
_______________________________________
Noi te masuram cel mai bine
sacoracad a scris:
Am eu un programel, nu stiu de unde (Dxyz) care face exact ce vrei tu, in cateva secunde. :hi  |
Asteptam zilnic astfel de interventii.
Nu stiu de unde, nu stiu cum, nu stiu pentru cat timp dar munca va fi placuta, autolisp nu va avea secrete...
_______________________________________
http://info-topograf.blogspot.ro/
Aici e programelul. Atentie! fisierul .dwg trebuie sa fie fomat 2000.
http://dl.transfer.ro/transfer_ro-20dec ... 4274a7.zip
_______________________________________
Noi te masuram cel mai bine
S-a mai amintit pe forum despre utilitarul DXF2XYZ: http://www.guthcad.com.au/freestuff.htm
_______________________________________
http://info-topograf.blogspot.ro/
Atunci trebuie sa rezolve rapid problema si cu ocazia asta am aflat si de unde e programul. 
_______________________________________
Noi te masuram cel mai bine
Sunt de acord ca TOPOLT este o aplicatie complexa, dar nu au inventat ei Visual Lispul, asa ca oricine care se pricepe poate sa creeze aplicatii asemanatoare.Mult respect pentru cei care posteaza aici rutine Visual Lisp.
Modificat de DanCad (26-01-2011 14:15:00)
Dragii mei, eu colaborez cu topografi.De nevoie am inceput sa invat Visual Lisp(nu sunt un programator experimentat) si am generat unele aplicatii Visual Lisp utile pentru intocmirea documentatilor .As fi interesat sa corespondez cu cineva care este pasionat de Autocad si Visual Lisp pentru a face schimb de idei.
Cu mult respect.
Modificat de DanCad (26-01-2011 14:23:02)
DanCad: deci cu scara de plotare te-ai lamurit.
Schimb de idei se poate face foarte bine aici pe forum - doar de aceea e creat, nu? Spune.
Salut pe toata lumea,
Cu plotarea la scara din spatiul model m-am lamurit.Multumesc mult pentru raspunsuri.Ma intereseaza daca cineva foloseste Layout-ul pentru plotare, cum determina scara in viewport.De asemenea daca trebuie sa desenam un profil la doua scari, scara lungimilor 1:1000 si scara inaltimilor 1:100, cum il obtinem?
Multumesc anticipat.
scara in spatiul model:
(cond ((= scr "200" ) (setq z "5" ))
((= scr "500" ) (setq z "2" ))
((= scr "1000" ) (setq z "1" ))
((= scr "5000" ) (setq z "0.2" ))
((= scr "2000" ) (setq z "0.5" )))
(command "_.mspace"
"._zoom" "e"
"._zoom" (strcat z "xp" ))
(command "._pspace" )
cat despre profile le desenezi direct la scara.
Modificat de bogdy (28-01-2011 18:47:20)
am o problema cu creerea unor blocuri cu atribute in autocad, ma poate ajuta cineva?
adrianmonea a scris:
am o problema cu creerea unor blocuri cu atribute in autocad, ma poate ajuta cineva? |
pai spune si care e problema
bogdy: e putin rupt din context - treaca de la mine, am inteles ce vrei sa spui. Dar daca cineva da comenzile astea si nu merge... si te-njura...
Era mai simplu, cred eu, daca spuneai ca se poate folosi comanda ZOOM si optiunea "S" de la "Scale" , iar factorul de scara este [scara desenului] / [scara la care vrei sa-ti faca zoom-ul] , iar factorul de scara se pune legat cu un "p" dupa el.
Fiindca in principiu noi lucram in desene care au scara 1:1000, atunci impartim 1000 la scara la care vrem sa ne faca zoom si ala e factorul de scara.
Se pot afla mai multe si interesante daca luati pe rand toate optiunile lui ZOOM si vedeti ce se intampla. E chiar interesant, vorbesc serios.
Blocuri cu atribute: sunt blocuri care pot contine mai multe variabile, care pot avea diferite valori la fiecare bloc inserat, si ca sa poti insera un bloc din asta trebuie sa-i dai valori si la variabilele din el.
Uita-te la punctele raportate cu TopoLT de exemplu, sunt blocuri cu atribute. Sau gaseste alt bloc cu atribute, da comanda ATTEDIT si vezi cam ce se intampla. Pe urma, explodeaza un bloc cu atribute si vezi ce apare.
Pe urma, da comanda ATTDEF (sau DDATTDEF, depinde de versiune) si vezi ce poti face - ar trebui sa stii deja sa faci un bloc din asta. Dupa ce-l faci, si insereaza-l ca sa vezi cum se poarta.
Sau nu fa nimic si intreaba tot aici...
eu am scris doar o parte din program. nu vad ce nu ar merge daca se mai adauga si restul programului propriu-zis. tu cand raportezi punctele le faci 1:1 dar cotele si denumirile de pe plan le scalezi la anumita scara. o zi buna
bogdy: Nu sunt detinatorul adevarului absolut, nu tin sa am dreptate intotdeauna. Mi-am spus doar o parere si am oferit alternative complete. O zi buna si tie.
Scara in viewport o poti determina si altfel: selectezi chenarul viewportului, si in caseta de proprietati (Ctrl+1 daca nu ma insel) ai undeva "Custom scale" ; acolo scrii tu factorul tau de scara si iti face zoom-ul la scara respectiva. Metoda e utila la formularele pentru descrierea bornelor de exemplu, la planurile de incadrare in zona, etc.
Daca tot vorbim de zoom, mai sunt niste optiuni folositoare: se poate face zoom pe ultimul obiect din desen. Daca ati dat "Paste to original coordinates" la o parcela peste vreun plan cadastral mai mare si e mai greu de cautat unde a picat conturul, imediat dupa asta dati comanda ZOOM, alegeti optiunea "ob" (adica obiect), pe urma scrieti "L" fara ghilimele adica ultimul obiect, mai dati doi de enter si o sa faca zoom fix pe conturul vostru.
Va multumesc pentru raspunsurile date.
Cu mult respect,
Dan
Salut!
Am si eu o intrebare ,
Se poate "transforma" dintr-un fisier *.dwg in care am mai multe puncte si as vrea sa stiu daca pot genera un fisier text sau alt tip in care sa rezulte Nume punct, Distanta inclinata si/sau redusa, Unghiul Orizontal, Unghiul Vertical(planul e 3D sau am cotele punctelor pus intr-ul layer separat) ?
Va multumesc anticipat.
Vezi tot aici, pe la pagina 6 e un exemplu de generare carnet de teren; nu e exact ce vrei tu, dar cu niste modificari minime ai rezolvat-o.
da .. am vazut aia si am reusit cu mici modificari.
Dar ce ma intereseaza pe mine e sa calculez unghiul inclinat, pt ca asta tine de o realizare adevarata.
E bun caietul ala descris la pagina 6 , caiet furnizat de respectivilul domn John Doe.
Eu mai lucrez si cu un GPS Geomax ZPG800 si la acesta eu nu reusesc sa obtin fisierul tip "RINEX", aparatul e foare precis dar nu am suport la OCPI. si de aceia caut o solutie pentru a duce o fisa de masuratori clasice la Oficiu, iar daca il trimit fara unghi vertical se prind stia , ca na ... canva au fost si ei printre noi.
Daca stii cum sa modific acel lisp pentru a calcula si unghiul vertical ti-as ramane recunoscator.
Scriptul acela e conceput pentru polilinii 2D - cele utilizate in mod curent, si dupa cum ai vazut extrage coordonatele vertexurilor, care coordonate sunt si ele tot 2D adica nu au Z.
E cam nasol de lucrat cu polilinii 3D, de aia as zice ca e mai bine sa te legi de alt tip de entitati: puncte (care pot fi 3D, daca le unesti ca de obicei cu polilinii 2D nu are nimic) sau blocuri cu atribute cum foloseste TopoLT.
Sa zicem ca lucram cu puncte care au Z. Atunci, la SSGET trebuie sa schimbi tipul entitatii din lista filtru din LWPOLYLINE in POINT, la fel parcurgi lista la fiecare entitate si cand ajungi la grupul cu codul 10 ai dat peste coordonate; numai ca acuma, din lista aia (din care faceam eu x=CADR si Y=CADDR), trebuie sa o setezi mai intai sa-ti dea lista fara primul element, cu functia CDR si o sa ramana o lista de 3 elemente (x y z) pe care le extragi cu CAR, CADR si CADDR.
Pe urma, unghiul vertical stii cum sa-l calculezi.
M-as bucura sa o rezolvi tu mai departe.
Spune-mi ce ai rezolvat sau nu, te astept.
Stim ca daca vrem sa intabulam o parcela dintr-o tarla (extravilan, L18/1991) trebuie sa parcelam toata tarlaua daca exista planuri parcelare. Mai recent, am auzit ca ni se vor cere si fisierele CP de la toate parcelele din tarla - mai stie cineva ceva de asta? Fiindca am mai facut o aplicatie LISP care genereaza fisierele CP la greu, automat, in baza tabelului cu tarlaua primit de la OCPI si a parcelarului facut de noi, acum e in teste si as mai avea nevoie si de alte opinii.
...alte opinii, eu zic sa nu le mai dai idei, la astia de de la ospicii, ca si asa au destule, oare nu e de ajuns ca noi facem totul ?! ce mai in scurt timp nu mai avem nevoie de receptioneri, inspectori, notari etc. ca 90% din munca lor e facuta pe spatele, timpul si nervii nostrii, din pacate procentul castigului e invers proportional, deci in concluzie OARE NU E DE AJUNS ? 
Modificat de kod (14-03-2011 20:40:21)
Nu vreau sa dau asemenea idei nimanui. Asa am auzit ca se va cere, am rezolvat-o oarecum si voiam sa stiu daca se intampla deja prin alte parti si daca da, cam ce se cere.
In rest, de acord cu tine...
Salutare
Am si eu o intrebare, Ati mai lucrat vreunul dintre voi cu E-ON-ul mai recent?
Pentru ca mi-au trimis un model de plansa in care punctele de detalii sunt reprezentate prin Block Reference, au inclusa si cota in el si sunt situate 3D la cota textului cotei.
eu lucrez cu e-on-ul,fac de 2 ani lucrari pt ei de genul asta
Da, unii lucreaza in felul asta. Daca vrei sa extragi atributele blocurilor, cauta in AutoCAD in meniu "Attribute extraction" (in Tools, parca?) sau foloseste comanda EATTEXT.
si pot sa te intreb cum raportezi pinctele ca sa iti dea punctul si cota block cu punctul de prindere in centrul punctului
Nu inteleg ce vrei sa zici in ultimul post, mai zi o data...
da-mi o adresa me mess ca sa vb mei repede daca vrei( pe privat)
incearca cu autocad 2009,eu asa am reusit, prima data creezi blocuri, apoi creezi aributele la blocuri, vezi sa fie in metri
Poate cineva sa posteze un exemplu de cod pentru atribuirea coordonatelor xyz ale unui block selectat unor variabile x y z? Sau altfel spus vreau sa selectez un block si sa folosesc coordonatele punctului de insertie intr-un program.
Va multumesc!
Probabil se poate, dar blocurile cu atribute sunt mai nashparlii si nu se manipuleaza chiar simplu in LISP, poate in alte limbaje dar nu sunt sigur.
Pana una-alta, cauta comanda "Attribute Extraction" in Tools, poate te ajuta; poti extrage in fisiere externe atributele care vrei tu si le poti folosi pe urma.
Am in calculator cateva programele in LISP, care imi sunt foarte des de folos si am ales sa le postez si aici:
http://www.fileshare.ro/30222586368
Unele sunt facute de mine, altele sunt luate dupa net. Pentru a putea folosi un program LISP, il incarcati in AutoCAD cu comanda _appload (sau ap). Daca nu stiti cu ce comanda ruleaza Lisp-ul respectiv, il deschideti in Notepad si va uitati unde scrie (defun c:y (), unde y este numele comenzii, iar in AutoCad tastati y ca sa rulati programul (asta e pentru incepatori).
Pentru cine e interesat, mai am niste LISP-uri facute de mine, pentru care este recomandat sa aveti TopoLT instalat. Unul din ele genereaza Anexa 11 automat, completand un bloc cu atribute, iar celalalt pune automat intr-o drumuire simbolul de statie sau borna si scrie coordonatele acestora automat (extragandu-le din blocul PUNCT al TopoLT-ului).
Cred ca ar fi ok. Multumesc!
Sau la sfârsitul programului adaugati linia:
(alert "Programul ruleaza cu comanda XXX" )
, si o sa apara o caseta cu mesajul asta dupa ce il incarcati.
am si eu o intrebare.
am de facut ceva planuri parcelare la cateva tarlale si as vrea sa stiu daca exista vreun lisp sau ceva de genu pentru a putea importa in CP mai multe contururi de imobile noi fara a fi necesar sa dau la fiecare next ->next ->next. daca stiti vreo modalitate ..... ipartasiti si cu mine
Tocmai am terminat un LISP care iti face fisierul CPXML pentru toate imobilele din tarla; mai vreau sa-l testez ca lumea si e gata. Probabil o sa revin cu o prezentare, dar aplicatia nu va fi gratis.
Am refacut 2 din programele lisp de mai sus, deoarece chiar daca functionau, nu functionau asa cum ar fi trebuit si imi cer scuze pentru aceasta inconvenienta.
Programele updatate:
http://www.fileshare.ro/30270276645
http://www.fileshare.ro/30270301250
Pt. cei interesati de modulele LISP aditionale:
-programul care genereaza Anexa11 trebuie sa ii mai optimizez codul sursa, deoarece e prea stufos si dezordonat (initial l-am facut strict pentru mine
) si in curand va genera si anexele si fisierul CP complet, nu doar PAD-ul. Insa mai dureaza putin (stau cam prost cu timpul liber) si va rog sa mai aveti putina rabdare. Modulul care face doar PAD-ul este gata deja, dar nu este adaptat la noile cerinte ale OCPI, asa ca trebuie putin modificat. Programul, in forma finala, il voi da gratis aici pe forum, dar sa nu aveti mari pretentii de la el. Eu nici macar nu sunt programator, fac asta ca un hobby.
-programul pentru schema drumuirii este gata deja, dar trebuie sa ii fac si documentatia (trebuie sa stim si cum functioneaza acesta corect, este?). Zilele astea ii voi da drumul.
Numai bine!
Felicitari, ce program folosesti pentru a genera CP.Aplicatia care genereaza fisierul CP este scrisa in Visual Basic?
@DanCad: folosesc tot LISP, sub AutoCAD dar cred ca merge si sub altele care au interpretorul LISP. Fisierul CPXML este fapt un XML, adica un fel de HTML si merge foarte bine scris linie cu linie, ca text. Numai ca trebuie sa fii foarte atent.
Lucrezi cu planul parcelar deschis, dai o comanda si porneste cam asa:
581/489px 36.6KB
, pe urma te intreaba care sunt tabelele pentru proprietari si care pentru parcele:
507/308px 27.8KB
si pâna clipesti din ochi a facut fisierul:
582/412px 44.5KB
Daca treci in tabel si valoarea de impozitare la parcele, o trece si el in CPXML.
Daca sunt parcele care au acelasi numar, ti le selecteaza el dupa suprafata din acte trecuta în tabel. Daca ai doua cu acelasi numar si aceeasi suprafata e treaba ta...
Daca ai gresit vreo categorie de folosinta in tabel, inlocuieste el cu ARABIL dar iti zice la care parcela.
Daca ai in tabel parcele care nu sunt si in plan, nu le trece in CPXML. Daca ai in plan parcele care nu sunt in tabel, la fel (cele mov din desen, de exemplu).
Daca n-ai completat vreo caseta, iti zice si nu trece mai departe.
Tabelul contine si numerele de ordine ale parcelelor in tarla, care se scriu si in fisierul CPXML.
Adresa proprietarilor este scrisa ca fiind in judetul in care sunt parcelele, UAT-ul la fel iar la localitate se trece NEIDENTIFICATA (fara strada si numar) - valabil pentru toata tara. Datele personale ale proprietarilor nu se trec.
Mai lucrez la niste "daca" si va fi gata curând.
DanCad a scris:
Felicitari, ce program folosesti pentru a genera CP.Aplicatia care genereaza fisierul CP este scrisa in Visual Basic? |
Nu, il generez cu ajutorul unor functii ale Visual Lisp.
@John Doe, pare o aplicatie excelenta. As avea niste sugestii:
-vezi cum actioneaza programul tau atunci cand userul in loc sa selecteze tabelul cu proprietari, il selecteaza pe cel cu parcele si invers
-vezi cum actioneaza programul tau atunci cand userul selecteaza un tabel incorect (de ex. tot un fisier csv, dar care contine coordonate, in loc de alte date). Plus, majoritatea folosesc fisiere de tip .xls pentru tabele, nu .csv (nu cred ca asta ar fi totusi o problema).
-ce faci pentru userii care au doar proiectul parcelar, dar nu au si tabele? Eu as face o functie care sa genereze CP-ul si astfel:
->userul sa treaca in interiorul parcelei nume proprietar, nume parcela, categorie de folosinta si act de proprietate (oricum functia mdetas din TopoLT face chestia asta partial) si sa generezi CP-ul direct de acolo, fara tabele.
-pentru parcelele dublate din tabel, as recomanda ca programul sa le introduca totusi in CP, dar sa avertizeze userul cu un mesaj
Oricum, felicitari si succes in finalizarea programului!
La chestia cu selectarea altor tabele chiar nu m-am gandit... in mod normal, da eroare si se opreste dar poate fi prevenita din start. Se va rezolva.
Cine are numai proiectul parcelar, ce fisier CP vrea sa faca? Fisierul fara proprietari e incorect si n-are ce face cu el, deci oricum ii trebuie proprietarii si daca tot face rost de ei, sa-i scrie frumos in tabel si e o treaba ca lumea cap-coada. Oricum, in tabel se trec doar nume, initiala si prenume. Poate sa treaca si unul singur, din partea mea.
Datele text scrise in plan sunt cam greu de manipulat, si asa am destul de furca doar cu numerele parcelelor, nu vreau sa ma incurc degeaba singur. Aplicatia e pentru cei ce fac parcelari deci au si tabelele de parcelare.
Aplicatia primeste numai fisiere CSV, nu se poate selecta alt tip de fisier. Formatul CSV se poate obtine (de exemplu) din Excel cu "Save As..." foarte usor si e un format mai general, il recunosc mai multe aplicatii ; pentru LISP cred ca e cel mai potrivit pentru date de intrare complexe.
Parcelele care au acelasi numar se trec in fisierul CP, fiecare cu suprafata ei masurata. Ziceam ca daca sunt parcele cu acelasi numar si cu aceeasi suprafata masurata atunci poate fi o problema, in sensul ca vor avea si acelasi contur in CP, iar userul va trebui sa-si importe manual celalalt contur la una dintre ele. Insa e o situatie mai mult teoretica si destul de greu de rezolvat din soft, zic eu. Iar avertizarea o da programul "Generare CP", cand se deschide fisierul CP.
Fisierul CP accepta cate un exemplar din fiecare act, deci daca un TP contine mai multe parcele, actul o sa fie trecut in fisier o singura data - asta s-a rezolvat.
Mersi pentru sugestii. Dar sa fim bine intelesi: nici o aplicatie nu va face niciodata tot ceea ce vrea toata lumea.
Tabelul parcelelor arata asa:
, si daca nici datele astea nu le ai ce fisier CP vrei sa faci?
583/296px 38.4KB
Am scris un program Autolisp care raporteaza puncte dintr-un fisier csv, il mai perfectionez putin, si daca sunteti interesati de el il postez gratuit.In acest moment studiez Visual Basic program in care se pot scrie programe mai profesional.
Felicitari John pentru programele realizate, esti cu adevarat un tip foarte inteligent.
Cu respect,
Dan.
Mersi, dar nu cred ca sunt eu asa inteligent.... cred ca stiu doar atât cât sa-mi dau seama ce putine stiu de fapt... iar restul e pasiune.
John, eu mi-am dat cu parerea din ce am vazut in poze. Daca ma crezi, nu am facut niciodata CP multiplu, de fapt nu am mai facut vreun CP de cel putin jumatate de an (am alti colegi care se ocupa de asta
). Textele din desen nu cred ca ar fi chiar greu de manipulat, mai ales daca sunt create pe layere diferite si dupa niste reguli precise. M-ar bate gandul sa fac eu aplicatia asta, dar, deh, lenea-i mare...si oricum, nu prea am tangenta cu domeniul...
@DanCAD, vezi ca VB nu mai este suportat oficial de AutoCAD-urile mai recente de vers. 2009 parca, iar user-ul trebuie sa instaleze singur suportul pt. VB (asta daca vrei sa faci aplicatii comerciale).
Si pt. cei care se pricep, as avea nevoie de o indrumare pentru un program:
-sa zicem ca am intr-un desen 2 borne care se numesc A1 si B1 si cate 3 repere pentru fiecare. Reperele au denumirea A1R1, A1R2, A1R3, B1R1, B1R2, B1R3. Eu vreau sa duc cate o linie din borna in fiecare reper care ii corespunde automat, adica sa am cate 3 linii pentru fiecare borna in parte. Eu am incercat ceva, dar problema este ca in aplicatia mea imi duce o linie din A1 in A1R1, dar sare peste celelalte 2 repere, apoi imi duce o linie din B1 in B1R1, dar sare peste celelalte 2 si tot asa.
Poate aveti o rezolvare sau o idee.
@zamfy: da, inteleg si mersi pentru sfaturi. Insa culegerea informatiilor din textele din desen mi se pare cel putin inutil de greoaie si imprecisa, ca sa nu zic aiurea. In plus, constrangerea utilizatorilor pe anumite structuri fixe prestabilite ale desenului nu e nici ea o solutie buna, constrangerile trebuie sa fie minime si cat mai usor de indeplinit.
Dar, in fine, fiecare face cum vrea el ca de-aia e democratie, si vedem pe urma cum ar fi fost mai bine - n-are rost sa despicam firul in patru aici pe chestiuni care tin prea mult de impresiile personale. O sa revin cu o prezentare mai completa saptamana viitoare, ori aici ori la rubrica "Vanzari" si mai vedem.
John Doe a scris:
Adresa proprietarilor este scrisa ca fiind in judetul in care sunt parcelele, UAT-ul la fel iar la localitate se trece NEIDENTIFICATA (fara strada si numar) - valabil pentru toata tara. Datele personale ale proprietarilor nu se trec.
|
John, pentru chestia asta hai sa-ti dau o idee: poti sa treci in CP orice localitate din Romania, nu trebuie sa o treci neidentificata! Daca ai TopoLT instalat, cauta fisierul Siruta.csv si acolo ai codurile Sirsup si Siruta pentru orice localitate din Romania. Daca nu il ai, ti-l trimit eu:
http://www.fileshare.ro/30392169203.5
Nu cred ca iti ia mai mult de 10 minute sa implementezi o rutina care genereaza codul Siruta si Sirsup in programul tau, pe baza fisierului de acolo. Succes!
Am imbunatatit destul de mult programul care genereaza puncte pe contur, asa ca m-am decis sa il postez din nou:
http://www.fileshare.ro/30393993662.4
Mersi, am si eu fisierul ala dar problema e alta: proprietarii inscrisi in Titlurile de proprietate nu au si datele personale acolo, deci chiar nu se stie ce domiciliu au. Asa ca, oficial, se trece localitatea "neidentificata". Asa e trecut si in exemplul de fisier CPXML primit oficial de la un OCPI de care m-am folosit ca exemplu.
Codurile SIRUTA si SIRSUP le am si eu toate, chiar le folosesc in alta aplicatie care face dosare de intabulare la foc automat cu toate anexele si cu fisiere DXF si CPXML cu tot, si in aplicatia asta scriu chiar datele reale ale proprietarilor, fiindca le cunosc, avand in fata actele de intabulare ale parcelei respective. Deci rutina de care spui o am de mult. SI daca se va cere sa fie trecuta la localitatea de domiciliu a proprietarilor UAT-ul unde e parcela, sunt vreo trei linii de program in plus deci no problem.
Mersi din nou pentru sugestii.
Sa-ti zic si eu ceva: am postat mai demult pe-aici pe undeva o rutina care genereaza puncte pe un contur cu tabelul de coordonate langa, ai vazut-o? E open source. Poate iti foloseste. Am incercat sa pozitionez ceva mai bine textele de la numarul punctelor cu "BL" , "TL" si altele functie de distanta pana la punctul anterior si orientarea segmentului. Depinde si cum te-ai obisnuit, pentru mine e mult mai convenabil decat rutina din TopoLT, care am impresia ca face mai mult ce vrea ea si mai putin ce vreau eu.
Da, ai dreptate, am uitat ca CP-urile de tipul acesta se fac doar pentru extravilan
. Dar poate ii va folosi cuiva fisierul respectiv.
Am aplicatia de care spui tu si chiar m-am inspirat din ea pentru alte programe pe care le-am facut. Cred ca o sa iau din ea portiunea de cod care genereaza inventarul de coordonate
.
Pe aceasta iti multumesc si tie si tuturor celor care au pus coduri sursa aici, sunt de 1 milion de ori mai bune decat orice carte de lisp. Iar in viitor, daca voi crea programe mai bune, le voi posta cu siguranta aici.
Codurile alea au si putin suflet in ele... asa au fos scrise, asa au fost postate. Oricum ar fi, eu si ceilalti autori iti multumim pentru apreciere.
O sa revin si eu, cred ca ar mai fi ceva interesant de postat in materie de aplicatii utile. Dar repet si aici ce am spus cuiva pe privat: niciodata nu voi mai munci ca sa fac gratis munca altuia. Deci aplicatia cu generare de CPXML am s-o fac cat de buna pot, dar nu va fi gratis.
John Doe a scris:
...Dar repet si aici ce am spus cuiva pe privat: niciodata nu voi mai munci ca sa fac gratis munca altuia.... |
Generozitatea inseamna sa dai mai mult decat poti si mandria inseamna sa iei mai putin decat ai nevoie. (Khalil Gibran)
Modificat de advex (08-10-2011 19:35:36)
_______________________________________
http://info-topograf.blogspot.ro/
Sigur va fi mai putin decat am eu nevoie...
Salut JohnDoe, am convertit in programul tau PunePuncte_pe_contur, conversie automata din LISP in LISPmatemtatic/C+.
Modificat de diagodose2009 (20-02-2012 11:46:22)
_______________________________________
http://we.tl/D8HOKFyTJ7
Bun... tu imi spui ce sa fac... iar eu te intreb: de ce crezi ca as face asta?
Si... dezactiveaza-ti smilies cand mai postezi coduri. Sau scrie [ code ] si [ / code ] la inceput si sfarsit (fara spatii).
@diagodose2009: nu e chiar programul meu, tin minte ce-am scris in el. Ce as avea de spus:
Aplicatia numeroteaza punctele unui contur. Nu am verificat, probabil ca merge dar punctele par sa fie puse doar la un offset, unele se vor suprapune cu conturul iar daca sunt mai dese se vor suprapune unele cu altele.
Nu am observat sa puna nici distantele dintre puncte, oare nu ar fi bine? Si nici tabelul de coordonate nu-l scoate, nu ar fi misto sa-l puna in desen ca tabel sau intr-un fisier extern, de exemplu CSV ca sa te poti juca cu el in Excel ?
Si ar mai fi ceva: presupun ca conturul este o polilinie. Functie de o variabila (PLINEGEN, cred - nu mai stiu sigur), primul si ultimul punct al unei polilinii pot sa se repete chiar daca polilinia este inchisa, ai tratat aspectul asta?
Oricum, e ceva; si asa, cate putin, se poate construi un set de aplicatii utile usor de implementat in mediul CAD.
In alta ordine de idei: am reusit sa termin aplicatia pentru generarea fisierului CPXML unic pe tarla. Deci se poate. Gasiti un PDF cu mai multe despre la http://dl.transfer.ro/transfer_ro-14oct ... eda8a6.zip
@John Doe : am vizualizat pdf-ul tau si as vrea sa iti adresez o intrebare
Cat ar costa lisp-ul tau?, sau care ar fi conditiile in cara s-ar putea intra in posesia lui?
Ti-am trimis mesaj pe privat despre pret si conditii.
caut un lisp care sa-mi faca suma unor numere in autocad...
similar excelului cand selectezi mai multe casute iti afiseaza undeva in dreapta jos
are cineva asa ceva?
stiu ca face TopoLT dar nu imi merge pe AutoCAD 2012 si sa nu ma mai chinui pt asta sa deschid win virtuas si sa intru in AutoCAD 2009....
intre timp am reusit sa gasesc unul care face exact ce vroiam eu
chiar mai mult
aduna valorile selectate (suprafetele unui releveu) si nu numai ca afiseaza valoarea dar o si scrie ca text in autocad
---------------------------------------------------
(defun C:STX (/ cpent elist en ip newtxt pt ss sum sumtxt txt)
(princ "\n\t\t>>> Select text to get summ >>>"
(if
;;select texts/mtexts on screen :
(setq ss (ssget '((0 . "*TEXT"
)))
;; if selected then :
(progn
;; store the first text entity for using 'em further :
(setq cpent (ssname ss 0))
;; set initial sum to zero :
(setq sum 0.)
;; loop trough selected texts/mtexts :
(while
;; get the first text in selection :
(setq en (ssname ss 0))
;; get entity list of them :
(setq elist (entget en))
;; get the textstring by key 1 from entity list :
(setq txt (cdr (assoc 1 elist)))
;; create output string :
(setq sumtxt
;; concatenate strings :
(strcat
;; convert digits to string :
(rtos
;; add to summ the digital value of text :
(setq sum (+ (atof txt) sum))
;; 2 is for metric units (3 for engineering) :
2
;; set precision by current :
(getvar "dimdec"
))
)
;; delete entity from selection set :
(ssdel en ss)
)
;; display message in the command line:
(princ (strcat "\nSumm=" sumtxt))
(setq pt (getpoint "\nSpecify the new text location: "
)
;; get the insertion point of stored entity :
(setq ip (cdr (assoc 10 (entget cpent))))
;; copy text entity to the new destination point :
(command "_copy" cpent "" ip pt)
;; get the last created entity :
(setq newtxt (entlast))
;; get entity list of them :
(setq elist (entget newtxt))
;; modify entity list with new text string :
(entmod (subst (cons 1 sumtxt)(assoc 1 elist) elist))
;; update changes :
(entupd newtxt)
)
)
(princ)
)
(princ "\nStart command with STX..."
(princ)
---------------------------------------------------
bogdan.cadastru a scris:
caut un lisp care sa-mi faca suma unor numere in autocad... |
Daca o sa apelezi la prietenul Google sunt convins ca o sa gasesti o multime de aplicatii care pot sa te ajute.
La http://www.theswamp.org/index.php?topic=32984.msg384478 (autor Alan J. Thompson) este disponibil un lisp care rezolva toata gama de operatii aritmetice.
Code:
;;; ------------------------------------------------------------------------ ;;; CombineValues.lsp v1.2 ;;; ;;; Copyright© 04.09.10 ;;; Alan J. Thompson (alanjt) ;;; ;;; Contact: alanjt @ TheSwamp.org, CADTutor.net ;;; ;;; Permission to use, copy, modify, and distribute this software ;;; for any purpose and without fee is hereby granted, provided ;;; that the above copyright notice appears in all copies and ;;; that both that copyright notice and the limited warranty and ;;; restricted rights notice below appear in all supporting ;;; documentation. ;;; ;;; The following program(s) are provided "as is" and with all faults. ;;; Alan J. Thompson DOES NOT warrant that the operation of the program(s) ;;; will be uninterrupted and/or error free. ;;; ;;; Allows user to combine extracted numerical values of selected Attribute, ;;; Civil 3D Point, Land Desktop Point, MText, MultiLeader, Text or typed value. ;;; ;;; Combine options include: Add, Divide, Multiply, Subtract (can be changed at any time). ;;; If user only adds values, an option to average is available. ;;; Upon completion, user is prompted to specify placement point MText with final value. ;;; ;;; Revision History: ;;; ;;; v1.1 (04.11.10) 1. Updated subroutine: AT:ExtractNumbers ;;; ;;; v1.2 (04.13.10) 1. Reworked AT:ExtractNumbers subroutine. ;;; 2. Added subroutine AT:ListSelect to select numbers when multiple exist in string. ;;; 3. If multiple numbers exist in string, user is prompted with list box ;;; to select each desired number. If multiple numbers are selected, they are ;;; combined and added to display. ;;; 4. Added CV:StripFormat subroutine, as taken from StripMText 5.0b, ;;; Copyright© Steve Doman and Joe Burke 2010 (with permission), to avoid any ;;; issues with extracting numbers out text formatting. (Thank you Joe & Steve) ;;; ;;; ------------------------------------------------------------------------
(defun c:AV (/) (c:CombineValues)) (defun c:CombineValues (/ *error* AT:ExtractNumbers AT:Str2Lst AT:MText AT:Entsel AT:ListSelect CV:StripFormat _sel dZin f i obj num nStr final pt ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SUBROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; error handler (defun *error* (msg) (and dZin (setvar 'dimzin dZin)) (and msg (not (wcmatch (strcase msg) "*BREAK*,*CANCEL*,*QUIT*")) (princ (strcat "\nError: " msg)) ) )
;;; Extract numbers from string ;;; #String - String to extract numbers from ;;; Required Subroutines: AT:Str2Lst ;;; Alan J. Thompson, 11.13.09 / 04.08.10 (defun AT:ExtractNumbers (Str / i l) (setq i -1) (mapcar (function atof) (AT:Str2Lst (vl-list->string (mapcar (function (lambda (x) (setq i (1+ i)) (cond ;; number ((< 47 x 58) x) ;; - and number following ((and (eq x 45) (< 47 (nth (1+ i) l) 58)) x) ;; . and follows a number ((and (eq x 46) (not (minusp (1- i))) (< 47 (nth (1- i) l) 58)) x) (t 32) ) ) ) (setq l (vl-string->list (vl-princ-to-string Str))) ) ) " " ) ) )
;;; Convert string to list, based on separator ;;; #Str - String to convert ;;; #Sep - Separator to break string into items ;;; Ex. - (AT:Str2Lst "1,2,3" ",") -> '("1" "2" "3") ;;; Alan J. Thompson, 11.11.09 (defun AT:Str2Lst (#Str #Sep / #Inc #List #Str) (while (setq #Inc (vl-string-search #Sep #Str)) (setq #List (cons (substr #Str 1 #Inc) #List)) (setq #Str (substr #Str (+ 2 #Inc))) ) ;_ while (vl-remove "" (append (reverse #List) (list #Str))) ) ;_ defun
;;; Add MText to drawing ;;; Pt - MText insertion point ;;; Str - String to place in created MText object ;;; Wd - Width of MText object (if nil, will be 0 width) ;;; Lay - Layer to place Mtext object on (nil for current) ;;; Jus - Justification # for Mtext object ;;; 1 or nil= TopLeft ;;; 2= TopCenter ;;; 3= TopRight ;;; 4= MiddleLeft ;;; 5= MiddleCenter ;;; 6= MiddleRight ;;; 7= BottomLeft ;;; 8= BottomCenter ;;; 9= BottomRight ;;; Alan J. Thompson, 05.23.09 / 04.09.10 (defun AT:MText (Pt Str Wd Lay Jus / Wd s o) (or Wd (setq Wd 0.)) (or *AcadDoc* (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object)))) (setq s (if (or (eq acmodelspace (vla-get-activespace *AcadDoc*)) (eq :vlax-true (vla-get-mspace *AcadDoc*)) ) (vla-get-modelspace *AcadDoc*) (vla-get-paperspace *AcadDoc*) ) Pt (cond ((vl-consp Pt) (vlax-3d-point Pt)) ((eq (type Pt) 'variant) Pt) ) ) (vla-put-lock (vlax-ename->vla-object (tblobjname "layer" (getvar 'clayer))) :vlax-false) (setq o (vla-addMText s Pt Wd (vl-princ-to-string Str))) (and Lay (tblsearch "layer" Lay) (vla-put-layer o Lay)) (cond ((vl-position Jus '(1 2 3 4 5 6 7 8 9)) (vla-put-AttachmentPoint o Jus) (vla-put-InsertionPoint o Pt) ) ) o )
;;; Entsel or NEntsel with options ;;; #Nested - Entsel or Nentsel (T for Nentsel, nil for Entsel) ;;; #Message - Selection message (if nil, "\nSelect object: " is used) ;;; #FilterList - DXF ssget style filtering (nil if not required) ;;; "V" as first item in list to convert object to VLA-OBJECT (must be in list if no DXF filtering) ;;; "L" as first item in list to ignore locked layers (must be in list if no DXF filtering) ;;; #Keywords - Keywords to match instead of object selection (nil if not required) ;;; Example: (AT:Entsel nil "\nSelect MText not on 0 layer [Settings]: " '("LV" (0 . "MTEXT")(8 . "~0")) "Settings") ;;; Example: (AT:Entsel T "\nSelect object [Settings]: " '("LV") "Settings") ;;; Alan J. Thompson, 04.16.09 ;;; Updated: Alan J. Thompson, 06.04.09 (changed filter coding to work as ssget style dxf filtering) ;;; Updated: Alan J. Thompson, 09.07.09 (added option to ignore locked layers and convert object to VLA-OBJECT ;;; Updated: Alan J. Thompson, 09.18.09 (fixed 'missed pick' alert) (defun AT:Entsel (#Nested #Message #FilterList #Keywords / #Count #Message #Choice #Ent #VLA&Locked #FilterList ) (vl-load-com) (setvar "errno" 0) (setq #Count 0) ;; fix message (or #Message (setq #Message "\nSelect object: ")) ;; set entsel/nentsel (if #Nested (setq #Choice nentsel) (setq #Choice entsel) ) ;_ if ;; check if option to convert to vla-object or ignore locked layers in #FilterList variable (and (vl-consp #FilterList) (eq (type (car #FilterList)) 'STR) (setq #VLA&Locked (car #FilterList) #FilterList (cdr #FilterList) ) ;_ setq ) ;_ and ;; select object (while (and (not #Ent) (/= (getvar "errno") 52)) ;; if keywords (and #Keywords (initget #Keywords)) (cond ((setq #Ent (#Choice #Message)) ;; if ignore locked layers (and #VLA&Locked (vl-consp #Ent) (wcmatch (strcase #VLA&Locked) "*L*") (not (zerop (cdr (assoc 70 (entget (tblobjname "layer" (cdr (assoc 8 (entget (car #Ent))))) ;_ tblobjname ) ;_ entget ) ;_ assoc ) ;_ cdr ) ;_ zerop ) ;_ not (setq #Ent nil #Flag T ) ;_ setq ) ;_ and ;; #FilterList check (if (and #FilterList (vl-consp #Ent)) ;; process filtering from #FilterList (or (not (member nil (mapcar '(lambda (x) (wcmatch (strcase (vl-princ-to-string (cdr (assoc (car x) (entget (car #Ent))))) ;_ vl-princ-to-string ) ;_ strcase (strcase (vl-princ-to-string (cdr x))) ) ;_ wcmatch ) ;_ lambda #FilterList ) ;_ mapcar ) ;_ member ) ;_ not (setq #Ent nil #Flag T ) ;_ setq ) ;_ or ) ;_ if ) ) ;_ cond (and (or (= (getvar "errno") 7) #Flag) (/= (getvar "errno") 52) (not #Ent) (setq #Count (1+ #Count)) (prompt (strcat "\nNope, keep trying! " (itoa #Count) " missed pick(s).") ;_ strcat ) ;_ prompt ) ;_ and ) ;_ while (if (and (vl-consp #Ent) #VLA&Locked (wcmatch (strcase #VLA&Locked) "*V*")) ;_ and (vlax-ename->vla-object (car #Ent)) #Ent ) ;_ if ) ;_ defun
;list select dialog ;create a temp DCL multi-select list dialog from provided list ;value is returned in list form, DCL file is deleted when finished ;example: (setq the_list (AT:listselect "This is my list title" "Select items to make a list" "25" "30" "true" (list "object 1" "object 2" "object 3")) ;if mytitle is longer than defined width, the width will be ignored and it will fit to title string ;if mylabel is longer than defined width, mylabel will be truncated ;myheight and mywidth must be strings, not numbers ;mymultiselect must either be "true" or "false" (true for multi, false for single) ;created by: alan thompson, 9.23.08 ;some coding borrowed from http://www.jefferypsanders.com (thanks for the DCL examples)
(defun AT:ListSelect (mytitle ;title for dialog box mylabel ;label right above list box myheight ;height of dialog box !!*MUST BE STRING*!! mywidth ;width of dialog box !!*MUST BE STRING*!! mymultiselect ;"true" for multiselect, "false" for single select mylist ;list to display in list box / retlist readlist count item savevars fn fo valuestr dcl_id ) (defun saveVars (/ readlist count item) (setq retList (list)) (setq readlist (get_tile "mylist")) (setq count 1) (while (setq item (read readlist)) (setq retlist (append retList (list (nth item myList)))) (while (and (/= " " (substr readlist count 1)) (/= "" (substr readlist count 1)) ) (setq count (1+ count)) ) (setq readlist (substr readlist count)) ) ) ;defun (setq fn (vl-filename-mktemp "" "" ".dcl")) (setq fo (open fn "w")) (setq valuestr (strcat "value = \"" mytitle "\";")) (write-line (strcat "list_select : dialog { label = \"" mytitle "\";") fo) (write-line (strcat " : column { : row { : boxed_column { : list_box { label =\"" mylabel "\"; key = \"mylist\"; allow_accept = true; height = " myheight "; width = " mywidth "; multiple_select = " mymultiselect "; fixed_width_font = false; value = \"0\"; } } } : row { : boxed_row { : button { key = \"accept\"; label = \" Okay \"; is_default = true; } : button { key = \"cancel\"; label = \" Cancel \"; is_default = false; is_cancel = true; } } } } }" ) fo ) (close fo) (setq dcl_id (load_dialog fn)) (new_dialog "list_select" dcl_id) (start_list "mylist" 3) (mapcar 'add_list myList) (end_list) (action_tile "cancel" "(setq ddiag 1)(done_dialog)") (action_tile "accept" "(setq ddiag 2)(saveVars)(done_dialog)") (start_dialog) (if (= ddiag 1) (setq retlist nil) ) (unload_dialog dcl_id) (vl-file-delete fn) retlist ) ;defun
;; StripFormat as taken (with permission) from the following: ;; StripMtext Version 5.0b for AutoCAD 2000 and above ;; Copyright© Steve Doman and Joe Burke 2010 ;; Location: http://www.theswamp.org/index.php?topic=31584.0 ;; Arguments: ;; str - an mtext string. ;; formats - a list of format code strings or a string. ;; Format code arguments are not case sensitive. ;; Examples: ;; Remove Font, Overline and Underline formatting. ;; (StripFormat <mtext string> (list "f" "O" "U")) ;; Or a quoted list: ;; (StripFormat <mtext string> '("f" "O" "U")) ;; Or a string: ;; (StripFormat <mtext string> "fOU") ;; Remove all formatting except Overline and Underline. ;; (StripFormat <mtext string> (list "*" "^O" "^U")) ;; Or a quoted list: ;; (StripFormat <mtext string> '("*" "^O" "^U")) ;; Or a string: ;; (StripFormat <mtext string> "*^O^U") ;; Available codes: ;; A (^A) - Alignment ;; B (^B) - taBs ;; C (^C) - Color ;; F (^F) - Font ;; H (^H) - Height ;; L (^L) - Linefeed (newline, line break, carriage return) ;; O (^O) - Overline ;; Q (^Q) - obliQuing ;; P (^P) - Paragraph (embedded justification, line spacing and indents) ;; S (^S) - Stacking ;; T (^T) - Tracking ;; U (^U) - Underline ;; W (^W) - Width ;; ~ (^~) - non-breaking space ;; * - all formats (defun CV:StripFormat (str formats / FormatsToList text slashflag lbrace rbrace RE:Replace RE:Execute Alignment Tab Color Font Height Linefeed Overline Paragraph Oblique Stacking Tracking Underline Width Braces HardSpace ) ;; Argument: either a list of strings or a string. ;; Given a list, ensure formats are uppercase. ;; Given a formats string, convert it to a list of uppercase strings. ;; Examples: (FormatsToList "fOU") > ("F" "O" "U") ;; (FormatsToList "f^OU") > ("F" "^O" "U") (defun FormatsToList (arg / lst) (cond ((= (type arg) 'LIST) (mapcar 'strcase arg)) ((= (type arg) 'STR) (while (not (eq "" (substr arg 1))) (if (eq "^" (substr arg 1 1)) (setq lst (cons (strcat "^" (substr arg 2 1)) lst) arg (substr arg 3) ) (setq lst (cons (substr arg 1 1) lst) arg (substr arg 2) ) ) ) (mapcar 'strcase (reverse lst)) ) ) ) ; end FormatsToList (setq formats (FormatsToList formats)) ;; Access the RegExp object from the blackboard. ;; Thanks to Steve for this idea. (or (vl-bb-ref '*REX*) (vl-bb-set '*REX* (vlax-create-object "VBScript.RegExp"))) (defun RE:Replace (newstr pat string) (vlax-put (vl-bb-ref '*REX*) 'Pattern pat) (vlax-put (vl-bb-ref '*REX*) 'Global actrue) (vlax-put (vl-bb-ref '*REX*) 'IgnoreCase acfalse) (vlax-invoke (vl-bb-ref '*REX*) 'Replace string newstr) ) ;end (defun RE:Execute (pat string / result match idx lst) (vlax-put (vl-bb-ref '*REX*) 'Pattern pat) (vlax-put (vl-bb-ref '*REX*) 'Global actrue) (vlax-put (vl-bb-ref '*REX*) 'IgnoreCase acfalse) (setq result (vlax-invoke (vl-bb-ref '*REX*) 'Execute string)) (vlax-for x result (setq match (vlax-get x 'Value) idx (vlax-get x 'FirstIndex) ;; position within string - zero based - first position is zero lst (cons (list match idx) lst) ) ) lst ) ;end ;; Replace linefeeds using this format "\n" with the AutoCAD ;; standard format "\P". The "\n" format occurs when text is ;; copied to ACAD from some other application. (setq str (RE:Replace "\\P" "\\n" str)) ;;;;; Start remove formatting sub-functions ;;;;; ;; A format (defun Alignment (str) (RE:Replace "" "\\\\A[012];" str)) ;; B format (tabs) (defun Tab (str / lst origstr tempstr) (setq lst (RE:Execute "\\\\P\\t|[0-9]+;\\t" str)) (foreach x lst (setq origstr (car x) tempstr (RE:Replace "" "\\t" origstr) str (vl-string-subst tempstr origstr str) ) ) (RE:Replace " " "\\t" str) ) ;; C format (defun Color (str) ;; True color and color book integers are preceded ;; by a lower case "c". Standard colors use upper case "C". (RE:Replace "" "\\\\[Cc][0-9]?[.]?[0-9]+;" str) ) ;; F format (defun Font (str) (RE:Replace "" "\\\\[Ff].*?;" str)) ;; H format (defun Height (str) (RE:Replace "" "\\\\H[0-9]?[.]?[0-9]+x;" str) ;; This also works, but it's not as clear as the above. ;; (RE:Replace "" "\\\\H\\d\\.?\\d*x;" str) ) ;; L format ;; Leading linefeeds are not converted to spaces. (defun Linefeed (str / teststr) ;; Remove formatting from test string other than linefeeds. ;; Seems there's no need to check for stacking ;; because a linefeed will always come before stack formatting. (setq teststr (Alignment str) teststr (Color teststr) teststr (Font teststr) teststr (Height teststr) teststr (Overline teststr) teststr (Paragraph teststr) teststr (Oblique teststr) teststr (Tracking teststr) teststr (Underline teststr) teststr (Width teststr) teststr (Braces teststr) ) ;; Remove leading linefeeds. (while (eq "\\P" (substr teststr 1 2)) (setq teststr (substr teststr 3) str (vl-string-subst "" "\\P" str) ) ) (RE:Replace " " " \\\\P|\\\\P |\\\\P" str) ) ;; O format (defun Overline (str) (RE:Replace "" "\\\\[Oo]" str)) ;; This option is effectively the same as the Remove Formatting > ;; Remove Paragraph Formatting option avaiable in the 2008 Mtext editor. (defun Paragraph (str) (RE:Replace "" "\\\\p.*?;" str)) ;; Q format - numeric value may be negative. (defun Oblique (str) ;; Any real number including negative values. (RE:Replace "" "\\\\Q[-]?[0-9]*?[.]?[0-9]+;" str) ) ;; S format (defun Stacking (str / lst tempstr pos origstr teststr testpos numcheck) (setq lst (RE:Execute "\\\\S(.*?)(\\;)" str)) (foreach x lst (setq tempstr (car x) pos (cadr x) origstr tempstr ) ;; Remove formatting from test string other than stacking. (setq teststr (Alignment str) teststr (Color teststr) teststr (Font teststr) teststr (Height teststr) teststr (Linefeed teststr) teststr (Overline teststr) teststr (Paragraph teststr) teststr (Oblique teststr) teststr (Tracking teststr) teststr (Underline teststr) teststr (Width teststr) teststr (Braces teststr) ) ;; Remove all "{" characters if present. Added JB 2/1/2010. (setq teststr (RE:Replace "" "[{]" teststr)) ;; Get the stacked position within test string. (setq testpos (cadar (RE:Execute "\\\\S(.*?)(\\;)" teststr))) ;; Avoid an error with substr if testpos is zero. ;; A space should not be added given a stacked ;; fraction string which is simply like this 1/2" anyway. (if (/= 0 testpos) (setq numcheck (substr teststr testpos 1)) ) ;; Check whether the character before a stacked string/fraction ;; is a number. Add a space if it is. (if (and numcheck (<= 48 (ascii numcheck) 57)) (setq tempstr (RE:Replace " " "\\\\S" tempstr)) (setq tempstr (RE:Replace "" "\\\\S" tempstr)) ) (setq tempstr (RE:Replace "/" " tempstr (RE:Replace "" "[;]" tempstr) tempstr (RE:Replace "" "\\\\A(.*?)[;]" tempstr) tempstr (RE:Replace "" "\\^" tempstr) str (vl-string-subst tempstr origstr str pos) ) ) str ) ;; T format (defun Tracking (str) (RE:Replace "" "\\\\T[0-9]?[.]?[0-9]+;" str)) ;; U format (defun Underline (str) (RE:Replace "" "\\\\[Ll]" str)) ;; W format (defun Width (str) (RE:Replace "" "\\\\W[0-9]?[.]?[0-9]+;" str)) ;; ~ format ;; In 2008 a hard space includes font formatting. ;; In 2004 it does not, simply this \\~. (defun HardSpace (str) (RE:Replace " " "{\\\\[Ff](.*?)\\\\~}|\\\\~" str)) ;; Remove curly braces. Called after other formatting is removed. (defun Braces (str / lst origstr tempstr len teststr) (setq lst (RE:Execute "{[^\\\\]+}" str)) (foreach x lst (setq origstr (car x) tempstr (RE:Replace "" "[{}]" origstr) str (vl-string-subst tempstr origstr str) ) ) ;; Added JB 12/20/2009 ;; Last ditch attempt at remove braces from start and end of string. (setq len (strlen str)) (if (and (= 123 (ascii (substr str 1 1))) (= 125 (ascii (substr str len 1))) (setq teststr (substr str 2)) (setq teststr (substr teststr 1 (1- (strlen teststr)))) (not (vl-string-search "{" teststr)) (not (vl-string-search "}" teststr)) ) (setq str teststr) ) str ) ;;;;; End remove formatting sub-functions ;;;;; ;;;;; Start primary function ;;;;; ;; Temporarily replace literal backslashes with a unique string. ;; Literal backslashes are restored at end of function. By Steve Doman. (setq slashflag (strcat "<" (substr (rtos (getvar "CDATE") 2 8) 14) ">")) (setq text (RE:Replace slashflag "\\\\\\\\" str)) ;; Temporarily replace literal left curly brace. (setq lbrace (strcat "<L" (substr (rtos (getvar "CDATE") 2 8) 14) ">")) (setq text (RE:Replace lbrace "\\\\{" text)) ;; Temporarily replace literal right curly brace. (setq rbrace (strcat "<" (substr (rtos (getvar "CDATE") 2 8) 14) "R>")) (setq text (RE:Replace rbrace "\\\\}" text)) (if (or (vl-position "A" formats) (and (vl-position "*" formats) (not (vl-position "^A" formats))) ) (setq text (Alignment text)) ) (if (or (vl-position "B" formats) (and (vl-position "*" formats) (not (vl-position "^B" formats))) ) (setq text (Tab text)) ) (if (or (vl-position "C" formats) (and (vl-position "*" formats) (not (vl-position "^C" formats))) ) (setq text (Color text)) ) (if (or (vl-position "F" formats) (and (vl-position "*" formats) (not (vl-position "^F" formats))) ) (setq text (Font text)) ) (if (or (vl-position "H" formats) (and (vl-position "*" formats) (not (vl-position "^H" formats))) ) (setq text (Height text)) ) (if (or (vl-position "L" formats) (and (vl-position "*" formats) (not (vl-position "^L" formats))) ) (setq text (Linefeed text)) ) (if (or (vl-position "O" formats) (and (vl-position "*" formats) (not (vl-position "^O" formats))) ) (setq text (Overline text)) ) (if (or (vl-position "P" formats) (and (vl-position "*" formats) (not (vl-position "^P" formats))) ) (setq text (Paragraph text)) ) (if (or (vl-position "Q" formats) (and (vl-position "*" formats) (not (vl-position "^Q" formats))) ) (setq text (Oblique text)) ) (if (or (vl-position "S" formats) (and (vl-position "*" formats) (not (vl-position "^S" formats))) ) (setq text (Stacking text)) ) (if (or (vl-position "T" formats) (and (vl-position "*" formats) (not (vl-position "^T" formats))) ) (setq text (Tracking text)) ) (if (or (vl-position "U" formats) (and (vl-position "*" formats) (not (vl-position "^U" formats))) ) (setq text (Underline text)) ) (if (or (vl-position "W" formats) (and (vl-position "*" formats) (not (vl-position "^W" formats))) ) (setq text (Width text)) ) (if (or (vl-position "~" formats) (and (vl-position "*" formats) (not (vl-position "^~" formats))) ) (setq text (HardSpace text)) ) (setq text (Braces (RE:Replace "\\\\" slashflag text)) text (RE:Replace "\\{" lbrace text) text (RE:Replace "\\}" rbrace text) ) text ) ; end StripFormat
(defun _sel (/ o) (if (setq o (AT:Entsel t (strcat "\nSelect text object to " *AV:Fnc* " or " (if final "[Add/Divide/Multiply/Subtract/Type]: " "[Type]: " ) ) '("V" (0 . "AECC_COGO_POINT,AECC_POINT,ATTDEF,ATTRIB,MULTILEADER,MTEXT,TEXT")) (if final "Add Divide Multiply Subtract Type" "Type" ) ) ) (cond ((eq o "Add") (setq f "+") (setq *AV:Fnc* "Add") (_sel)) ((eq o "Divide") (setq f "/") (setq *AV:Fnc* "Divide") (_sel)) ((eq o "Multiply") (setq f "*") (setq *AV:Fnc* "Multiply") (_sel)) ((eq o "Subtract") (setq f "-") (setq *AV:Fnc* "Subtract") (_sel)) ((eq o "Type") (initget 6) (setq o (getreal (strcat "\nNumber to " *AV:Fnc* ": ")))) (T o) ) ) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MAIN ROUTINE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(vl-load-com)
(or *AV:Fnc* (setq *AV:Fnc* "Add")) (and (setq dZin (getvar 'dimzin)) (setvar 'dimzin 0))
(initget 0 "Add Divide Multiply Subtract") (setq *AV:Fnc* (cond ((getkword (strcat "\nChoose function [Add/Divide/Multiply/Subtract] <" *AV:Fnc* ">: ") ) ) (*AV:Fnc*) ) ) (setq f (cond ((eq *AV:Fnc* "Add") "+") ((eq *AV:Fnc* "Divide") "/") ((eq *AV:Fnc* "Multiply") "*") ((eq *AV:Fnc* "Subtract") "-") ) i 0. ) (while (setq obj (_sel)) (if (cond ;; real value ((eq (type obj) 'REAL) (setq num obj)) ;; LDD point ((and (eq (vla-get-objectname obj) "AeccDbPoint") (not (vl-catch-all-error-p (setq num (vl-catch-all-apply (function (lambda () (cadddr (assoc 11 (entget (vlax-vla-object->ename obj))))) ) ) ) ) ) ) num ) ;; C3D point ((and (eq (vla-get-objectname obj) "AeccDbCogoPoint") (not (vl-catch-all-error-p (setq num (vl-catch-all-apply (function vlax-get-property) (list obj 'Elevation))) ) ) ) (setq num (car (AT:ExtractNumbers num))) ) ;; attribute, multileader, mtext, text (T ;;(T (setq num (apply (function (eval (read f))) (AT:ExtractNumbers (vla-get-textstring obj))))) ;;(T (setq num (car (AT:ExtractNumbers (vla-get-textstring obj))))) ;| (setq num ((lambda (n) (foreach x (AT:ExtractNumbers (StripFormat (vla-get-textstring obj) "*")) (setq n ((eval (read f)) x n)) ) ) 0. ) ) |;
(if (> (length (setq num (AT:ExtractNumbers (CV:StripFormat (vla-get-textstring obj) "*")))) 1 ) (if (setq num (AT:ListSelect (strcat "Multiple numbers to: " *AV:Fnc*) "Choose numbers:" "10" "5" "true" (mapcar (function vl-princ-to-string) num) ) ) (setq i (+ i (1- (length num))) num ((lambda (n) (foreach x (mapcar (function atof) num) (setq n ((eval (read f)) x n)) ) ) 0. ) ) ) (setq num (car num)) )
) ) (if final (progn (setq final ((eval (read f)) final num) nStr (strcat nStr " " f " " (vl-princ-to-string num)) i (1+ i) ) (princ (strcat nStr " = " (vl-princ-to-string final))) ) (progn (setq final num nStr (strcat "\n" (vl-princ-to-string num)) i (1+ i) ) (princ (strcat nStr " " f)) ) ) (princ "\nValue does not contain number!") ) ) (and nStr (> i 1) (if (and (eq *AV:Fnc* "Add") (not (wcmatch nStr "*/*,*`**,*-*"))) (setq pt (initget 0 "Average") pt (getpoint (strcat nStr " = " (vl-princ-to-string final) "\nSpecify text placement or [Average]: " ) ) ) (setq pt (getpoint (strcat nStr " = " (vl-princ-to-string final) "\nSpecify text placement: ")) ) ) (if (vl-consp pt) (AT:MText (trans pt 1 0) (rtos final) nil nil 5) (if (setq pt (getpoint (strcat nStr " = " (vl-princ-to-string final) " / " (vl-princ-to-string (fix i)) " = " (vl-princ-to-string (/ final i)) "\nSpecify text placement point: " ) ) ) (AT:MText (trans pt 1 0) (rtos (/ final i)) nil nil 5) ) ) ) (*error* nil) (princ) ) |
_______________________________________
http://info-topograf.blogspot.ro/
John Doe a scris:
@diagodose2009: nu e chiar programul meu, tin minte ce-am scris in el. Ce as avea de spus: Aplicatia numeroteaza punctele unui contur. Nu am verificat, probabil ca merge dar punctele par sa fie puse doar la un offset, unele se vor suprapune cu conturul iar daca sunt mai dese se vor suprapune unele cu altele. Nu am observat sa puna nici distantele dintre puncte, oare nu ar fi bine? Si nici tabelul de coordonate nu-l scoate, nu ar fi misto sa-l puna in desen ca tabel sau intr-un fisier extern, de exemplu CSV ca sa te poti juca cu el in Excel ? Si ar mai fi ceva: presupun ca conturul este o polilinie. Functie de o variabila (PLINEGEN, cred - nu mai stiu sigur), primul si ultimul punct al unei polilinii pot sa se repete chiar daca polilinia este inchisa, ai tratat aspectul asta? Oricum, e ceva; si asa, cate putin, se poate construi un set de aplicatii utile usor de implementat in mediul CAD.
|
De fapt, era un programel scris de mine, nu de John Doe.
Am luat criticile lui John Doe ca sugestii si intre timp l-am mai modificat, iar acum pune si distantele dintre puncte (cotarile) si scoate si inventarul de coordonate. L-am modificat sa lucreze doar cu polilinii inchise, ca sa nu ia de 2 ori vertecsii extremi. Mai am putin de lucru la ea (cum ar fi numerotarea corecta a conturului, chiar daca a fost desenat in sensul invers al acelor de ceasornic) si mai da erori la polilinii cu foarte multi vertecsi (peste 100), dar in 99% din cazuri functioneaza corect. Oricine se pricepe la LISP poate sa mai imbuntateasca programul.
Ceea ce am vrut de la acest program a fost sa inlocuiesc cu succes cele 3 comenzi din TopoLT: autopct, dimpl si arr2 si am reusit intr-o oarecare masura.
Am vazut ca programul anterior a fost descarcat de un numar destul de mare de oameni (peste 60), asa ca link-ul de download pentru cel nou este:
http://www.fileshare.ro/47184568329.7
Modificat de zamfy (20-02-2012 13:57:40)
Mersi.
_______________________________________
www.facebook.com/dMine.poezii/
@zamfy: felicitari. Limbajul DCL te intereseaza?
Pentru cei care au probleme cu link-ul de pe fileshare, acesta este un link de pe rapidshare:
https://rapidshare.com/files/2749746465 ... contur.lsp.
@John Doe, sigur ca ma intereseaza limbajul DCL, dar deocamdata am vrut sa stiu limbajul LISP la un nivel cat de cat mediu si apoi o sa invat si DCL-ul. Oricum, pentru ferestre de dialog este foarte bun si OpenDCL (cu toate ca mai are unele bug-uri).
Oricum, ca interfata, mie imi place foarte mult linia de comanda, mi se pare mai usor sa apas o tasta decat sa caut cu mouse-ul butoane.
Pentru scripturi micute, cu putine date de intrare e mult mai comod cum spui tu, dar daca ajungi la aplicatii mai complexe casetele te ajuta enorm, vezi cu ochii tai ce ai introdus sau nu.
Cauta pe Google "AfraLISP" , o sa gasesti printre altele si un manual DCL - numai in lb. engleza, dar e foarte explicit. Sau daca vrei doar manualul asta ti-l trimit eu pe mail.
As vrea sa stiu daca ar fi utila cuiva (in afara de mine) o aplicatie (tot in LISP...) care face fisierul CPXML pentru avizarea planurilor parcelare cf. ordinului 415, in baza planului si tabelului parcelar.
Poi este utila doar ca nu toata lumea care face planuri parcelare foloseste tabel in X-cel cum ai tu definit ( de exemplu stiu pe cineva care a lucrat in word, sau in OpenOffice).
Este o aplicatie utila , cel putin asa mi se pare mie din ce ai prezentat, dar util in momentul in care ai de lucrat mult cu planuri parcelare, si ai tarlale c multi proprietari.
In orice caz , ai un LIKE de la mine
@raptor: Tabelul de unde isi ia datele aplicatia este exact anexa care se depune la OCPI, salvata in format CSV din Excel sau Open Office.
Ideea este ca nu toata lumea face neaparat planuri parcelare, dar cine totusi a facut a observat ca stai cateva ore ca sa faci un CPXML cu o suta de parcele cu "GenerareCP". Daca totusi sunt topografi interesati, o sa revin cu amanunte.
John, eu ma folosesc de un tabel excell pentru a-mi genera anexele automat in Word, dar nu si CP-ul. Ma ajuti sa-l generez si pe acesta? Sau, daca fac CP-ul cum pot face baza de date in Excell, pentru ca apoi sa-mi generez anexele? Multumesc.
Si eu lucrez de multe ori cu Excel+Word, dar ca sa poti scrie un fisier CPXML valid ai nevoie de coordonatele punctelor parcelelor, si asta e cam complicat sa ti le generezi in Excel - mai repede faci CP-ul manual.
Eu am un program scris in LISP sub AutoCAD care isi ia datele dintr-ul Excel (Anexa 2 - adica tabelul care se preda la OCPI odata cu planul parcelar), gaseste fiecare parcela in plan si extrage coordonatele, scrie restul corpului de CP si gata fisierul. Sunt o gramada de algoritmi la care e mai usor sa gasesti solutia decat sa explici ce ai facut, nu stiu cum te-as putea ajuta.
Iti dau totusi o idee: deschide un fisier CPXML cu Notepad ca sa vezi ce structura are. Si daca nu te descurci, iti vând programul meu... glumesc, depinde ce vrei tu sa faci: esti un pasionat dus cu pluta ca mine sau chiar ai mult de lucru si nu mai razbesti... ambele cazuri au solutia lor.
John, eu chiar nu te-nteleg de ce nu-ti vinzi softul.
Eu unul, cand aud de extravilan, ma ia cu mancarimi. Dar poate ca sunt colegi carora le place asta... Pune pretul. Spor la afaceri... "colaterale".
Ba îl vând... e gata de ceva timp, mai dureaza putin testele si îi dau drumul. Pot spune de pe acum ca am facut cam 30 de planuri parcelare trimise la avizat si au fost bune toate CP-urile. Si dureaza vreo 5 minute pâna il faci... de curios, am incercat sa fac un CP manual, si mi-a luat vreo patru ore.
Revin cu un program pe care l-am postat mai demult, dar care, dupa ce l-am testat intens, mi-am dat seama ca nu functioneaza cum mi-as dori, asa ca l-am modificat de vreo 13 ori, pana ce l-am adus la functionalitatea pe care mi-am dorit-o.
Aici este programul:
http://www.fileshare.ro/65846426802
Acest program numeroteaza un contur inchis cu comanda OT si genereaza si inventarul de coordonate cu comanda INV. Detalii despre modificarile aduse programului le gasiti in comentariile din fisierul lisp.
Faina aplicatia. Am observat insa ca daca punctele sunt prea apropiate, textele se cam suprapun; iti dau o idee: calculeaza lungimea segmentelor de polilinie dintre punctele consecutive, si daca sunt prea mici scrie cate un punct in interior si unul in exteriorul conturului, succesiv. Va iesi mai bine.
Mai este loc de imbunatatiri. In viitorul apropiat, o sa il fac sa puna cotarile perpendicular pe contur acolo unde este distanta prea mica intre puncte si deja lucrez la functia de optimizare a pozitiei textelor (nu am implementat-o pana acum, deoarece comanda GT_UnClutter din GeoTools merge neasteptat de bine). Pana atunci, mai postez cateva utilitare pe care eu personal le folosesc zilnic sau le-am folosit la un moment dat mai jos.
Toate programele le copiati in editorul de text preferat si le salvati cu extensia .lsp.
Modificat de zamfy (12-06-2012 15:17:00)
Multumim, dar vezi ca primul script are zero bytes.
Primul dintre cele din postarea nemodificata.
Pune ax intre 2 polilinii deschise:
Code:
(defun c:ax (/ ent1 ent2 i len pt p1 ptlst) (vl-load-com)
(if (and (setq ent1 (car (entsel "\nSelecteaza prima polilinie: "))) (wcmatch (cdr (assoc 0 (entget ent1))) "*POLYLINE")) (if (and (setq ent2 (car (entsel "\nSelecteaza a doua polilinie: "))) (wcmatch (cdr (assoc 0 (entget ent2))) "*POLYLINE")) (progn (command "area" "o" ent1) (setq l1 (getvar "perimeter")) (setq div (/ (* l1 10) 100)) (setq i -1 len (/ (vla-get-Length (vlax-ename->vla-object ent1)) div)) (while (setq pt (vlax-curve-getPointatDist ent1 (* (setq i (1+ i)) len))) (setq p1 (vlax-curve-getClosestPointto ent2 pt t) ptlst (cons (polar pt (angle pt p1) (/ (distance pt p1) 2.)) ptlst))) (setq ptlst (apply 'append (mapcar (function (lambda (x) (list (car x) (cadr x)))) ptlst))) (vla-AddLightWeightPolyline (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-VBDouble (cons 0 (1- (length ptlst)))) ptlst))))))
(princ)) |
Ruleaza cu comanda ax.
toate fisierele au 0 bytes. incearca pe alt site.
Acest program inchide rapid layere, selectand obiecte. Ruleaza cu comanda cl .
Code:
(defun c:cl () (setvar "CMDECHO" 0) (if (not(setq startset(cadr(ssgetfirst)))) (setq startset(ssget))) (setq i -1 filterlist nil) ;need? (repeat(sslength startset) (setq i(1+ i)) (setq ent(entget(ssname startset i))) (setq lyr (cdr(assoc 8 ent))) (setq clyr (getvar "CLAYER")) (if (= lyr clyr) (progn (command "LAYER" "MAKE" "xtcnv" "C" "140" "" "") (setvar "CLAYER" "xtcnv") (command "layer" "off" (strcat lyr) "") (setvar "CLAYER" lyr) (command "laydel" "n" "xtcnv" "" "y") ) ) (command "layer" "off" (strcat lyr) "") ) (princ) ) |
Acest program insereaza vertecsi intr-o polilinie (asemanatoare cu insvx din TopoLT, numai ca se repeta la infinit). Ruleaza cu comanda iv .
Code:
;--------------------------------------------------------------------------- ; Modified by GLStephens to eliminate "Undo" "mark"! which should not be ; implemented within programs - user function only - use "Undo" "begin/end" ; and to modify the error routine so that it is local rather than over- ; writing the global routine. Oct 2003 ;--------------------------------------------------------------------------- ; Modified by David Garrigues ; of the ; CADapult ; http://home1.gte.net/davidgus ; E-mail ; Version ?.? ; October 19, 1997
;Objective - to add verticies to all polylines/splines except 3D polylines
;Summary of additions ;can do spline or fitted polylines ;can do splines ;keeps pline at original elevation
;Function and reasoning - ;To make it work with R14 and light weight polylines and the new variable PLINETYPE. ;I also had to take into account what the plinetype setting was so that ;I also could change lines into polylines or lwpolylines. I also added ;the capability to add verticies in plines where they are splined or fitted ;without turning them into 50,000 segments while still maintaining the ;spline or fit option. Works in 14 on all Polylines, LWPolylines, Splines, and Lines. ;Due the nature of the FIT option on a polyline I decided to ask the user if the wish to RE-FIT ;after the insertion of a new vertex. While testing this I found areas and instances ;where I thought this might be benificial to the user. The original program performed a loop ;while that is nice I decided I liked it better if did not (just hit enter with your mouse ;button). I added error handlers that will set back the line the way it was after aproaching the ;error. Last but not least I made sure that this will maintain all elevations as they are ;just for us CIVILized people
;*************************************************************************** ;Original header ; ADVERT.LSP Add a Vertex (c)1995, Steve Houghton ;revised 3/23/95 to ensure new vertex is at crosshairs ;thanks to Patrick Wheatley
;Inserts a vertex in a polyline. If a line is selected, it offers to convert ;it to a polyline and then insert the vertex. ;Will report: At least one break point must be on polyline. if the end of ;a polyline is chosen ;***************************************************************************
(defun C:iv ( / *Error* POLYLINE POLYNAME PICKPOINT POLYDXF ENTTYPE FTSP ZPT LASTENT NEWVERT OLDERR ANSWER) (while
(defun *Error* (msg) (while (> (getvar "CmdActive") 0) (command)) ; if command not ended, then end it
; now restore environment (setvar "blipmode" adv:blip) (setvar "cmdecho" adv:cmd) (setvar "menuecho" adv:echo) (setvar "orthomode" adv:ortho) (setvar "highlight" adv:highlt) (setvar "texteval" adv:txeval) (setvar "osmode" adv:snap)
(princ msg) (princ) ) ; end defun error
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX ; ; This section remmed out by GLS - reworked as local *Error* ; ; ; ; (setq OLDERR *error*) ;current error handling subroutine ; (defun *error* (errmes) ; (princ (strcat "\nExecution of ADVERT.LSP halted by the following error: " ERRMES)) ; (command "undo" "b");if this program fails or you cancel out of the program this will ; ;put the entity back to its original condition ; ; (setvar "blipmode" blipmode) ; (setvar "cmdecho" cmdecho) ; (setvar "menuecho" menuecho) ; (setvar "orthomode" orthomode) ; (setvar "highlight" highlight) ; (setvar "texteval" texteval) ; (setvar "osmode" oldsnap) ; ; (setq *error* OLDERR) ; (prin1) ;exit quitley ; ) ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; Initial section of Main code follows
; set ex sysvars to variables to later restore (setq adv:blip (getvar "blipmode")) (setq adv:cmd (getvar "cmdecho")) (setq adv:echo (getvar "menuecho")) (setq adv:ortho (getvar "orthomode")) (setq adv:highlt (getvar "highlight")) (setq adv:txeval (getvar "texteval")) (setq adv:snap (getvar "osmode"))
; set sysvars to values for this routine (setvar "OSMODE" 0) ;osmode to avoid conflicts with the osnap (setvar "BLIPMODE" 0) ;so no nasty blips hanging around (setvar "HIGHLIGHT" 0);so it runs faster on BIG polylines (setvar "CMDECHO" 0) ;so you don't see the baggage
(command "._Undo" "_End") ; end any previously active group (command "._Undo" "_Begin") ; starts new undo group for this command - Advert
; begin main program
(princ "\nAlege o polilinie, linie sau spline ca sa adaugi vertexul: ")
(setq POLYLINE (entsel) ;asks you to select the entity POLYNAME (car POLYLINE) ;gets the handle name PICKPOINT (osnap (cadr POLYLINE) "nea");using the osnap we get a point on the entity POLYDXF (entget POLYNAME) ;get association list ENTTYPE (cdr (assoc 0 POLYDXF)) ;finding out what kind of entity it is FTSP (cdr (assoc '70 polydxf)) ;is it fitted or splined ZPT (CADDR PICKPOINT) ;elevation point "Z" only ) (cond ((or (= ftsp 2)(= ftsp 4)) (fitit) ) ((= enttype "LWPOLYLINE") ;vertex insert routine for lwpolylines (command "break" POLYNAME PICKPOINT PICKPOINT) ;lwplolylines do not change handle names so there is no need to entmake (command "PEDIT" polyname "join" (entlast) "" "x") ;moving the vertex is easy on a line taht has not been splined or fitted ;because you can always depend on the point not moving. When we are dealing ;with a spine or a fit the vertex could move slightly. This slight movement forces ;me helpless to try and find that point then aid the user in trying to stretch it. ;I could write more code and find the point but all I would be doing is the same as ;you just picking on the entity and using your grips to place the new vertex where ;you want it to go. (setvar "osmode" adv:snap) (princ "\nMutam vertexul: ") (setq NEWVERT (osnap pickpoint "int,near")) (COMMAND "STRETCH" "C" NEWVERT NEWVERT "" PICKPOINT pause) ) ((= enttype "POLYLINE") (entmake (list '(0 . "POINT") (cons 10 (getvar "VSMIN")))) (setq LASTENT (entlast)) ;*breaks polyline at pickpoint (command "break" POLYNAME PICKPOINT PICKPOINT) ;*(entnext lastent) will be the next polyline created after lastent ;*(entlast) will be the other polyline created ;*so now join the two and we have a polyline with the new vertex ;*inserted (setq last1 (entnext lastent)) (command "PEDIT" last1 "join" (entlast) last1 "" x) ;*get rid of temporary point (entdel LASTENT) (princ "\nMove new vertex: ") (setq NEWVERT (osnap pickpoint "int,near")) (COMMAND "STRETCH" "C" NEWVERT NEWVERT "" PICKPOINT pause) (if (= (getvar "plinetype") 0);on these the polyline will be set back to (progn ;0 so I have to move them back to their original ;elevation. (setq topt (LIST 0.0 0.0 ZPT));create a list and still allow it to be evaluated ;thank you Tony Tanzillio (command "move" "p" "" "0,0,0" topt) ) ) ) ((= enttype "SPLINE") (itsaspl) ) ((= enttype "LINE") (itsaline) ) );end cond ;end main program
; now restore environment (setvar "blipmode" adv:blip) (setvar "cmdecho" adv:cmd) (setvar "menuecho" adv:echo) (setvar "orthomode" adv:ortho) (setvar "highlight" adv:highlt) (setvar "texteval" adv:txeval) (setvar "osmode" adv:snap)
(command "._Undo" "_End") ; to end undo group for this routine - Advert
(prin1);exiting quietly );end advert.lsp
;*vertext insert routine for old polylines
;insertvert ;begin special functions***************************************************** (defun fitit () (command "pedit" polyname "decurve" "x" ) (if (>= (getvar "plinetype") 1) ;if1 (progn ;bprog1 (command "break" POLYNAME PICKPOINT PICKPOINT) (command "PEDIT" polyname "join" (entlast) "" "x") (if (= ftsp 2) ;bif2 (progn ;bprog2 (initget "Yes No");allows the user to typ in y ye yes n or no for an answer (setq ANSWER (getkword "\nDo you wish to RE-FIT after ddinserting vertex <Y>? ")) (if (or(= ANSWER nil)(= ANSWER "Yes")) ;bif3 (command "pedit" polyname "fit" "x") ) ;eif3 ) ;eprog2 (command "PEDIT" polyname "spline" "x") ) ;eif2 ) ;eprogn1
(progn ;then part of if1 bprog4 (entmake (list '(0 . "POINT") (cons 10 (getvar "VSMIN")))) (setq LASTENT (entlast)) (command "break" POLYNAME PICKPOINT PICKPOINT) (command "PEDIT" (entnext lastent) "join" (entlast) "" x) (entdel LASTENT) (if (= ftsp 2) ;bif4 (progn ;bprog5 (initget "Yes No") (setq ANSWER (getkword "\nDo you wish to REFIT after inserting a vertex <Y>? ")) (if (or (= ANSWER nil)(= ANSWER "Yes")) ;bif5 (command "pedit" (entlast) "fit" "x") ) ;eif5 ) ;eprog5 (command "PEDIT" (entlast) "spline" "x") ) ;eif4 ) ;eprog4 ) ;eif1 ) ;defun
(defun itsaspl ();we need to add vertexes to splines to ya know (command "splinedit" polyname "r" "add" pickpoint "" "" "") )
(defun itsaline ();hey lets give the user a chance to make a line into a pline (initget "Yes No") (setq ANSWER (getkword "\nDo you wish to turn this line to a polyline <Y>? ")) (if (or (= ANSWER nil)(= ANSWER "Yes")) (progn ;*turn current line into a polyline (command "pedit" POLYNAME "y" "") (if (=(getvar "plinetype")0) (insertvert) ;if the plinetype is 0 then lets do it this way (progn otehrwise do it this way because (setq polyname (entlast));the handle name did change to (vertlw) ;accomodate for LWplines );progn );if );progn );if );defun
;two routines that everyone should have so you can do what I did at the begining of this routine ; Saves the SETVARs specified in the mode list into the global MLST. (defun MODES (a) (setq MLST '()) (repeat (length a) (setq MLST (append MLST (list (list (car a) (getvar (car a)))))) (setq a (cdr a))) ) ; ; Restores the SETVARs specified in the global MLST. (defun MODER () (repeat (length MLST) (setvar (caar MLST) (cadar MLST)) (setq MLST (cdr MLST)) ) (princ "\nDone. ") (princ) ) ) (Defun C:AdV () (C:advert))
;end special functions********************************************************
(prin1);makes the loading look clean |
Acest program uneste 2 polilinii deschise, Este asemanator cu comanda "join", numai ca nu este necesar ca poliliniile sa aiba un punct comun, ci pot sa fie si la distanta una fata de cealalta. Utila atunci cand faci limita unui model 3D. Ruleaza cu comanda jl .
Code:
(defun c:jl (/ l1 l2 fz) (setvar "CMDECHO" 0) (setvar "PEDITACCEPT" 1) (if (and (setq l1(entsel "\nSelecteaza prima polilinie: ")) (setq l2(entsel "\nSelecteaza cea de-a doua polilinie: ")) (setq fz(distance(cadr l1)(cadr l2))) (vl-cmdf "_.pedit" "_m" (car l1)(car l2) "" "_j" "_j" "_b" fz "") ); end and (c:jl) ); end if (princ) ); end c:jl |
Acest program schimba rotatia unui text, alegand unghiul dintre 2 puncte. Ruleaza cu comanda at .
Code:
(defun c:at() (setvar "CMDECHO" 0) (setq string (car (entsel "\nSelecteaza textul pe care doriti sa il modificati: "))) (setq en (entget string)) (command "osnap" "endpoint") (setq p1 (getpoint "\nAlegeti primul punct: ")) (setq p2 (getpoint "\nAlegeti cel de-al doilea punct:")) (setq unghi (angle p1 p2)) (setq en (subst (cons 50 unghi) (assoc 50 en) en)) (entmod en) (prin1) ) |
Acest program schimba punctul de start al unei polilinii. Ruleaza cu comanda sv .
Code:
(defun c:sv (/ pt pl pobj plst) (setvar "CMDECHO" 0) (vl-load-com) (setq pt (getpoint "\nAlege punctul de start:")) ;;scanam poliliniile din desen (setq pl (car (nentselp pt))) (setq pobj (vlax-ename->vla-object pl)) ;;verificam sensul poliliniei (vla-GetBoundingBox pobj 'MinP 'MaxP) (setq minp (vlax-safearray->list minp) MaxP (vlax-safearray->list MaxP) lst (mapcar (function (lambda (x) (vlax-curve-getParamAtPoint pobj (vlax-curve-getClosestPointTo pobj x) ) ;_ vlax-curve-getParamAtPoint ) ;_ lambda ) ;_ function (list minp (list (car minp) (cadr MaxP)) MaxP (list (car MaxP) (cadr minp)) ) ;_ list ) ;_ mapcar ) ;_ setq (if (or (> (car lst) (cadr lst) (caddr lst) (cadddr lst)) (> (cadr lst) (caddr lst) (cadddr lst) (car lst)) (> (caddr lst) (cadddr lst) (car lst) (cadr lst)) (> (cadddr lst) (car lst) (cadr lst) (caddr lst)) ) (progn (alert "Polilinia este in sens antiorar!") (defun do_light (pl / hdr tail list_new list_of_vert) (foreach item (reverse (entget pl)) (cond ((and (not hdr)(= (car item) 10)) (setq hdr item) ) ((member (car item) '(10 40 41)) (setq list_of_vert (cons item list_of_vert)) ) ((= (car item) 42) (setq list_of_vert (cons (cons 42 (- (cdr item))) list_of_vert)) ) ((= (car item) 210) (setq tail item) ) (T (setq list_new (cons item list_new))) ) ) (if (entmod (append list_new (list hdr)(reverse list_of_vert)(list tail))) (progn (prompt " OK") (entupd pl) ) (prompt " failed!") ) ) (do_light pl) ) )
;;acum schimbam vertexul de inceput al poliliniei (setq plst (vlax-get pobj 'Coordinates) norm (vlax-get pobj 'Normal) pt (trans pt 1 0) pa (vlax-curve-getParamAtPoint pobj pt) nb (/ (length plst) 2) n nb ) (repeat n (setq blst (cons (vla-getBulge pobj (setq n (1- n))) blst)) ) (if (= pa (fix pa)) (setq n (fix pa) plst (append (sublist plst (* 2 n) nil) (sublist plst 0 (* 2 n)) ) blst (append (sublist blst n nil) (sublist blst 0 n)) ) (setq n (1+ (fix pa)) d3 (vlax-curve-getDistAtParam pobj n) d2 (- d3 (vlax-curve-getDistAtPoint pobj pt)) d3 (- d3 (vlax-curve-getDistAtParam pobj (1- n))) d1 (- d3 d2) pt (trans pt 0 (vlax-get pobj 'Normal)) plst (append (list (car pt) (cadr pt)) (sublist plst (* 2 n) nil) (sublist plst 0 (* 2 n)) ) ) ) (vlax-put pobj 'coordinates plst) (princ) )
(defun sublist (lst start leng / n r) (if (or (not leng) (< (- (length lst) start) leng)) (setq leng (- (length lst) start)) ) (setq n (+ start leng)) (repeat leng (setq r (cons (nth (setq n (1- n)) lst) r)) ) ) (defun k*bulge (b k / a) (setq a (atan b)) (/ (sin (* k a)) (cos (* k a))) ) |
I-am facut o modificare, deoarece dadea o eroare, chiar daca functiona corect.
Modificat de zamfy (13-06-2012 08:24:14)
Acest program "taie" obiectele fata de o margine. Ruleaza cu comanda ts . Este programul extrim din Express Tools, numai ca nu multa lume stie de comanda aceasta:
Code:
(defun c:ts ( / na e1 p1 redraw_it lst n ) (acet-error-init (list (list "cmdecho" 0 "highlight" 0 "regenmode" 1 "osmode" 0 "ucsicon" 0 "offsetdist" 0 "attreq" 0 "plinewid" 0 "plinetype" 1 "gridmode" 0 "celtype" "CONTINUOUS" "ucsfollow" 0 "limcheck" 0 ) T ;flag. True means use undo for error clean up. '(if redraw_it (redraw na 4)) );list );acet-error-init (princ "\nAlege o Polilinie, Linie, Cerc, Arc, Elipsa, Imagine sau Text pentru marginea de taiere...") (setq na (acet-ui-single-select '((-4 . "<OR") (0 . "CIRCLE") (0 . "ARC") (0 . "LINE") (0 . "ELLIPSE") (0 . "ATTDEF") (0 . "TEXT") (0 . "MTEXT") (0 . "IMAGE") (0 . "SPLINE") (0 . "INSERT") (0 . "SOLID") (0 . "3DFACE") (0 . "TRACE") (0 . "LWPOLYLINE") (-4 . "<AND") (0 . "POLYLINE") (-4 . "<NOT") (-4 . "&") (70 . 112) (-4 . "NOT>") (-4 . "AND>") (-4 . "OR>") ) T );acet-ui-single-select );setq (if na (progn (setq e1 (entget na));;setq (if (or (equal "TEXT" (cdr (assoc 0 e1))) (equal "MTEXT" (cdr (assoc 0 e1))) (equal "ATTDEF" (cdr (assoc 0 e1))) (equal "IMAGE" (cdr (assoc 0 e1))) (equal "INSERT" (cdr (assoc 0 e1))) (equal "SOLID" (cdr (assoc 0 e1))) (equal "3DFACE" (cdr (assoc 0 e1))) (equal "TRACE" (cdr (assoc 0 e1))) );or (progn (setq lst (acet-geom-object-point-list na nil)) (setq n 0) (command "_.pline") (repeat (length lst) (command (nth n lst)) (setq n (+ n 1));setq );repeat (if (not (equal (car lst) (last lst) 0.0000001)) (command "_cl") (command "") );if (setq na (entlast) e1 na );setq );progn then draw a temp pline to be the cutting edge. (setq e1 nil) );if (redraw na 3) (setq redraw_it T) (setq p1 (getpoint "\nSpecifica partea unde se taie:"));setq (redraw na 4) (setq redraw_it nil) (if p1 (etrim na p1));if (if e1 (progn (if (setq p1 (acet-layer-locked (getvar "clayer"))) (command "_.layer" "_un" (getvar "clayer") "") );if (entdel e1) (if p1 (command "_.layer" "_lock" (getvar "clayer") "") );if );progn then );if );progn );if (acet-error-restore) (princ) );defun c:extrim ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ;Entity-TRIM function ;takes: na - entity name ; a - a point, the side to trim on ;NOTE: This function does not allow for the possible miss of ; non-continuous linetypes. ; (defun etrim ( na a / la b d e1 lst lst2 n j k m ss na2 na3 na4 x y z flag flag2 flag3 zlst vpna vplocked ) (setq e1 (entget na));setq (if (or (setq flag (equal (acet-dxf 0 e1) "POLYLINE")) (setq flag (equal (acet-dxf 0 e1) "LWPOLYLINE")) (equal (acet-dxf 0 e1) "LINE") (equal (acet-dxf 0 e1) "CIRCLE") (equal (acet-dxf 0 e1) "ARC") (equal (acet-dxf 0 e1) "ELLIPSE") (equal (acet-dxf 0 e1) "TEXT") (equal (acet-dxf 0 e1) "ATTDEF") (equal (acet-dxf 0 e1) "MTEXT") (equal (acet-dxf 0 e1) "SPLINE") );or (progn (if (and flag (equal 8 (logand 8 (acet-dxf 70 e1))) );and (setq flag nil) );if (setq a (trans a 1 0) vpna (acet-currentviewport-ename) );setq (acet-ucs-cmd (list "_View")) (setq lst (acet-geom-object-point-list na nil) ;;;find extents of selected cutting edge object lst (acet-geom-list-extents lst) x (- (car (cadr lst)) (car (car lst))) y (- (cadr (cadr lst)) (cadr (car lst))) x (* 0.075 x) y (* 0.075 y) z (list x y) x (list (+ (car (cadr lst)) (car z)) (+ (cadr (cadr lst)) (cadr z)) );list y (list (- (car (car lst)) (car z)) (- (cadr (car lst)) (cadr z)) );list zlst (zoom_2_object (list x y)) );setq (if vpna (setq vplocked (acet-viewport-lock-set vpna nil)) ;unlock cur viewport if needed. );if (command "_.zoom" "_w" (car zlst) (cadr zlst)) (entupd na) ;;;update the ent. so it's curves display smoothly (setq lst (acet-geom-object-point-list na (/ (acet-geom-pixel-unit) 2.0) ) );setq (if (or (not flag) (not (acet-geom-self-intersect lst nil)) );or (progn ;then the object is valid and not a self intersecting polyline. (if (and flag (equal (car lst) (last lst) 0.0001) );and (setq flag3 T);then the polyline could potentialy need a second offset );if (if (setq la (acet-layer-locked (getvar "clayer"))) (command "_.layer" "_unl" (getvar "clayer") "") );if (command "_.pline") (setq b nil) (setq n 0);setq (repeat (length lst) (setq d (nth n lst)) (if (not (equal d b 0.0001)) (progn (command d) (setq lst2 (append lst2 (list d)));setq (setq b d);setq );progn );if (setq n (+ n 1)) );repeat (command "") (setq na2 (entlast) ss (ssadd) ss (ssadd na2 ss) lst nil );setq (acet-ss-visible ss 1) (setq lst2 (get_fence_points na2 a lst2 flag3 flag));setq (if la (command "_.layer" "_lock" (getvar "clayer") "") );if (acet-ucs-cmd (list "_p")) ;Move the ents to force a display update of the ents to avoid viewres problems. (setvar "highlight" 0) (if (setq ss (ssget "_f" (last lst2))) (command "_.move" ss "" "0,0,0" "0,0,0") );if (if flag (progn (if (setq la (acet-layer-locked (acet-dxf 8 e1))) (command "_.layer" "_unl" (acet-dxf 8 e1) "") );if (acet-ucs-set-z (acet-dxf 210 e1)) (command "_.copy" na "" "0,0,0" "0,0,0") ;(entdel na) (acet-ss-visible (ssadd na (ssadd)) 1);make it invisible for a while. ;rk 12:01 PM 3/10/98 (setq na3 na na (entlast) );setq (command "_.pedit" na "_w" "0.0" "_x") (acet-ucs-cmd (list "_p")) (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if );progn );if (command "_.trim" na "") (setq m (- (length lst2) 1));setq (setq k 0) (repeat (length lst2) (setq lst (nth k lst2)) (setq a (trans (car lst) 0 1)) (setq n 1) (repeat (- (length lst) 1) ;repeat each fence list (setq b (trans (nth n lst) 0 1)) (if (equal a b 0.0001) (setq flag2 T) (setq flag2 nil) );if (setq na4 nil);setq (setq j 0);setq (while (not flag2) ;repeat each segment of the fence until no new ents are created. (setq na4 (entlast));setq (command "_F" a b "") (if (and (equal na4 (entlast)) (or (not (equal k m)) (> j 0) );or );and (setq flag2 T) );if (setq j (+ j 1));setq );while (setq a b);setq (setq n (+ n 1));setq );repeat (setq k (+ k 1)) );repeat (command "") (if flag (progn (if (setq la (acet-layer-locked (acet-dxf 8 e1))) (command "_.layer" "_unl" (acet-dxf 8 e1) "") );if (entdel na) ;get rid of the copy ;(entdel na3);bring back the original (acet-ss-visible (ssadd na3 (ssadd)) 0) ;bring back the original ;rk 12:01 PM 3/10/98 (if la (command "_.layer" "_lock" (acet-dxf 8 e1) ""));if );progn );if );progn (progn (acet-ucs-cmd (list "_p")) (princ "\nSelf intersecting edges are not acceptable.") );progn else invalid self intersecting polyline );if (command "_.zoom" "_p") (if vplocked (acet-viewport-lock-set vpna T) ;then re-lock the viewport );if );progn then it's a most likely a valid entity. );if );defun etrim ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun another_offset ( pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4 / na ss lst da1 da2) (setq da1 (abs (- a2 a1)));setq (setq da2 (- (* b (max pl2 pl1)) (/ (* b (abs (- pl2 pl1))) 2.0 ) ) );setq (if (> (abs (- da2 da1)) (* 0.01 (max a1 a2)) ) (progn (acet-pline-make (list lst2)) (setq na (entlast) na2 (entlast) ss (ssadd) ss (ssadd na ss) );setq (acet-ss-visible ss 1) (command "_.offset" b na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (setq lst3 (intersect_check lst2 lst3 lst4)) );and (progn (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") );setq (setq lst (list (acet-geom-vertex-list (list (entlast) 0))));setq (entdel (entlast));then offset was a success so delete the ent after getting it's info );progn then (if (not (equal na (entlast))) (entdel (entlast)));if else );if (entdel na2) );progn then let's do that second offset );if lst );defun another_offset ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun get_fence_points ( na2 a lst2 flag plflag / a1 a2 pl1 pl2 b c d n lst lst2 lst3 lst4 na ) (if flag (progn (setq lst2 (cdr lst2));setq (repeat (fix (/ (length lst2) 2)) (setq lst2 (append (cdr lst2) (list (car lst2)));append );setq );repeat (setq lst2 (append lst2 (list (car lst2))));setq (command "_.area" "_ob" na2) (setq pl1 (getvar "perimeter") a1 (getvar "area") );setq );progn );if (setq a (trans a 0 1) b (* (getvar "viewsize") 0.05);initial offset distance n 3.0 ;number of offsets d (/ b (- n 1)) ;delta offset c (acet-geom-pixel-unit) lst4 (acet-geom-view-points) );setq (while (> b c) (setq na (entlast)) (command "_.offset" b na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (or (not plflag) (setq lst3 (intersect_check lst2 lst3 lst4)) );or );and (progn (setq lst3 (acet-geom-m-trans lst3 1 0)) (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (if flag (progn (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") );setq );progn );if (setq lst (append lst (list lst3)));setq (entdel (entlast)) ;delete the ent after getting it's vertex info (if flag (setq lst (append lst (another_offset pl1 pl2 a1 a2 b na2 lst2 a lst3 lst4) );append );setq );if );progn then offset was a success (if (not (equal na (entlast))) (entdel (entlast)));if else );if (setq b (- b d));setq );while (setq na (entlast)) (command "_.offset" c na2 a "") (if (and (not (equal na (entlast))) (setq lst3 (acet-geom-vertex-list (entlast))) (or (not plflag) (setq lst3 (intersect_check lst2 lst3 lst4)) );or );and (progn (setq lst3 (acet-geom-m-trans lst3 1 0)) (acet-ss-visible (ssadd (entlast) (ssadd)) 1) (if flag (progn (command "_.area" "_ob" (entlast)) (setq pl2 (getvar "perimeter") a2 (getvar "area") );setq );progn );if (setq lst (append lst (list lst3)));setq (entdel (entlast));then offset was a success so delete the ent after getting it's info (if flag (setq lst (append lst (another_offset pl1 pl2 a1 a2 c na2 lst2 a lst3 lst4) );append );setq );if );progn then (if (not (equal na (entlast))) (entdel (entlast)));if else );if (entdel na2) lst );defun get_fence_points ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;returns a list of points on screen if the first two lists do not ;contain segments that intersect each other. ; (defun intersect_check ( lst lst2 lst3 / x x2 y y2 lst4 flag len len2 a aa b bb c d n j) (setq len (length lst) len2 (length lst2) x (car (car lst3)) x2 (car (cadr lst3)) y (cadr (car lst3)) y2 (cadr (cadr lst3)) );setq (setq n 0);setq (while (and (not flag) (< (+ n 1) len2) );and (setq aa (nth n lst2) bb (nth (+ n 1) lst2) a (bns_truncate_2_view aa bb x y x2 y2) b (bns_truncate_2_view bb aa x y x2 y2) lst4 (append lst4 (list a)) );setq (if (or (not (equal a aa)) (not (equal b bb)) );or (setq lst4 (append lst4 (list b))) );if (setq j 0);setq (while (and (not flag) (< (+ j 1) len) );and (setq c (nth j lst) d (nth (+ j 1) lst) flag (inters a b c d) );setq (setq j (+ j 1));setq );while (setq n (+ n 1));setq );while (if (not (equal b (last lst4))) (setq lst4 (append lst4 (list b)));setq );if (if (not flag) (setq flag lst4) (setq flag nil) );if flag );defun intersect_check ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun zoom_2_object ( lst / p1 p2 p3 p4 p5 p6 mp dx dy dx2 dy2 r1 r2 na e1 x w h dv1 dv2 x ) (setq lst (acet-geom-m-trans lst 1 2) p1 (acet-geom-m-trans (acet-geom-view-points) 1 2) ;p1 and p2 are the viewpnts p2 (cadr p1) p1 (car p1) p1 (list (car p1) (cadr p1)) p2 (list (car p2) (cadr p2)) );setq (if lst (progn (setq p5 (acet-geom-list-extents lst) ;p5 and p6 are the geometry points p6 (cadr p5) p5 (car p5) p5 (list (car p5) (cadr p5)) p6 (list (car p6) (cadr p6)) mp (acet-geom-midpoint p5 p6) ;prepare to resize the geometry rectang to dx (- (car p2) (car p1)) ;have the same dy/dx ratio as p1 p2. dy (- (cadr p2) (cadr p1)) dx2 (- (car p6) (car p5)) dy2 (- (cadr p6) (cadr p5)) );setq (if (equal dx 0.0) (setq dx 0.000001)) ;just in case div by zero (if (equal dx2 0.0) (setq dx2 0.000001)) (setq r1 (/ dy dx) r2 (/ dy2 dx2) );setq (if (< r2 r1) (setq dy2 (* r1 dx2));then scale dy2 up (progn (if (equal r1 0.0) (setq r1 0.000001)) ;just in case div by zero (setq dx2 (* dy2 (/ 1.0 r1)));else scale dx2 up );progn );if (setq p5 (list (- (car mp) (/ dx2 1.98)) ;1.98 is used instead of 2.0 to expand (- (cadr mp) (/ dy2 1.98)) ;the rectangle slightly );list p6 (list (+ (car mp) (/ dx2 1.98)) (+ (cadr mp) (/ dy2 1.98)) );list );setq );progn then lst );if (if (and lst (equal 0 (getvar "tilemode")) (not (equal 1 (getvar "cvport"))) (setq na (acet-currentviewport-ename)) );and (progn (setq e1 (entget na) x (cdr (assoc 10 e1)) w (cdr (assoc 40 e1)) h (cdr (assoc 41 e1)) p3 (list (- (car x) (/ w 2.0)) (- (cadr x) (/ h 2.0)) );list p4 (list (+ (car x) (/ w 2.0)) (+ (cadr x) (/ h 2.0)) );list p3 (trans p3 3 2) ;p3 and p4 are the viewport points p4 (trans p4 3 2) dv1 (acet-geom-delta-vector p1 p3) dv2 (acet-geom-delta-vector p2 p4) x (distance p1 p2) );setq (if (equal 0 x) (setq x 0.000001));just in case (setq x (/ (distance p5 p6) x ) dv1 (acet-geom-vector-scale dv1 x) dv2 (acet-geom-vector-scale dv2 x) p5 (acet-geom-vector-add p5 dv1) p6 (acet-geom-vector-add p6 dv2) );setq );progn then );if (setq p1 (list (car p1) (cadr p1) 0.0) p2 (list (car p2) (cadr p2) 0.0) p5 (list (car p5) (cadr p5) 0.0) p6 (list (car p6) (cadr p6) 0.0) );setq (if lst (setq lst (list (trans p5 2 1) (trans p6 2 1) );list );setq (setq lst nil) );if lst );defun zoom_2_object
(princ) |
Inca unul, de conceptie proprie:
Code:
;;;utilitar pentru mutare rapida entitati
(defun C:QM () (setq ob (entsel)) (setq cord (assoc 10 (entget (car ob)))) (setq x (cadr cord)) (setq y (caddr cord))
(command "move" (car ob) "" (list x y) pause)
)
(princ "Lansare cu comanda QM") |
Il folosesc dupa ce am numerotat si facut tabel cu inventarul de coordonate la un contur, si trebuie mutate putin din loc numerele punctelor, ca nu se vad bine. Lucrez cu ENTER=repeat last command, si merge destul de repede. "QM" m-am gândit eu ca ar da bine ca vine de la Quick Move.
De curand am finalizat o aplicati in lsp care genereaza lucrarea de cadastru + anexele OCPI automat. Tot ce trebui facut este fisierul cpxml dupa care se incarca in aplicatie si si cu citeva klicuri gata lucrarea.
Aplicatie este limitata la 20 de utilizari. Pentru cine vrea sa o foloseasca in continuare percep un tarif de 200lei cred ca suma respectiva este modica la ce poate sa faca.
Pentru cei interesati interesati o puteti descarca de la
http://www.fileshare.ro/72672540661.1
400/436px 27.7KB
poescuTOPO a scris:
De curand am finalizat o aplicati in lsp care genereaza lucrarea de cadastru + anexele OCPI automat. Tot ce trebui facut este fisierul cpxml dupa care se incarca in aplicatie si si cu citeva klicuri gata lucrarea.
Aplicatie este limitata la 20 de utilizari. Pentru cine vrea sa o foloseasca in continuare percep un tarif de 200lei cred ca suma respectiva este modica la ce poate sa faca.
Pentru cei interesati interesati o puteti descarca de la
http://www.fileshare.ro/72672540661.1 |
Da multa minte mai ai. Cind iti mai fata mintea idei din astea trimite si noua cate un pui se le inmultim
Modificat de oak (10-07-2012 16:44:36)
Nu incarcati in AutoCAD, este o gluma proasta.
@popescuTOPO: astept niste explicatii de la tine, daca vrei sa mai vizitezi forumul.
Scuze de gluma.
aici e varianta buna http://www.fileshare.ro/72696065165.1
Pe bune??? Te-a deranjat cineva cu ceva?
Bravo, Poescu_topo! Esti un geniu. Daca tot esti asa de "talentos" in LISP, ce-ar fi sa faci si ceva util, ca la "glume" ne pricepem si noi. L-ai facut de 1.3 MB ca sa para mai profesional, nu? Dar compilarea VLX lasa de dorit, ma dezamagesti. Un fisier TEAPA.fas, care arata cam asa:
Code:
(defun teapa () (alert "Se lanseaza cu comanda CP") (alert "Mai aveti 20 de utilizari") (alert "Mai aveti 19 utilizari") (alert "Mai aveti 18 utilizari") (alert "Mai aveti 17 utilizari") (alert "Mai aveti 16 utilizari") (alert "Mai aveti 15 utilizari") (alert "Mai aveti 14 utilizari") (alert "Mai aveti 13 utilizari") (alert "Mai aveti 12 utilizari") (alert "Mai aveti 11 utilizari") (alert "Mai aveti 10 utilizari") (alert "Mai aveti 9 utilizari") (alert "Mai aveti 8 utilizari") (alert "Mai aveti 7 utilizari") (alert "Mai aveti 6 utilizari") (alert "Mai aveti 5 utilizari") (alert "Mai aveti 4 utilizari") (alert "Mai aveti 3 utilizari") (alert "Mai aveti 2 utilizari") (alert "Mai aveti 1 utilizari") (alert "Mai aveti 0 utilizari") (alert "?????????????????????") (alert "Inca nu s-a lansat?") (alert "Nasol") (alert "Acum sigur se va lansa") (alert "Nu s-a lansat?") (alert "Se pare ca nu") (alert "Va rugam incercati din nou") (alert "Merge?") (alert "Se pare ca nu, e nasol!") (alert "Gata cu gluma!") (alert "Trecem la munca!") (alert "Dar esti sigur ca ai chef de munca?") (alert "Ajunge cu munca, fa o pauza") (alert "Daca nu, te ajut eu") (alert "Teapa, in programul respectiv se afla un virus") (alert "Mai ai 10 secunde pana la busirea calculatorului") (alert "10") (alert "9") (alert "8") (alert "7") (alert "6") (alert "5") (alert "4") (alert "3") (alert "2") (alert "1") (alert "0") (alert "AHAAAAAAA!") (alert "10") (alert "9") (alert "8") (alert "7") (alert "6") (alert "5") (alert "4") (alert "3") (alert "2") (alert "1") (alert "0") ;;chestia asta se repeta de vreo 200 de ori ) (teapa) |
Iar la faza cu virusul, aproape era sa fac infarct, noroc ca am avut o sticla cu apa langa mine. Sau ai profitat de faptul ca un virus in LISP chiar exista? (a se vedea aici: http://topograf.3xforum.ro/post/4187/1/ ... _Autolisp/).
Totusi, ca sa lasam gluma la o parte, postez mai jos 3 utilitare:
Code:
(defun c:dfd () (command "start" (strcat "explorer " (getvar "dwgprefix"))) (princ) ) |
Acest utilitar deschide in windows explorer folderul dwg-ului in care lucrati. Comanda este ->dfd.
Deoarece layer managerul din AutoCAD 2007 nu prea fucntioneaza cum trebuie in Windows 7, acest utilitar creeaza rapid layere, fara a mai folosi managerul:
Code:
(defun c:nl () (setq numelayer (getstring T "\nSpecifica numele noului layer: ")) (prompt "\nAlege culoarea layerului: ") (princ) (command "-layer" "make" (strcat numelayer) "C" (acad_colordlg 1) "" "") (princ) ) |
Ruleaza cu comanda -> nl. Comanda intr-un lisp o gasiti intotdeauna dupa sintagma "defun c:nume_comanda (argumente)".
P.S.: Mi-a fost lene sa scriu (princ "\n Se lanseaza cu comanda nl") la final.
Modificat de zamfy (10-07-2012 19:40:09)
Si inca o comanda care combina paste to original coordinates cu zoom->object-> last. Colegii mei au devenit dependenti de ea.
Code:
(defun c:xx () (command "pasteorig") (command "_zoom" "o" "l" "") (prin1) ) |
Se lanseaza cu comanda-> xx.
Mai revin maine cu cateva scripturi mici, dar foarte utile.
@PoescuTOPO, poate pana la urma ne arati si noua programul real, ca avem nevoie de concurenta.
Am si eu un program asemanator, care face anexele, CP-ul si ce mai trebuie (am facut vreo 10 lucrari pana acum cu el si au trecut toate), dar deocamdata e doar pentru prima inscriere si doar pentru persoane fizice.
E facut doar in Lisp, fara DCl, nu are handling de erori, nu este profesional, PAD-urile pe care le genereaza sunt putin diferite fata de modelul din ordin (la OCPI le accepta), nu are ferestre de dialog, ci foloseste un bloc cu atribute pentru a completa datele, nu face CP multiplu (nu am facut niciodata unul, nici nu stiu sa-l fac), iar datele completate trebuie sa respecte un anumit format, pentru ca programul sa recunoasca corect adresele, numele proprietarilor, actele, tipul constructiilor etc.
In schimb, merge atat la intravilan, cat si la extravilan, suporta 2 proprietari, pana la 5 parcele, pana la 5 constructii, detecteaza automat scara planului, detecteaza automat codurile SIRSUP si SIRUTA (daca adresa este completata corect). Este separat in 3 module:
-cel care face doar PAD-ul;
-cel care genereaza anexele
-cel care face fisierul CP. Acestea se pot folosi individual sau laolalta, deoarece folosesc acelasi set de variabile.Pentru un incepator ca mine, eu zic ca a iesit destul de bine, am muncit destul de mult la el (are aproape 5000 de linii de cod.).
Daca vrea cineva, o sa fac un filmulet in care voi arata cum functioneaza. Dupa ce il mai finisez putin (deja e la versiunea 2.9.1), o sa il pun aici si va fi gratis (asta ca sa nu fiu tras la raspundere ca nu merge, e naspa, o porcarie etc.).
Modificat de zamfy (10-07-2012 20:04:13)
@zamfy: daca imi spui ce anume nu ti-a iesit la PAD sau de ce nu seamana cu cel standard, poate am vreo idee care te ajuta. Pacat ca nu folosesti si DCL, e o interfata usor de construit si foarte prietenoasa.
@popescuTOPO: linkul cu varianta corecta a programului duce la un fisier care nu exista. E alta gluma?
Draga zamfy,programele tale sunt jucarii pe langa sursele de autolisp incluse deja
in programul VlaxCompiler.
======>>>>>>>>>>Deci te rog , tu nu mai posta scripturile milimetrice
De exemplu : programul lisp contine o librarie cu 1200de functii care in total
pe disk sursele au dimensiunea de 1MB surse LISP..
Aceasta librarie de surse LISP este ousa gratuit pentru toti utilizatori..programului vlaxcompiler
Daca vrei surse de programe LISP puternic modularizate pe functii de dimensiuni mari
http://lisp2arx.3xforum.ro/userlist.php
Deci tu iti poti construi propriile programe LISP pe baza acestei librarii
Mai jos vezi lista functiilor in autolisp:
http://www.puiubrat.3x.ro/lisp2arx/ccpp ... oglist.txt
Ruleaza cu comanda -> nl. Comanda intr-un lisp o gasiti intotdeauna dupa sintagma "defun c:nume_comanda (argumente)".
Modificat de diagodose2009 (13-07-2012 14:48:41)
_______________________________________
http://we.tl/D8HOKFyTJ7
Poate ne spui si noua ce e cu pomelnicul acela!
La ce serveste lista de useri de la adresa indicata?
De la lansarea din 02.02.2011 s-a ajuns astazi la performanta: 44 useri inregistrati, 23 subiecte si 38 mesaje
Ceva nu functioneaza: sunt multi nepriceputi in lucrul cu programe autolisp sau tu nu transmiti corect informatiile...
Lasa agresivitatea si remarcile ironice privind programele milimetrice si lanseaza teme de discutie serioase, provocari pentru userii de pe acest forum!
_______________________________________
http://info-topograf.blogspot.ro/
Q: Ce nu intelege zamfy?
A: zamfy nu intelege ca scriptuirile (similare cu cea de mai mai jos) sunt bataie de joc la adresa forumului topograf.3x.forum.ro
Code:
(defun c:nl () (setq numelayer (getstring T "\nSpecifica numele noului layer: ")) (prompt "\nAlege culoarea layerului: ") (princ) (command "-layer" "make" (strcat numelayer) "C" (acad_colordlg 1) "" "") (princ) ) |
_______________________________________
http://we.tl/D8HOKFyTJ7
diagodose2009 a scris:
Q: Ce nu intelege zamfy? A: zamfy nu intelege ca scriptuirile (similare cu cea de mai mai jos) sunt bataie de joc la adresa forumului topograf.3x.forum.ro
Code:
(defun c:nl () (setq numelayer (getstring T "\nSpecifica numele noului layer: ")) (prompt "\nAlege culoarea layerului: ") (princ) (command "-layer" "make" (strcat numelayer) "C" (acad_colordlg 1) "" "") (princ) ) |
|
Stimate domn, cu ajutorul acestor scripturi "milimetrice" am invatat si eu AutoLISP tot de pe acest forum. Nu cred ca daca ii dai unui incepator un program care are sute de linii de cod, va intelege ceva din el. Scriptul de mai sus poate ca pentru unii utilizatori este util, nu toti topografii se pricep la programare. Si daca dvs. credeti ca acest script este o bataie de joc, atunci programul de la aceasta adresa http://topograf.3xforum.ro/post/4228/1/ ... stru_2012/ ce mai este? E mai bun pentru ca nu are 10 linii de cod, are 5000, dar nu face nimic?
Eu cred ca aici conteaza calitatea si nu cantitatea. Orice programator incearca pe cat posibil sa isi optimizeze codul sursa si sa scrie cat mai putine linii de cod. Daca acest forum nu va satisface, puteti sa vizitati http://www.theswamp.org/ si va asigur ca acolo veti gasi oameni care chiar se pricep la LISP si care cred ca se ridica la nivelul standardelor dvs.
Parerea mea este ca din utilizatorii acestui forum vreo 10% stiu programare cu adevarat, iar atat eu cat si multi altii nu facem parte din acestia.
Ati spus in multe randuri ca limbajul LISP este un limbaj fara viitor. Totusi, de la AutoCAD 2010 incoace, vad ca LISP sta bine mersi, dar VBA sau VB.net unde este? Spuneti ca ObjectARX sau C++ este viitorul. Insa ce merge pe AutoCAD 2010 nu merge pe 2011, ce merge pe AutoCAD 2012 nu merge pe 2013 s.a.m.d. In schimb, multe din scripturile LISP merg pe orice versiune de Autocad. Iar Lisp este un limbaj mult mai usor de invatat decat multe altele.
Si pe aceasta cale le multumesc unor utilizatori ca John Doe, TOPDAVLAD, advex s.a. care au avut "nesimtirea" de a posta "in bataie de joc" unele scripturi, din care m-am inspirat si fara de care nici in ziua de azi nu stiam LISP.
Constat inca o data ca userul diagodose2009 nu a inteles spiritul in care se discuta aici, pe forum. Nu dau sfaturi, nu motivez constatarea, doar afirm ca daca toti sunt nemultumiti de unul singur sau unul de toti ceilalti, exista solutii pentru ambele chestiuni.
Da, aici nu se apeleaza la CCR .
John Doe a scris:
@zamfy: daca imi spui ce anume nu ti-a iesit la PAD sau de ce nu seamana cu cel standard, poate am vreo idee care te ajuta. Pacat ca nu folosesti si DCL, e o interfata usor de construit si foarte prietenoasa.
|
Tipurile de PAD pe care le folosesc in mod curent arata cam asa:
http://www.fileshare.ro/77129305454.6
Motivul pentru care nu folosesc modelul standard dat de ANCPI este ca in zonele montane loturile au o forma mult mai neregulata decat cele in zona de campie, iar in modelul standard ba nu venea caroiajul calumea, ba nu incapea inventarul de coordonate, asa ca am facut acest model, unde pot sa asez elementele cum imi vine mai bine. Iar OCPI-ul cu care lucrez de vreo 3 ani si jumatate accepta acest format, care in esenta are toate elementele modelului standard, numai ca asezate un pic altfel.
Ti-am ascultat sfatul si m-am pus un pic cu burta pe carte si mi-am modificat aplicatia astfel incat sa lucreze si cu ferestre de dialog. Iata ceea ce a iesit pana acum:
504/581px 51.5KB
Modificat de zamfy (01-08-2012 13:43:59)
Foarte bine pentru inceput, bravo. Pe masura ce lucrezi, ai sa fii tu insuti nemultumit de unele chestiuni, o sa-ti mai vina idei si ai sa-ti modifici aplicatia.
Cateva sugestii, asa la prima vedere:
1. La rubrica pentru acte, n-ar fi mai bine sa faci o lista derulanta cu tipul actelor exact din fisierul CP? si mai scrii data, numarul si autoritatea emitenta.
2. Nu e chiar totuna daca e BI sau CI; ar merge si aici o lista derulanta, de unde sa se aleaga ce trebuie.
3. La CNP exista un algoritm de verificare, l-ai implementat? Se poate verifica automat, si eventual care ar trebui sa fie cifra de control ca sa iasa bine. Ca se mai greseste, iar fisierul CP nu-ti spune daca e gresit CNP-ul când dai "validare" , doar daca deschizi exact fereastra cu numarul, si poti introduce linistit CNP-uri gresite fara sa stii. Algoritmul l-am gasit cu Google, daca crezi ca te ajuta pot incerca sa-ti dau codul scris in LISP.
4. La adresa, eu am liste derulante care se completeaza singure, partial; alegi judetul si se formeaza lista cu UAT-urile, alegi UAT-ul si se formeaza lista cu localitatile din UAT-ul respectiv, si asa nu mai pot gresi daca scriu aiurea vreun nume de localitate sa nu-mi gaseasca codurile SIRUES pe urma.
Si per total, poate ar fi mai bine sa fie pentru un numar nedefinit de proprietari, nu neaparat numai pentru unul sau doi. Eu am caseta pentru un singur proprietar, dar si un buton "adauga" care memoreaza ce am scris in caseta, sterge tot si asteapta alte date pentru urmatorul.
PAD-urile tale difera putin de cele standard dar contin toate informatiile necesare. Si eu lucrez pe formate mai mari, dar tot cam asa le fac - sa aiba toate informatiile.
Nu vorbesc ca sa ma aflu in treaba. Si mie mi-au facut observatii (pertinente sau nu) alti utilizatori si mi-au fost de folos. Sper sa-ti fie si tie.
Multumesc pentru sugestii. Acesta este doar inceputul si mai am destul de mult de lucru pana o finalizez cum trebuie. Mai am de lucru la modulul care incarca fotografiile, deoarece mai da rateuri uneori. Din intamplare, am mai descoperit la modulul care genereaza CP-ul ca daca o localitate nu are in componenta sa un sat cu acelasi nume, fisierul CP nu este generat corect, asa ca trebuie sa schimb iarasi algoritmul.
1.Programul detecteaza automat data si nr. actului din stringul respectiv, iar autoritatea emitenta era generata in functie de tipul actului. Totusi, "forteaza" utilizatorul sa introduca datele intr-un anumit format, ceea ce nici eu nu imi doresc prea tare. Cred ca voi lua in considerare varianta propusa de tine, ceea ce va duce la o standardizare mult mai puternica a programului.
2.La mine in program, utilizatorul, printr-un prompt, alegea daca e BI sau CI. Totusi, e mai bine sa setezi de la inceput chestia asta.
3.Am vazut mai demult chestia cu CNP-ul intr-un filmulet facut de tine si mi-a placut. Nu am implementat un algoritm de verificare. M-ar ajuta enorm daca mi-ai putea trimite acest algoritm scris in LISP. Adresa de e-mail este aceeasi. Daca nu o mai gasesti, iti trimit eu un mail.
4.Este o idee foarte buna sa "constrangi" utilizatorul sa nu bage aiurea vreun nume de localitate, dar sa "bagi" vreo 2500 de UAT-uri e o munca migaloasa, insa realizabila.
Nu e deloc migalos, poti genera automat lista su UAT-urile dintr-un judet. Pur si simplu le selectezi pe cele care au acelasi SIRUTA (sau SIRSP, nu mai retin acuma din cap), iar cel mai mic o sa fie al resedintei de comuna. Pun pariu ca nu stiai; ai fi observat si tu pana la urma, dar cine stie dupa cat timp. Acuma stii de la inceput.
Algoritmul s-ar putea sa il mai am listat pe o foaie; as prefera sa ti-l faci tu pe al tau exact asa cum vrei. Daca nu mai gasesc foaia, iti trimit codul sursa dar e scris cam imbricat, trebuie sa-l raschirez putin ca sa fie mai usor de inteles. Nu ca esti tu tare de cap, dar am observat ca algoritmii scrisi de altii se pricep mai greu.
O sa folosesc adresa de mail declarata de tine pe forum. Daca cumva folsesti alta, trimite-o pe privat dar cumva sa nu o recunoasca site-ul, ca o transforma si nu pot pune atasamente.
Mai, oameni buni, nu puteti folosi alt site de sharing, pentru ca pe asta sunt virusi si nu pot descarca nimic. Si as vrea sa vad si eu ce faceti voi si, de ce nu, sa va ajut, daca pot.
Va multumesc.
Ma scuzati ca poate repet ceea ce sa mai scris pe forum, dar am nevoie rapid de un lisp care sa imi deseneze 3D in autocad punctele din ridicarea topo. Mentionez ca punctele sunt in fisier text pe care il atasaz mesajului.Daca se poate punctele sa fie si numerotate. Multumesc anticipat.
Ma scuzati ca poate repet ceea ce sa mai scris pe forum, dar am nevoie rapid de un lisp care sa imi deseneze 3D in autocad punctele din ridicarea topo. Mentionez ca punctele sunt in fisier text pe care il atasaz mesajului.Daca se poate punctele sa fie si numerotate. Multumesc anticipat. fisierul are extensia jpg trebuie schimbata txt deoarece nu pot ulpoad-a fisier text
Ma scuzati ca poate repet ceea ce sa mai scris pe forum, dar am nevoie rapid de un lisp care sa imi deseneze 3D in autocad punctele din ridicarea topo. Mentionez ca punctele sunt in fisier text in formatul de mai jos.Daca se poate punctele sa fie si numerotate. Multumesc anticipat.
1,716694.9346,367035.1215,152.5281,1687811.1303,3934389.9862,4712197.0190,47.560824846095,23.130772899802,LIM,CEP:0.053,SEP:0.085,STATUS:FIXED,SATS:11,PDOP:2.627,HDOP:1.334,VDOP:2.263,DATE:09-28-2011,TIME:17:45:45
2,716710.6582,367035.1554,153.3037,1687806.4374,3934379.8670,4712208.1257,47.560875737362,23.130771341525,CC,CEP:0.062,SEP:0.089,STATUS:FIXED,SATS:8,PDOP:2.355,HDOP:1.327,VDOP:1.946,DATE:09-28-2011,TIME:17:49:01
3,716692.0329,367047.1204,151.7333,1687822.7732,3934386.5351,4712194.6682,47.560816337188,23.130831006688,LIM,CEP:0.017,SEP:0.042,STATUS:FIXED,SATS:13,PDOP:1.521,HDOP:0.917,VDOP:1.213,DATE:09-28-2011,TIME:17:50:08
4,716697.4999,367047.7086,151.7783,1687821.6077,3934382.6423,4712198.3719,47.560834074005,23.130833240682,SAP,CEP:0.015,SEP:0.033,STATUS:FIXED,SATS:13,PDOP:1.808,HDOP:1.062,VDOP:1.464,DATE:09-28-2011,TIME:17:50:56
5,716716.7013,367068.0191,151.7647,1687834.1088,3934361.3913,4712211.5303,47.560897711994,23.130928958466,LIM,CEP:0.016,SEP:0.042,STATUS:FIXED,SATS:12,PDOP:1.576,HDOP:1.001,VDOP:1.218,DATE:09-28-2011,TIME:17:53:43
6,716715.5570,367074.4061,152.1100,1687840.3836,3934359.7580,4712211.1175,47.560894478267,23.130959844440,LIM,CEP:0.016,SEP:0.045,STATUS:FIXED,SATS:11,PDOP:2.102,HDOP:1.153,VDOP:1.757,DATE:09-28-2011,TIME:17:54:24
Pune punctele intr-un fisier cu extensia CSV, deschide-le cu Excel, filtreaza-le ca sa iese ca un fisier de coordonate si le poti raporta cu orice program obisnuit de raportare, de exemplu TopoLT.
Daca Excel nu-ti separa textul pe coloane dupa virgulele in fisierul CSV, inseamna ca nu-ti recunoaste virgula ca "list sepaator" - setarea asta o rezolvi din Control Panel. Si gata, nu ai nevoie de nici un LISP.
Sau, daca ti se pare prea complicat trimite-mi mie fisierul tau si in 5 minute iti raportez punctele si iti trimit inapoi desenul. Te costa o bere cand treci prin Sibiu.
Si... bun venit pe forum !
Sau in word converteste textul in tabel cu delimitator virgula si elimina coloanele ce nu trebuiesc, iar apoi transforma tabelul in text cu ce delimitator vrei. Pentru raportare gasesti si pe forum mai multe exemple. Unul e topolt.
ciprian333 din ce vad ei modelul de fisier care l-ai prezentat se aseamana cu caietul de teren scos din padul unui aparat GPS SOUTH - daca e corect ai in pad la meniul import / export obtiunea de a exporta un fisier text in care sunt prezentate pe coloane numele punctului - coordonata X - coordonata Y - cota punctului - Z si descrierea punctului (cod ) -
asta e varianta cea mai scurta ca timp - daca nu ar trebui sa urmezi sfatul lui John Doe care te va costa cateva minute in plus la fiecare job separat
Buna.
are cineva lispuri care ruleaza in Progecad?
_______________________________________
www.facebook.com/dMine.poezii/
Sunt niste aplicatii postate aici in format LSP, poti sa vezi daca functioneaza, asa ca idee; cele simple ar trebui sa functioneze.
Pentru ProgeCAD trebuie scrise cam de la inceput, daca vrei ceva anume se poate rezolva dar nu va fi gratis daca ti le scriu eu.
ma poate ajuta cineva cu un program care fabrica carnetul de teren introducand coordonatele punctelor?
Ce vrei sa contina carnetul de teren? Cred ca am postat undeva un utilitar "Carnet.lsp" care iti cere sa selectezi polilinia in cauza, punctul de statie si cel de orientare si face un carnet de teren. E facut pentru incadrarile in tarla.