Wstawianie bloków wg zadanych współrzędnych


Rekomendowane odpowiedzi

Cześć,

mam prośbę, czy mógłby mi ktoś pomóc

potrzebuję wstawić sporą ilość bloków wg zadanych współrzędnych

dodatkowo aby można było wstawione bloki identyfikować, chciałbym aby  do każdego bloku dodawał się również zdefiniowany atrybut

opcja najprostsza:

dane X,Y,ATT1

opcja rozbudowana 

dane X,Y,ATT1,ATT,ATT3

konstrukcja danych oczywiście jest do zmiany wg konieczności, aby program był niezawodny

z góry dzięki za pomoc

 

dane-opcja najprostrza.csv sample(1).dwg dane- wersja rozbudowana.csv

Odnośnik do komentarza
Udostępnij na innych stronach

Odnośnik do komentarza
Udostępnij na innych stronach

A ja od razu z rybą 😉 Trochę pozlepiałem z tego co miałem u siebie i wyszło mi coś takiego. Lisp wczytuje plik csv z trzema atrybutami. Przy testach były kłopoty z kodowaniem polskich liter w pliku csv ale tym się nie zajmowałem.

(princ "\nImport współrzędnych wstawienia bloku z pliku tekstowego v.0.1(beta)")
(princ "\nCopyright (c)2020 by Perlon")
(princ "\nŁadowanie funkcji c:txt2blocks.........")
(defun c:txt2blocks ( / p_dat o_dat linia *error* counter)

	(defun *error* (msg)
        (if (not (member msg '("Function cancelled" "quit / exit abort")))
            (princ (strcat "\nError: " msg))
        )
        (princ)
	)

	(setq p_dat (getfiled "Wpisz nazwę pliku" "" "csv" 0))
	(if p_dat
	  (progn
		(setq o_dat (open p_dat "r"))
		(setq counter 0)
		(setvar 'OSMODE 0)
		(while (setq linia (read-line o_dat))
			(progn
				(setq counter (1+ counter))
				(if (> (strlen linia) 0)
					(progn
						(setq lista (cd:CON_String2List linia '(",")))
						(command "_.INSERT" "HP_B2" "_s" 1 "_r" 0 (list (car lista) (cadr lista)) (caddr lista) (cadddr lista) (cadr (cdddr lista)))
					)
				)
			)
		)
	  )
	)
	(princ (strcat "\nPrzetworzono " (itoa counter) " punktow"))
	(princ)
)

(princ " Załadowane.")
(princ)

; =========================================================================================== ;
; Konwersja takstu z separatorami na liste /                                                  ;
; ------------------------------------------------------------------------------------------- ;
; (cd:CON_String2List "1;2;3;" '(";"))                                                        ;
; =========================================================================================== ;
;;;* ------------------------------------------------------------------------------------- *;;;
;;;* PODZIAŁ ŁAŃCUCHA TEKSTOWEGO NA LISTĘ				                                           *;;;
;;;*                                                                               				 *;;;
;;;* Funkcja rozbija łańcuch tekstowy na listę			                                     	 *;;;
;;;* Autor: Bill Kramer - opublikowana w CADENCE 4/97 				                             *;;;
;;;*                                                          				                     *;;;
;;;* Argumenty funkcji:                                               				             *;;;
;;;* ===================                                                      				     *;;;
;;;*  S - łańcuch tekstowy do podziału     				                                         *;;;
;;;*  D - lista separatorów (lista łańcuchów tekstowych)   				                         *;;;
;;;*																																											 *;;;
;;;* Uwaga: Jeżeli w łańcuchu do rozbicia znajdują się liczby typu INT, funkcja    				 *;;;
;;;*        zwraca je jako REAL																														 *;;;
;;;* ------------------------------------------------------------------------------------- *;;;

(defun cd:CON_String2List (s d / buf res cnt ch digs isnum temp)
	(setq	buf   ""
				cnt   1	
				isnum T
				digs  '("." "+" "-" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9")
  )
  (repeat (strlen s)
    (setq ch  (substr s cnt 1)
	  cnt (1+ cnt)
    )
    (cond	((and (member ch d) (> (strlen buf) 0))
       	(cond ((= (strcase buf T) "nil")
	  							(setq res (cons nil res))
	 						)
	 						((= isnum T)
	  							(setq	res (cons (if (= (atoi buf) (atof buf))
			    					(atoi buf)
			    					(atof buf)
			  					)
			  					res
		    					)
	  							)
	 						)
	 						(T (setq res (cons buf res)))
       )
       (setq 	buf ""
	     				isnum T
       )
      )
      ((not (member ch d))
       (setq buf (strcat buf ch))
       (if (null (member ch digs))
	 				(setq isnum nil)
       )
      )
    )
  )

  (if (> (strlen buf) 0)
    (setq res (cons (if	isnum
		      (atof buf)
		      buf
		    )
		    res
	      )
    )
  )
  (reverse res)
)

 

Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie