Šta je novo?

Čitanje podataka iz Autocad crteža?

kdejan

Čuven
Učlanjen(a)
21.08.2002
Poruke
519
Poena
630
Ima li neko da je radio nešto slično? Trebaju mi upute gde bih na najbrži način mogao da dođem do podataka o tome kako da dobijam informacije iz AutoCad crteža, u smislu da dužine pojedinih linija, pravca prostiranja i slično. Takođe mi trebaju upute i za obrnuti slučaj, tj. odakle mogu da saznam nešto i o tome kako bih recimo iz Visual Basica mogao da crtam direktno u neki AutoCad-ov crtež?
 
Ne razumem bas najbolje, aj reci sta ti konkretno treba il okaci crteze ovde.
Za pocetak desni klik pa dole nize imas properties za svaki ACAD objekat.
 
OK je to za properties. Nije mi problem crtanje u AutoCadu niti da ja "ručno" dolazim do karakteristika pojedinih elemenata preko properties-a.

Imam ideju da napravim program koji može da "komunicira" sa AutoCadom na taj način što može da analizira sam crtež. Treba mi neka funkcija preko koji mogu dobiti informaciju o dužini i poziciji neke linije kako bih kasnije mogao taj podatak da ubacim u moj program na dalju obradu. Takođe me interesuje i obrnut proces, da iz programa koji bih napravio automatski iscrtavam linije u željeni .dwg fajl.


Najbanalniji primer u oba smera:
-korisnik upiše u programu koji napravim za dužinu linije 100, ugao npr.45° i da počne iscrtavanje iz neke tačke čije su koordinate 100, 100 i posle toga program sam kreira .dwg fajl u kome je nacrtana linija tih karakteristika

- uobrnutom smeru: na crtežu postoji linija nacrtana pod uglom 45° i dužine 100 sa početkom u tački 100, 100. Pritiskom na komandno dugme, program "čupa" te podatke iz crteža i dalje ih obrađuje.

Eto to me interesuje. Ukoliko neko zna dobar sajt gde mogu saznati nešto više o takvim funckijama ili se bavio ovom problematikom i ima primere koje je voljan da mi prosledi bio bih mu zahvalan.
 
kdejan je napisao(la):
-korisnik upiše u programu koji napravim za dužinu linije 100, ugao npr.45° i da počne iscrtavanje iz neke tačke čije su koordinate 100, 100 i posle toga program sam kreira .dwg fajl u kome je nacrtana linija tih karakteristika

Najprostije ovo možeš tako što će tvoj program napraviti tekstualnu datoteku, skriptu, koja će sadržati Autokedove naredbe baš kao da si ih kucao u komandnoj liniji Autokeda. Onda tu datoteku možeš izvršiti u Autokedu jednom naredbom, ne sećam se kojom. Doduše, ovo znači da tvoj program neće baš sto posto direktno stvoriti .dwg, nego je potreban taj ručni korak izvršavanja (možda se današnjem Autokedu skripta može proslediti pri pokretanju?)

kdejan je napisao(la):
- uobrnutom smeru: na crtežu postoji linija nacrtana pod uglom 45° i dužine 100 sa početkom u tački 100, 100. Pritiskom na komandno dugme, program "čupa" te podatke iz crteža i dalje ih obrađuje.

Ovo u principu nije moguće. Popis svih objekata sa svojstvima iz crteža verovatno možeš da dobiješ putem autolispa, tj. napišeš autolisp program koji će ispisati svojstva objekata opet u tekstualnu datoteku, koju će tvoj program čitati; ali, kako ćeš znati koji objekat čemu služi — ako su na crtežu dve duži, kako će program znati koju da upotrebi? Za to bi bilo potrebno da objekti budu imenovani, tj. da uspostaviš dogovor sa korisnikom-crtačem tipa „Program očekuje da se na crtežu nalazi duž po imenu duzneka i ugao ugaoneki...“ (sve uz pretpostavku da se objekti mogu imenovati, ne sećam se tačno tih detalja).
 
