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


Recommended Posts

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

Link to comment
Share on other sites

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)
)

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...