_

[LISP] CADPL-Pack-v1.lsp [Dyskusja]

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: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » kwi 09, 2018 13:46

ziele_o2k napisał(a):Zostawiam tutaj bo nie usiadłem cały czas do githuba :)

zobaczymy. ode mnie takie cos. sie gdzies plątało.
Kod: Zaznacz cały
; =========================================================================================== ;
; Dolacza odnsonik zewnetrzny (xref) / Attach external reference (xref)                       ;
;  Path      [STR] - pelna sciezka do pliku / full path to xref                               ;
;  File      [STR] - nazwa pliku xref / xref file name                                        ;
;  Pt       [LIST] - punkt wstawienia / insertion point                                       ;
;  Xyz      [LIST] - LIST = lista wspolczynnikow skali XYZ / list of XYZ scale factor         ;
;                    nil  = X=Y=Z=1.0                                                         ;
;  Rot      [REAL] - kat obrotu w radianach / rotation angle in radians                       ;
;  RefType [T/nil] - typ odniesienia  / reference type:                                       ;
;                    nil = dolaczony / attachment                                             ;
;                    T   = nakladkowy / overlay                                               ;
; =========================================================================================== ;
; (cd:BLK_AttachXref "C:\\CAD" "Cad.dwg" '(5 5 5) '(10 5 0) 0.75 T)                           ;
; =========================================================================================== ;
(defun cd:BLK_AttachXref (Path File Pt Xyz Rot RefType)
  (vl-catch-all-apply
    'vla-AttachExternalReference
    (list
      (vla-get-modelspace (cd:ACX_ADoc))
      (strcat Path "\\" File) File
      (vlax-3d-point Pt)
      (if (not Xyz) 1.0 (car Xyz))
      (if (not Xyz) 1.0 (cadr Xyz))
      (if (not Xyz) 1.0 (caddr Xyz))
      Rot
      (if RefType
        :vlax-true
        :vlax-false
      )
    )
  )
)
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez ziele_o2k » kwi 09, 2018 15:05

kruuger napisał(a):
ziele_o2k napisał(a):ode mnie takie cos. sie gdzies plątało.

Przecież już jest w packu coś takiego:
Kod: Zaznacz cały
; =========================================================================================== ;
; Wstawia odnośnik zewnętrzny / Attach Xref                                                   ;
;  Path  [STR]      - pełna ścieżka do pliku xref / xref full path                            ;
;  File  [STR]      - nazwa pliku odnośnika / xref file name                                  ;
;  Pb    [LIST]     - punkt wstawienia / insertion point                                      ;
;  Xyz   [LIST/nil] - LISTA = lista wspolczynnikow skali XYZ / list of X Y Z scale factor     ;
;                     nil   = X=Y=Z=1.0                                                       ;
;  Rot   [REAL/nil] - REAL = kat obrotu w radianach / rotation angle in radians               ;
;                     nil  = kat=0.0 / angle=0.0                                              ;
;  Ovlay [BOOL]     - typ odnośnika / reference type:                                         ;
;                     nil = dołącz / attachment                                               ;
;                     T   = nałóż / overlay                                                   ;
; ------------------------------------------------------------------------------------------- ;
; (cd:BLK_AttachXref "C:\\CAD" "Cad" '(5 5 5) '(10 10 10) 0.75 T)                             ;
; (cd:BLK_AttachXref "C:\\CAD\\" "Cad" '(5 5 5) '(10 10 10) 0.75 T)                           ;
; =========================================================================================== ;
(defun cd:BLK_AttachXref (Path File Pb Xyz Rot Ovlay / zdir xang res)
  (setq   
    zdir (trans '(0 0 1) 1 0 T)
    xang (angle '(0 0 0) (trans (getvar "UCSXDIR") 0 zdir))
  )
  (if
    (not
      (vl-catch-all-error-p
        (setq res
          (vl-catch-all-apply
            (quote vla-AttachExternalReference)
            (list
              (cd:ACX_ASpace)
              (strcat (vl-string-right-trim "\\" Path) "\\" File)
              File
              (vlax-3d-point Pb)
              (if (not Xyz) 1.0 (car Xyz))
              (if (not Xyz) 1.0 (cadr Xyz))
              (if (not Xyz) 1.0 (caddr Xyz))
              (if (not Rot) 0.0 (+ Rot xang))
              (if Ovlay
                :vlax-true
                :vlax-false
              )
            )
          )
        )
      )
    )
    res
  )
)
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » kwi 09, 2018 18:03

ziele_o2k napisał(a):Przecież już jest w packu coś takiego:

zawiesilem sie, nie nadpisalem sobie pack'a w robocie i tam tego nie mialem.
ale przy okazji wyszlo ze nie jest chyba konieczna korekta kata XANG. xref wstawia sie ladnie bez tego w ucs'ach.
mozecie sprawdzic.
k.
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » kwi 10, 2018 09:51

Nie wiem czy przy CAD-Pack'u o tym, czy w innym miejscu... Coś i tak chyba "u siebie" o tym napiszę. Dwie funkcje wszystkim znane i każdy je ma (a my nie mamy w Pack'u) - mianowicie konwersja kątów. I tak to wygląda:
Kod: Zaznacz cały
;;;
;;; Degrees to radians conversion
;;;
(defun DTR (a)
  (* pi (/ a 180.0))
)
;;;
;;; Radians to degrees conversion
;;;
(defun RTD (a)
  (* 180.0 (/ a pi))
)

Teraz patrzymy jak działa:
Kod: Zaznacz cały
(rtd (* 0.5 pi))  ; -> 90.0      - ok
(rtd pi)          ; -> 180.0     - ok
(rtd (* 2 pi))    ; -> 360.0     - ok... ale czy 360.0 to nie 0.0 ???

no i dalej:

Kod: Zaznacz cały
(rtd (* 2.5 pi))  ; --> 450.0    - trochę mniej ok...
(rtd 25)          ; --> 1432.39  - no nie ok raczej...


Zatem zmierzam do takiej konwersji, aby każdy kąt sprowadzić do wielkości w zakresie kąta pełnego. Bo to wydaje się być (bardziej) naturalnym. I teraz dwie funkcje takie (wykorzystujące poprzednie):

Kod: Zaznacz cały
; -------------------------------------------------------------------- ;
(defun rtdx (a)
  (if
    (>= a (* 2 pi))
    (rtd (angtof (angtos (dtr (rtd a)))))
    (rtd a)
  )
)
; -------------------------------------------------------------------- ;
(defun dtrx (a)
  (if
    (>= a 360.0)
    (dtr (rtdx (dtr a)))
    (dtr a)
  )
)
; -------------------------------------------------------------------- ;


No i teraz:

Kod: Zaznacz cały
(rtdx pi)         ; --> 180.0   ; ok
(rtdx (* 2 pi))   ; --> 0.0     ; 360 = 0
(rtdx (* 2.5 pi)) ; --> 90.0    ; ok (było 450.0)
(rtdx 25)         ; --> 352.0   ; ok (a było 1432...)

Lepiej?
A może podkręcić tak żeby przycinanie do zakresu pełnego kąta, było opcją (dodać argument) , czyli np.

Kod: Zaznacz cały
(rtdx (* 2.5 pi) nil)  ; --> 450.0
(rtdx (* 2.5 pi) T)    ; --> 90.0


Co myślicie?
PS. To samo (przez analogię, zatem bez osobnego opisu) jest dla deg->rad
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » kwi 10, 2018 11:01

kojacek napisał(a):Co myślicie?

czy przekazemy 0, 360, 720 to program i tak wiec co zrobic.
kolejne dodatki bede nieco spowalniac funkcje.
w sumie obojetne. na pewno warto dodac DTR RTD.
k.
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » kwi 10, 2018 11:17

kruuger napisał(a):
kojacek napisał(a):Co myślicie?

czy przekazemy 0, 360, 720 to program i tak wiec co zrobic.
kolejne dodatki bede nieco spowalniac funkcje.
w sumie obojetne. na pewno warto dodac DTR RTD.
k.


A w oknie dialogowym? Wartość kąta 1440?
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez ziele_o2k » kwi 10, 2018 11:41

kojacek napisał(a):
kruuger napisał(a):
kojacek napisał(a):Co myślicie?

czy przekazemy 0, 360, 720 to program i tak wiec co zrobic.
kolejne dodatki bede nieco spowalniac funkcje.
w sumie obojetne. na pewno warto dodac DTR RTD.
k.


A w oknie dialogowym? Wartość kąta 1440?

Dlatego podoba mi się opcja T/nil.
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 728
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » kwi 10, 2018 12:08

kojacek napisał(a):
kruuger napisał(a):
kojacek napisał(a):Co myślicie?

czy przekazemy 0, 360, 720 to program i tak wiec co zrobic.
kolejne dodatki bede nieco spowalniac funkcje.
w sumie obojetne. na pewno warto dodac DTR RTD.
k.


A w oknie dialogowym? Wartość kąta 1440?

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

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » kwi 10, 2018 13:45

kruuger napisał(a): ok tym mnie przekonales :)

To tak może wyglądać, jeśli argument Mode jest /= nil to kąt sprowadzany jest do zakresu: 0.0-2pi. "Klasyczne" dtr rtd jako funkcje wewnętrzne:
Kod: Zaznacz cały
; -------------------------------------------------------------------- ;
(defun cd:CON_RtD (a Mode / d r)
  (defun d (a)(* pi (/ a 180.0)))
  (defun r (a)(* 180.0 (/ a pi)))
  (if Mode
    (if
      (>= a (* 2 pi))
      (r (angtof (angtos (d (r a)))))
      (r a)
    )
    (r a)
  )
)
; -------------------------------------------------------------------- ;
(defun cd:CON_DtR (a Mode / d)
  (defun d (a)(* pi (/ a 180.0)))
  (if Mode
    (if
      (>= a 360.0)
      (d (cd:CON_RtD (d a) T))
      (d a)
    )
    (d a)
  )
)
; -------------------------------------------------------------------- ;
Avatar użytkownika
kojacek
 
Posty: 5450
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » kwi 10, 2018 14:35

cos z dokladnoscia chyba nie gra?
Kod: Zaznacz cały
Command: (cd:CON_rtd 34.332 nil)
1967.08

Command: (cd:CON_rtd 34.332 t)
167.0
Avatar użytkownika
kruuger
 
Posty: 4839
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Poprzednia stronaNastępna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników