Rekomendowane odpowiedzi

Opublikowano

Potrzebowałbym taką funkcję do kopiowania (a może już jest?):

  1. wybieram funkcje i zaznaczam element
  2. teraz mogę wpisać odległość albo zmierzyć myszą
  3. dopiero teraz wskazuję punkt bazowy i kierunek
  4. po naciśnięciu enter program wykonuje kopię w wybranym kierunku
  5. po kolejnych naciśnięciach entera tworzone są kolejne kopie w takiej samej odległości od ostatniej kopi jak odległość w punkcie 2 i w tym samym kierunku - czyli jak w punkcie 2 wpisze odległość 60, to kopie będą w 60, 120, 180, 240, 300 itp.

 

Opublikowano

Dzięki za zainteresowanie.

Nie znałem tego sposobu. Ale nie do końca mi pasuje bo muszę znać liczbę powtórzeń na początku. Dodatkowo chciałbym ustawić odległość powtórzeń, a dopiero potem kierunek

Opublikowano

Chciałbym np. zrobić szyk na tej górnej lini w takiej samej odległości jak pomiędzy okręgami na dolnej.

Mogę sobie skopiować okręgi, potem obrócić ustawić odniesienie a potem kopiować ręcznie brakujące. Albo mierzyć, pamiętać, wpisywać.

A tak: wybieram element,dwa kliki mam odległość wskazuję kierunek a każdy enter to kolejne powtórzenie.

1689797664_2020-10-2918_49_10-Window.thumb.png.5a0e0ebe07df3823d228ed1d4a16b93a.png

Opublikowano

Taki skrypt mógłby wyglądać np tak:

(defun C:SzykManualny (  / element odleglosc bazowy kierunek 
							Koniec licznik
							kopiuj
	*error* )	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nC:SzykManualny:*error*: " ) (princ msg ) (princ "\n")	) )
	)
	(setq Koniec ""
			licznik 1 )
	
	(defun kopiuj (  / v1
		*error* )	(defun *error* ( msg / ) 
			(if (not (null msg ) )	(progn (princ "\nkopiuj:*error*: " ) (princ msg ) (princ "\n")	) )
		)
		( setq v1 ( Vector:Normalize ( Vector: kierunek bazowy  ) ) ) 
		( setq v  ( Vector:XScalar v1 (* odleglosc licznik ) ) )
		( setq clone (vlax-invoke-method element 'Copy) )
		( setq px (Vector+ bazowy v ))
		(vlax-invoke-method clone 'Move (vlax-3d-point bazowy) (vlax-3d-point px)  )
		(setq licznik (1+ licznik)) 
	)
	
	
	(setq element (SelSet:Entsel "Wskaż element" nil))
		(if (null element) (*error* nil) )
	(setq odleglosc (ZWCAD:GetDist "Podaj odległość" poprzedniaOdleglosc))
		(if (null odleglosc) (*error* nil) )
	(setq bazowy (ZWCAD:Getpoint "Wskaż punkt bazowy" nil nil ) )
		(if (null bazowy) (*error* nil) )
	(setq kierunek (ZWCAD:Getpoint "Wskaż kierunek" bazowy nil ) )
		(if (null kierunek) (*error* nil) )
	(while	(equal Koniec "")
		( kopiuj )
		(setq Koniec ( ZWCAD:GetString "Czy wstawić kolejny" "" ) )
	)
	
	(setq poprzedniaOdleglosc odleglosc)
	(princ)
)

(defun Vector: ( A B /
  *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nVector::*error*: " ) (princ msg ) (princ "\n")	) )
	)       
	(list 
		(- (car A) (car B ) )
		(- (cadr A) (cadr B ) )
		(- (caddr A) (caddr B ) )
	)
)

(defun Vector:Length (vec / s 
 *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nVector:Length:*error*: " ) (princ msg ) (princ "\n")	) )
	)       
	(setq s (+ (* (car vec) (car vec) ) (* (cadr vec) (cadr vec) ) (* (caddr vec) (caddr vec) )))
	(if (< s 0.0000000000001 ) 0.0 (sqrt s ))
) 
(defun Vector:Normalize (v / len 
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nVector:Normalize:*error*: " ) (princ msg ) (princ "\n")	) )
	)       
	(setq len (Vector:Length v) )
	(if (< len 0.00000001)	
		(list 0.0 0.0 0.0 )
		(progn
			(list 	(/ (car v ) len)
					(/ (cadr v ) len)
					(/ (caddr v ) len)	
			)
		)
	)
)


(defun Vector:XScalar (v s / 
 *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nVector:XScalar :*error*: " ) (princ msg ) (princ "\n")	) )
	)      
	(mapcar '(lambda (x) (* x s) ) v )
)

(defun Vector+ (A B / 
 *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\n Vector+ : *error*: " ) (princ msg ) (princ "\n")	) )
	)                  
	(if (null A) (setq A (list 0.0 0.0 0.0  ) ))
	(if (null B) (setq B (list 0.0 0.0 0.0  ) ))
	(list 
		(+ (car A ) (car B) )
		(+ (cadr A ) (cadr B) )
		(+ (caddr A ) (caddr B ) )
	)
)

(defun SelSet:Entsel (tresc filter / OldNoMutt MSel OutVal 
 *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nSelSet:Entsel:*error*: " ) (princ msg ) (princ "\n")	) )
	)      

	(setq tresc (strcat "\n" tresc ": ") )
	(prompt tresc )
	
	(setq OldNoMutt (getvar 'NOMUTT))	
	(setvar 'NOMUTT 1)	
	(setq MSel
		(if (null filter)
			(vl-catch-all-apply 'ssget (list ":S:E" ))
			(vl-catch-all-apply 'ssget (list ":S:E" filter ))
		)
	)
		
	(setvar 'NOMUTT OldNoMutt )
	(if (vl-catch-all-error-p MSel)
	(progn
		(prompt (vl-catch-all-error-message MSel))
	)
	(progn
	  (if MSel (progn		
		(setq OutVal (vlax-ename->vla-object  (ssname MSel 0)) )			
	  ))
	)
	)
	OutVal
)


(defun ZWCAD:GetDist (tresc domyslny / Wynik trescformat liczba  
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nZWCAD:GetDist:*error*: " ) (princ msg ) (princ "\n")	) )
	)      	
	(if domyslny (if (numberp domyslny) (setq tresc (strcat tresc "<" (rtos domyslny 2 4) ">") )))
	(setq tresc (strcat "\n" tresc ": "))
	(setq liczba(vl-catch-all-apply 'getdist (list tresc )))
	(if (vl-catch-all-error-p liczba)
	(progn
		(prompt (vl-catch-all-error-message liczba))
		(setq Wynik nil )
	)
	(progn
	  (if (null liczba) 
		(setq Wynik domyslny )
		(setq Wynik liczba)
	  )
	)
  )
  Wynik
)


(defun ZWCAD:Getpoint (tresc P0 domyslny / SelPt Wynik 
 *error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nZWCAD:Getpoint:*error*: " ) (princ msg ) (princ "\n")	) )
	)      
;(ZWCAD:Getpoint tresc P0 domyslny )
	(setq tresc (strcat "\n" tresc ": "))
	(if (not(null P0))
		(setq SelPt(vl-catch-all-apply 'getpoint (list P0 tresc )))
		(setq SelPt(vl-catch-all-apply 'getpoint (list  tresc )))
	)
	(if (vl-catch-all-error-p SelPt)
	(progn
		(prompt (vl-catch-all-error-message SelPt))
		(setq Wynik nil )
	)
	(progn				
	  (if (null SelPt) 
		(setq Wynik domyslny )
		(setq Wynik SelPt)
	  )
	)
  )
  Wynik
)


(defun ZWCAD:GetString (tresc domyslny / 
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nZWCAD:GetString:*error*: " ) (princ msg ) (princ "\n")	) )
	)      
	(setq tresc (strcat "\n" tresc ": "))
	(String:Get tresc domyslny)
)

(defun String:Get (komunikat defVal / Wynik tekst 
	*error* ) 	(defun *error* ( msg / ) 
		(if (not (null msg ) )	(progn (princ "\nString:Get:*error*: " ) (princ msg ) (princ "\n")	) )
	)      
	;	(setq komunikat "podaj tekst" )
	;	(setq defVal "SLU" )
	 
	(if defVal (if (not(= defVal "")) (setq komunikat (strcat komunikat "<" defVal ">:" ) )) )
	(setq tekst(vl-catch-all-apply 'getstring (list komunikat )))
	(if (vl-catch-all-error-p tekst)
	(progn
		(prompt (vl-catch-all-error-message tekst))
		(setq Wynik nil )
	)
	(progn
	  (if (null tekst) 
		(setq Wynik defVal )
		(if (= tekst "")
			(setq Wynik defVal )
			(if (= tekst ".")
				(setq Wynik "")
				(setq Wynik tekst)
			)
		)
	  )
	)
  )
  Wynik

)

 

Szyk.lsp

Opublikowano

Dziękuję. Bardzo mi to ułatwi życie.

Jest nawet lepiej niż myślałem bo można wybrać dowolny punkt bazowy.

Jeden tylko problem mam,że mogę wskazać tylko jeden element do kopiowania a chciałbym móc zaznaczyć więcej obiektów.

  • 9 miesięcy temu...
Opublikowano

KIedyś, myślałem o czymś podobnym. Dla mnie lepiej by było gdyby wskazywać rozstaw, a potem punkt poczatkowy i końcowy. Najlepiej żeby z obiektów była tworzona grupa. Nie lubie szyków, ani nowego (ARRAY w ZWCAD 2021) ani starego (ARRAY CLASSIC), zresztą nie zawsze są dla mnie wystarczające bo czasem musze obiekt przestawić, tj. pojedynczy element nie ma takiego samego rozstawu (rysowanie zbrojenia). Dzisiaj chyba to co chciał osiągnąć autor można robić "nowym" szykiem (polecenie ZWCAD 2021)

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