Časlave, ako uspem da odradim to da je konverzija obrađenih podataka iz program u AutoCad i obrnuto moguća uz jedan klik miša to bi bilo odlično. Svestan sam od samog početka da će za ideju koju sam zamislio biti potrebno osmisliti dobar algoritam za prepoznavanje iscrtanih linija, ali trenutno mi je glavni zadatak da se malo bolje upoznam sa komunikacijom AutoCad-a sa drugim programima. Jedan od načina koji mi pada na pamet jeste da napišem makro koji bi posle iscrtavanja svake pojedinačne linije,a koje bi bile sve crtane u jednom layeru, automatski prebacio liniju u blok čiji bi nazivi bili redno imenovani brojevima kako se iscrtavaju. Kad dođem kući s posla potražiću informacije u vezi Autolispa da ga proučim malo pa da probam da izvedem nešto pomoću njegovih komandi. Ukoliko poseduješ neke jednostavne primere koji su slični ovoj tematici ili znaš sajtove koji se bave sličnim problemima, molim te prosledi. Nisam se ranije bavio ničim sličnim, tako da nisam siguran ni šta tačno treba da tražim na netu pa su mi i pojmovi vezani za ovo dobro došli. Recimo, ranije za Autolisp nisam čuo, a sad vidim da se može pokazati kao izuzetno moćna alatka.

Yooyo, skinuo sam neki PDF koji objašnjava komande koje se javljaju u DXFu pa ću se potruditi da ga proučim što bolje. Ukoliko uspem u tome i tu se otvara vrlo zanimljiva mogućnost da DXF fajl posreduje između mog programa i AutoCada.

Hvala vam na odgovorima. Pozabaviću se u međuvremenu upoznavanjem mogućnosti koje pruža Autolisp i DXF fajl, pa se nadam da ću u skorije vreme imati i nešto konkretnije da pitam. Ukoliko imate neke smernice koje bi mi pomogle da u ovom trenutku suzim gradivo na što je bliže moguće tematici, posavetujte me.
 
Poslednja izmena:
kdejan je napisao(la):
[...] trenutno mi je glavni zadatak da se malo bolje upoznam sa komunikacijom AutoCad-a sa drugim programima.

Ovo što sam ja naveo je neki najprostiji način s tačke gledišta „da se uradi što pre“, ali pati od datih nepogodnosti — petljanje još programskih jezika (autolisp, sirove naredbe za crtanje), pozivanje Autokeda spolja (sporo, i to ako je moguće), ili ručni elementi u postupku (posebno nezgodno ako se teži paketnoj obradi više ulaza/crteža). Tek, toliko mi je bilo dovoljno da se proguram kroz fakultet, a posle više nisam imao potrebe za komunikacijom s Autokedom da bih istraživao skladnije mogućnosti...

Što se tiče komunikacije putem DXF-a, jedna nepogodnost s njim je što je uvek bio malo zapušten u odnosu na unutrašnji, vlasnički Autodeskov format, tako da zavisi od složenosti crteža koliko može da pomogne; još gore, između verzija Autokeda može doći do izmena u načinu na koji predstavlja složene objekte u DXF primitivima. Druga nepogodnost na kratke staze je što se treba upoznati sa DXF-om kao formatom, i razviti kôd koji će ga čitati i pisati, ili nabaviti i upoznati biblioteke tome namenjene. Zgodno je, naravno, što na koncu sve zaista može (tj. do na mogućnosti DXF-a) „na dugme“ i bez akrobacija sa spoljašnjim elementima u obradi.

(Sad vidim i da postoji C++ biblioteka http://www.coin3d.org/lib/dime za čitanje i pisanje DXF-a, licencirana po želji ili kao slobodna ili kao komercijalna. Tako da je to već neko olakšanje — ako se program piše na C++-u.)

[...] Autolispa da ga proučim malo pa da probam da izvedem nešto pomoću njegovih komandi. Ukoliko poseduješ neke jednostavne primere koji su slični ovoj tematici ili znaš sajtove koji se bave sličnim problemima, molim te prosledi.

Retko sam išta (polu)automatski čitao iz Autokeda, već uglavnom pisao u njega (ili skriptom sa sirovim naredbama koju generiše spoljašnji program, ili autolispom). Sećam se da je sama pomoć Autokeda bila fin izvor dokumentacije i vodiča za autolisp. Na primer, tu je bila funkcija entsel, koja korisniku traži da izabere objekte, a onda entget kojom se izdvajaju pojedinačni izabrani objekti, odnosno njihova svojstva u obliku lispovske liste. Iz dokumentacije ovih funkcija valjda će uputiti na opšte u vezi sa pristupom objektima autolispom.

Ma, to je sve prosto samo kad se jednom proguta isprva groteskna sintaksa lispa kao lispa :) Uzgred, u zavisnosti od toga šta tvoj program tačno treba da radi, možda bi se mogao i ceo napisati u autolispu. Lično se time nisam bavio, ali su neki autolispom pravili i grafičke dijaloge, i šta sve ne.
 
Nazad
Vrh Dno