_

Rzutowanie na polilinie

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

Re: Rzutowanie na polilinie

Postprzez marhalec » sty 23, 2018 21:36

Ok, hektometraż wydaje się że działa, jest postęp :)
A co z wymiarem prostopadłym do polilinii?
marhalec
 
Posty: 5
Dołączył(a): sty 17, 2018 13:56

Re: Rzutowanie na polilinie

Postprzez ziele_o2k » sty 24, 2018 01:12

marhalec napisał(a):A co z wymiarem prostopadłym do polilinii?

Patrz, zapomniałem :D
poprawiony kod (zmieniłem polecenie blkmea):
Kod: Zaznacz cały
(defun c:blkin ( / _fle _dta _att_pos _tmp _x_pos _y_pos _z_pos)
  (if
    (and
      (setq _fle (getfiled "Select CSV File" "" "csv" 16))
      (setq _dta (LM:readcsv _fle))

    )
    (progn
      (setq _att_pos  (vl-position "Att" (setq _tmp (car _dta))))
      (setq _x_pos    (vl-position "x_cad" _tmp))
      (setq _y_pos    (vl-position "y_cad" _tmp))
      (setq _z_pos    (vl-position "z_cad" _tmp))
      (foreach % (cdr _dta)
        (if
          (cd:BLK_InsertBlock
            (list
              (atof (vl-string-translate "," "." (nth _x_pos %)))
              (atof (vl-string-translate "," "." (nth _y_pos %)))
              (if _z_pos
                (atof (vl-string-translate "," "." (nth _z_pos %)))
                0
              )
            )
            "forumcadpl_znacznik"
            nil
            nil
            T
          )
          (cd:BLK_SetAttValueVLA (entlast) "DESC" (nth _att_pos %))
        )
      )
    )
    (princ "\n...::: Coś nie poszło :::...")
  )
  (princ)
)


(defun c:blkmea ( / _ss _sta_pnt _ent _fn _tmp _res _pt1 _pt2)
  (princ "\nWskaż punkty do pomiaru: ")
  (if
    (and
      (setq _ss (ssget '((0 . "INSERT") (2 . "forumcadpl_znacznik"))))
      (setq _ent (car (entsel "\nWskaż polilinię: ")))
      (= (cdr (assoc 0 (entget _ent))) "LWPOLYLINE")
      (setq _sta_pnt (getreal "\nPodaj kilometraż punktu początkowego polilinii: "))
      (setq _fn (getfiled "Create Output File" "" "csv" 1))
    )
    (foreach % (cd:SSX_Convert _ss 0)
      (setq _tmp
        (list
          (cd:BLK_GetAttValueVLA % "DESC")
          (cd:CON_Real2Str
            (+ _sta_pnt
              (vlax-curve-getDistAtPoint _ent
                (setq _pt2
                  (vlax-curve-getClosestPointTo _ent
                    (trans (setq _pt1 (cdr (assoc 10 (entget %)))) % 0)
                  )
                )
              )
            )
            2 2
          )
          (cd:CON_Real2Str (distance _pt2 _pt1) 2 2)
        )
      )
      (setq _res (cons _tmp _res))
    )
  )
  (if _res
    (LM:WriteCSV (reverse _res) _fn)
  )
  (princ)
)

;; Read CSV  -  Lee Mac
;; Parses a CSV file into a matrix list of cell values.
;; csv - [str] filename of CSV file to read
 
(defun LM:readcsv ( csv / des lst sep str )
  (if (setq des (open csv "r"))
    (progn
      (setq sep (cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")) (",")))
      (while (setq str (read-line des))
        (setq lst (cons (LM:csv->lst str sep 0) lst))
      )
      (close des)
    )
  )
  (reverse lst)
)
 
;; CSV -> List  -  Lee Mac
;; Parses a line from a CSV file into a list of cell values.
;; str - [str] string read from CSV file
;; sep - [str] CSV separator token
;; pos - [int] initial position index (always zero)
 
(defun LM:csv->lst ( str sep pos / s )
  (cond
    ( (not (setq pos (vl-string-search sep str pos)))
      (if (wcmatch str "\"*\"")
        (list (LM:csv-replacequotes (substr str 2 (- (strlen str) 2))))
        (list str)
      )
    )
    ( (or (wcmatch (setq s (substr str 1 pos)) "\"*[~\"]")
        (and (wcmatch s "~*[~\"]*") (= 1 (logand 1 pos)))
      )
      (LM:csv->lst str sep (+ pos 2))
    )
    ( (wcmatch s "\"*\"")
      (cons
        (LM:csv-replacequotes (substr str 2 (- pos 2)))
        (LM:csv->lst (substr str (+ pos 2)) sep 0)
      )
    )
    (   (cons s (LM:csv->lst (substr str (+ pos 2)) sep 0)))
  )
)
 
(defun LM:csv-replacequotes ( str / pos )
  (setq pos 0)
  (while (setq pos (vl-string-search  "\"\"" str pos))
    (setq str (vl-string-subst "\"" "\"\"" str pos)
          pos (1+ pos)
    )
  )
  str
)

;; Write CSV  -  Lee Mac
;; Writes a matrix list of cell values to a CSV file.
;; lst - [lst] list of lists, sublist is row of cell values
;; csv - [str] filename of CSV file to write
;; Returns T if successful, else nil
 
(defun LM:writecsv ( lst csv / des sep )
  (if (setq des (open csv "w"))
    (progn
      (setq sep (cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")) (",")))
      (foreach row lst (write-line (LM:lst->csv row sep) des))
      (close des)
      t
    )
  )
)
 
;; List -> CSV  -  Lee Mac
;; Concatenates a row of cell values to be written to a CSV file.
;; lst - [lst] list containing row of CSV cell values
;; sep - [str] CSV separator token
 
(defun LM:lst->csv ( lst sep )
  (if (cdr lst)
    (strcat (LM:csv-addquotes (car lst) sep) sep (LM:lst->csv (cdr lst) sep))
    (LM:csv-addquotes (car lst) sep)
  )
)
 
(defun LM:csv-addquotes ( str sep / pos )
  (cond
    ( (wcmatch str (strcat "*[`" sep "\"]*"))
      (setq pos 0)   
      (while (setq pos (vl-string-position 34 str pos))
        (setq str (vl-string-subst "\"\"" "\"" str pos)
          pos (+ pos 2)
        )
      )
      (strcat "\"" str "\"")
    )
    ( str )
  )
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 736
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Rzutowanie na polilinie

Postprzez ziele_o2k » sty 25, 2018 17:05

marhalec napisał(a):Hej, potrzebuje jeszcze wiedziec w jakim formacie mam wpisac kilometraż to raz? Dwa jak scalić polilinie ponieważ nie mogę tego zrobić nie wiem czemu. Różna wysokość?

  1. kilometraż wpisujesz w zależności od jednostek w jakich rysujesz.
    Przykładowo:
    - rysujesz w m,a początek polilinii to km 0+546, to w moim poleceniu dajesz 546
    - rysujesz w cm, to w moim lispie wpisujesz 54600
    potem sobie wszystko obrabiasz w excelu
  2. polilinie muszę być na tej samej współrzędnej z, w tym wątku masz odpowiedź:
    http://forum.cad.pl/post7742705.html#p7742701
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 736
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Poprzednia strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Google [Bot]