_

Współrzędne punktów charakterystycznych.

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Współrzędne punktów charakterystycznych.

Postprzez pisiorek » lut 28, 2012 14:48

Witam. Potrzebuję sczytać współrzędne załamań polilinii ale w inny sposób niż za pomocą nxyz.lsp lub Punkt leh, w których to trzeba wskazywać ręcznie wszystkie punkty. Chciałbym aby można było zaznaczyć całą polilinię lub ich grupę a narzędzie samo ponumerowało punkty załamań i zapisało np. do pliku txt ich współrzędne. Zna ktoś może takie narzędzie, lispa ? Muszę dla urzędu przygotować projekt z przebiegiem kabla na mapie cyfrowej z podaniem współrzędnych wszystkich jego załamań, kabel ma kilkadziesiąt kilometrów więc ręcznie to potrwa wiele godzin.
pisiorek
 
Posty: 96
Dołączył(a): wrz 06, 2007 18:32

Re: Współrzędne punktów charakterystycznych.

Postprzez badziewiak » lut 28, 2012 16:33

pisiorek napisał(a):Witam. Potrzebuję sczytać współrzędne załamań polilinii ale w inny sposób niż za pomocą nxyz.lsp lub Punkt leh, w których to trzeba wskazywać ręcznie wszystkie punkty. Chciałbym aby można było zaznaczyć całą polilinię lub ich grupę a narzędzie samo ponumerowało punkty załamań i zapisało np. do pliku txt ich współrzędne. Zna ktoś może takie narzędzie, lispa ? Muszę dla urzędu przygotować projekt z przebiegiem kabla na mapie cyfrowej z podaniem współrzędnych wszystkich jego załamań, kabel ma kilkadziesiąt kilometrów więc ręcznie to potrwa wiele godzin.

Za czasow VBA mialem cos takiego... Wstaw zwykle bloki o odpowiednim ksztalcie (najlepiej dynamiczne), nastepnie uzyj numeratora kojackowego lub gdzies tam paletajacego sie po forum mojego.

EDIT:
Skopiuj blok z wartoscia atrybutu XXX (moze byc sex, laski, asian :lol: ), bo gdy zakonczysz numerowanie, to odpalisz wyszukiwanie tej frazy i bedziesz wiedzial, czy cos nie jest pominiete.

P.S.
Poslij mi na PM ten kabel, bez mapy. Takiego tasiemca jeszcze nie widzialem.

EDIT2:
Mojego nie uzywaj, bo kiedys mialem buga w module sortowania.
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2372
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

Re: Współrzędne punktów charakterystycznych.

Postprzez jimw » lut 29, 2012 01:35

Witam serdecznie,

mam na imię Jacek i z chęcią przedstawię sposób rozwiązania problemu.

Kod: Zaznacz cały
(defun c:jimw()

    (setvar "cmdecho" 0)

     ; inicjacja polecen vlax
   (vl-load-com)

     ; obszar modelu
     (setq _acad_ (vlax-get-acad-object)
         _model_ (vla-get-ModelSpace (vla-get-ActiveDocument _acad_))
   )       

     ; pobranie elementu (polilinii)
   (setq PL (entsel "\nWSKAŻ POLILINIĘ : "))
     (if (= PL nil)
   (progn
        (alert "Musisz wskazac POLILINIĘ")
        (vl-exit-with-value 0)
   ))
     (setq PL (car PL))

        (setq  ILOSC_WIERZCHOLKOW 0)
 
     (setq vla_PL (vlax-ename->vla-object PL)
         ILOSC_WIERZCHOLKOW (vlax-curve-getEndParam vla_PL))

        (setq i 0)
        (setq Petla (fix ILOSC_WIERZCHOLKOW)) ;fix: Real -> Integer

        (setq Dane_i (list)) 


(repeat (+ Petla 1)
       ; wyciagamy punkt z PL (Polilinii)
    (setq Punkt_1 (vlax-curve-getpointAtParam vla_PL i))
    (setq P1_x (car Punkt_1))
    (setq P1_y (cadr Punkt_1))
    (setq P1_z (caddr Punkt_1))
         (setq Dane_i (cons i Dane_i))
         (setq Dane_i (cons P1_x Dane_i))
         (setq Dane_i (cons P1_y Dane_i))
         (setq Dane_i (cons P1_z Dane_i))           
       (setq i (1+ i))
   );repeat

  (setq Dane_i (reverse Dane_i)) ; Dane_i - ciągła lista wszystkich wierzchołków (nr i X, Y, Z wierzcholka)

 
  ;(princ "\n")   
  ;(princ "Wybierz typ zapisu danych: 1 - ZAPIS WYKŁADNICZY, 2 - ZAPIS DZIESIĘTNY \n")
  ;(setq N (getint "WYBIERZ 1 lub 2 i naciśnij ENTER: "))

  (princ "\n")   
  (princ "Wybierz DOKŁADNOŚĆ zapisu danych (ilość miejsc po przecinku) \n")  ;IMPP
  (setq IMPP (getint "WYBIERZ 0..12 i naciśnij ENTER: "))
 
  ;ZAPIS DO PLIKU Dane.txt
  (setq K 0)

  ; Pobranie nazwy pliku z danych uzytkownika
   (setq plik_nazwa (getfiled "Wskaz nazwę plików z danymi:" "C:\\" "txt" 1))
  ;Flaga (0..15 - czyli ostatni skaladnik polecenia getfiled) sie sumuje z 4 bitow:
  ;1. rzadanie utworzenia nowego pliku
  ;2. blokuje przycisk type it (wpisz)
  ;3. pozwala uzytkownikowi wprowadzic dowolne rozszerzenie nazwy pliku
  ;4. wykorzystuje szukanie o podanej nazwie w sciezce poszukiwania bibliotek AutoCADa

  ;(setq plik_nazwa (findfile plik_nazwa))   ;przeszukuje katalogi pomocnicze (dodac tam powyzsza sciezke) i zwraca plik ze sciezka dostepu
  ; NIEPOTRZEBNE - w zaleznosci od parametrow FLAGI moze powodowac BŁĄD!
 
  ;Czytanie danych z pliku
  (setq plik (open plik_nazwa "w"))   ;open - tryb otwarcia: r - tryb do odczytu
                                       ; w - tryb zapisu
                        ; a - append (dołącz)
  (setq wiersz (list))

  (repeat (+ Petla 1)
    (progn
      (setq Nr (nth K Dane_i))
      (setq Nr_ (rtos Nr 2 0))
      ;Zwraca wynik konwersji liczby całkowitej na łancuch tekstowy N-zapis, IMPP-dokladnosc (ilosc miejsc po przecinku)
                                  ;N 2-zapis dziesietny
                                 ;N 1-zapis wykladniczy
      (setq X (nth (+ K 1) Dane_i))
      (setq X_ (rtos X 2 IMPP))

      (setq Y (nth (+ K 2) Dane_i))
      (setq Y_ (rtos Y 2 IMPP))

      (setq Z (nth (+ K 3) Dane_i))
      (setq Z_ (rtos Z 2 IMPP))

      (setq wiersz (strcat Nr_ "     X:" X_ "     Y:" Y_ "     Z:" Z_))

      ;lub bez X,Y,Z ...
      ;(setq wiersz (strcat X_ (chr 9) Y_ (chr 9) Z_))
                             ;(chr 9) - kod ASCII Tabulatora
     
      (write-line wiersz plik)     
     
      (setq K (+ K 4))
     );progn
   );repeat
 
  (close plik)
 
  (setvar "cmdecho" 1) 

 );defun


1. Po wywołaniu programu (polecenie: jimw) zostaniemy poproszeni o wskazanie pojedynczej polilinii.
2. Nastepnie można wybrać dokładność zapisu danych (ilość miejsc po przecinku dla eksportowanych współrzędnych).
3. Na końcu wskazujemy miejsce zapisu pliku z danymi (*.txt - domyślnie przyjęto zapis na dysku C:\).

Pokaż, że umiesz się dzielić ...

PS. To mój pierwszy post na Forum ...

Pozdrawiam,
Jacek
jimw

http://www.kursy.wozap.pl
;o)
Załączniki
jimw.LSP
Plik jimw.lsp
(3.46 KiB) Pobrane 708 razy
jimw
 
Posty: 1
Dołączył(a): lut 29, 2012 01:09

Re: Współrzędne punktów charakterystycznych.

Postprzez ZK » lut 29, 2012 09:32

Ciekawość :)
Co daje funkcja vl-exit-with-value gdyż nie do końca rozumiem jej ideę?
http://exchange.autodesk.com/autocad/en ... c-68ce.htm

Kod: Zaznacz cały
(setq PL (entsel "\nWSKAŻ POLILINIĘ : "))
(if (= PL nil)
(progn
(alert "Musisz wskazac POLILINIĘ")
(vl-exit-with-value 0)))


W powyższym przypadku gdzie ta wartość 0, zostaje zwrócona?

pozdrawiam,
ZK
**************************************
********* http://madebynati.com *********
**************************************
Avatar użytkownika
ZK
 
Posty: 1082
Dołączył(a): mar 11, 2009 12:08
Lokalizacja: Poznań

Re: Współrzędne punktów charakterystycznych.

Postprzez pisiorek » lut 29, 2012 09:39

Witamy Jacku na forum, miło nam że się przyłączasz do naszego grona. Generalnie zapis do pliku jest OK i możliwość wybrania dokładności jest również dobrym pomysłem. Z mojego punktu widzenia i tego co potrzebuję żeby to narzędzie robiło, to konieczna byłaby funkcja numerowania na dwg-u tych punktów, które później są zapisywane ze współrzędnymi do txt. Np. każdy punkt węzłowy żeby miał opis Punkt 1, Punkt 2 itd. Kolejna uwaga, to taka, że w przypadku gdy mamy na rysunku kilka polilinii, a potrzebujemy zachować ciągłość numeracji, to przydałaby się możliwość zdefiniowania początkowej wartości od której lisp zaczyna numerować punkty. W projekcie który muszę ponumerować mam trzy polilinie a numerację muszę mieć ciągłą i jeden plik wynikowy txt ze wszystkimi punktami. Pozdrawiam
pisiorek
 
Posty: 96
Dołączył(a): wrz 06, 2007 18:32

Re: Współrzędne punktów charakterystycznych.

Postprzez kojacek » lut 29, 2012 09:46

Z punktu widzenia logiki działania, doboru rozwiązań oraz poprawności kodu... przedstawione makro jest powiedzmy takie sobie, (oględnie mówiąc). Jest dużo do naprawy.

kojacek
Avatar użytkownika
kojacek
 
Posty: 5553
Dołączył(a): paź 03, 2005 20:17

Re: Współrzędne punktów charakterystycznych.

Postprzez pisiorek » lut 29, 2012 10:01

kojacek napisał(a):Z punktu widzenia logiki działania, doboru rozwiązań oraz poprawności kodu... przedstawione makro jest powiedzmy takie sobie, (oględnie mówiąc). Jest dużo do naprawy.

Trudno mi to oceniać z programowego punktu widzenia, bo nie znam lispa, ale uruchomiłem go u siebie i zapisał współrzędne do pliku txt poprawnie, co było jednym z założeń. Moje uwagi ograniczają się jedynie do samego działania aplikacji.
pisiorek
 
Posty: 96
Dołączył(a): wrz 06, 2007 18:32

Re: Współrzędne punktów charakterystycznych.

Postprzez kruuger » lut 29, 2012 10:37

Kod: Zaznacz cały
(defun c:PV (/ ob en n)
  (if
    (and
      (setq ob (entsel "\nWskaz polyline: "))
      (setq en (car ob))
      (setq n (getint "\nPunkt poczatkowy: "))
    )
    (progn
      (foreach % (jk:DXF_massoc 10 (entget en))
        (kr:ENT_MakeText % 1 (strcat "Punkt " (itoa n)) "0")
        (setq n (1+ n))
      )
    )
    (princ "\n** Blad **")
  )
  (princ)
)   
(defun jk:DXF_massoc (k l / r)
  (foreach % l
    (if (eq k (car %))
      (setq r (cons (cdr %) r))
    )
  )
  (reverse r)
)
(defun kr:ENT_MakeText (Point Height String Layer)
  (entmakex
    (list
      (cons 0 "TEXT")
      (cons 10 (trans Point 1 0 t))
      (cons 8 Layer)
      (cons 40 Height)
      (cons 1  String)
    )
  )
)
(princ)

nie za wiele. moze bedzie wiecej.
k.

EDIT: jak dokladnie ma wygladac plik txt. wrzuc przyklad.
Avatar użytkownika
kruuger
 
Posty: 4893
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: Współrzędne punktów charakterystycznych.

Postprzez pisiorek » lut 29, 2012 11:01

Dzięki koledzy za takie szerokie zainteresowanie moim problemem ale myślę, że Wasza robota przyda się również wielu innym użytkownikom, którzy projektują inwestycje liniowe (gazociągi, wodociągi, kable itd.) i muszą te projekty uzgadniać w tzw. ZUDP-ach.
@kruuger
Jeśli chodzi o wygląd samego pliku txt, to nie jest taka prosta sprawa, bo te wcześniej wspomniane ZUDP-y mają różne wymagania, niektóre chcą aby wszystkie punkty były zapisane cięgiem jeden po drugim z wartościami oddzielonymi przecinkiem np. punkt1, wsp.x, wsp.y, punkt2, wsp.x, wsp.y, itd. bo mają napisaną aplikację, która wprowadza im dane z pliku do bazy danych. Znowu w innych miastach wymagają układu kolumnowego czyli: punkt1 "tabulator" wsp.x "tabulator" wsp.y "znak podziału wiersza" i znowu kolejny punkt według powyższego klucza. Z mojego doświadczenia wynika, że lepiej żeby zapis odbywał się według tego drugiego przykładu, bo wstawiam sobie to dla swoich potrzeb do excela i wtedy mam tabelę z trzema kolumnami i w każdym kolejnym wierszu (rekordzie) kolejny punkt, gdy potrzebuję zrobić z tego plik txt zgodny z pierwszym przykładem to już z tym nie ma problemu bo robię to wordzie przy pomocy funkcji znajdź - zastąp i mam wszystko po przecinku.
pisiorek
 
Posty: 96
Dołączył(a): wrz 06, 2007 18:32

Re: Współrzędne punktów charakterystycznych.

Postprzez kruuger » lut 29, 2012 11:21

pisiorek napisał(a):Dzięki koledzy za takie szerokie zainteresowanie moim problemem ale myślę, że Wasza robota przyda się również wielu innym użytkownikom, którzy projektują inwestycje liniowe (gazociągi, wodociągi, kable itd.) i muszą te projekty uzgadniać w tzw. ZUDP-ach.
@kruuger
Jeśli chodzi o wygląd samego pliku txt, to nie jest taka prosta sprawa, bo te wcześniej wspomniane ZUDP-y mają różne wymagania, niektóre chcą aby wszystkie punkty były zapisane cięgiem jeden po drugim z wartościami oddzielonymi przecinkiem np. punkt1, wsp.x, wsp.y, punkt2, wsp.x, wsp.y, itd. bo mają napisaną aplikację, która wprowadza im dane z pliku do bazy danych. Znowu w innych miastach wymagają układu kolumnowego czyli: punkt1 "tabulator" wsp.x "tabulator" wsp.y "znak podziału wiersza" i znowu kolejny punkt według powyższego klucza. Z mojego doświadczenia wynika, że lepiej żeby zapis odbywał się według tego drugiego przykładu, bo wstawiam sobie to dla swoich potrzeb do excela i wtedy mam tabelę z trzema kolumnami i w każdym kolejnym wierszu (rekordzie) kolejny punkt, gdy potrzebuję zrobić z tego plik txt zgodny z pierwszym przykładem to już z tym nie ma problemu bo robię to wordzie przy pomocy funkcji znajdź - zastąp i mam wszystko po przecinku.

bez jakichs fantazji. testuj.
Kod: Zaznacz cały
(defun c:PV (/ ob en n fl lst)
  (if
    (and
      (setq ob (entsel "\nWskaz polyline: "))
      (setq en (car ob))
      (= (cdr (assoc 0 (entget en))) "LWPOLYLINE")
      (setq n (getint "\nPunkt poczatkowy: "))
    )
    (progn
      (foreach % (jk:DXF_massoc 10 (entget en))
        (kr:ENT_MakeText % 1 (strcat "Punkt" (itoa n)) "0")
        (setq lst
          (cons (strcat "Punkt" (itoa n) "\t" (rtos (car %)) "\t" (rtos (cadr %))) lst)
        )
        (setq n (1+ n))
      )
      (if (setq fl (getfiled "Wskaz nazwe plików z danymi:" "C:\\" "txt" 1))
        (if (kr:SYS_WriteToFile fl (reverse lst))
          (princ "\nPunkty zapisano do pliku.")
          (princ "\n** Blad zapisu do pliku **")
        )
        (princ "\n** Nie wybrano pliku **")
      )
    )
    (princ "\n** Blad **")
  )
  (princ)
)
(defun jk:DXF_massoc (k l / r)
  (foreach % l
    (if (eq k (car %))
      (setq r (cons (cdr %) r))
    )
  )
  (reverse r)
)
(defun kr:ENT_MakeText (Point Height String Layer)
  (entmakex
    (list
      (cons 0 "TEXT")
      (cons 10 (trans Point 1 0 t))
      (cons 8 Layer)
      (cons 40 Height)
      (cons 1  String)
    )
  )
)
(defun kr:SYS_WriteToFile (Path In / FL)
  (if
    (and
      (setq FL (open Path "w"))
      (eq (type FL) 'FILE)
    )
    (progn
      (foreach % In
        (write-line % FL)
      )
      (close FL)
      T
    )
  )
)
(princ)

k.
Avatar użytkownika
kruuger
 
Posty: 4893
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot]