Risultati da 1 a 1 di 1
  1. #1
    RUGGIUNO
    Visitatore

    Predefinito [Recuperato] Rotazione blocchi 3d

    ingoenius
    06-10-2006, 09.30.13

    salve ho un grosso problema nel recuperare delle informazioni tramite lisp su dei blocchi selezionati,

    l'obbiettivo é
    selezionare dei blocchi di un disegno e recuperare un file .txt
    formattato in modo che ogni linea sia cosi'

    nomeblocco posX posY posZ RotX RotY RoZ SizeX SizeY SizeZ

    adesso tramite altri aiuti dal forum francese sono arrivato ad avere quasi tutto, manca solo il modo di trascrivere le rotazioni x y z del blocco ,

    lo ro suggeriscono delle cosa da cui io non ho capito molto , se voi ne sapete un po' di piu' e volete aiutarmi , alla fine vi daro' il lisp completo piu' un file python per blender , che serve appunto insieme a questo

    vi intaressa??

    ecco le linee che consigliano i francesi e che io non ho capito
    come usare e come mettere nello script

    possiamo recuperare il vettore normale del piano XY du SCO du bloc :

    (setq norm (cdr (assoc 210 (entget ent)))) ou (vlax-get (vlax-ename->vla-object ent) 'normal)

    et la rotation globale in rapporto a l'asse des X du SCG :

    (setq norm (cdr (assoc 50 (entget ent)))) ou (vla-get-rotation (vlax-ename->vla-object ent))

    Questi dati con il punto di inserzione sono sufficenti per riposizionare un blocco nella stessa posizione


    rpor66
    06-10-2006, 13.06.04

    Ti spiego quello che ho capito:
    - Il codice 50 restituisce l'angolo di rotazione del blocco, rispetto all'asse Z del piano ucs corrente.
    - Il codice 210 da la direzione di estrusione del blocco, come coordinata relativa ad un punto di origine 0,0,0.

    Puoi calcolarti le rotazioni sugli assi X e Y.

    Il punto di estrusione lo chiamo Pt1:
    (setq Pt1 (cdr (assoc 210 (entget ent))))

    Angolo rispetto ad asse Y:
    (setq AngY (angle (list 0 0) (list (car Pt1) (caddr Pt1))))
    praticamente valore X e Z di Pt1

    Angolo rispetto ad asse X:
    (setq AngX (angle (list 0 0) (list (cadr Pt1) (caddr Pt1))))
    praticamente valore Y e Z di Pt1

    A questo punto spero di non aver detto troppe boiate, perdonami altrimenti.


    ingoenius
    06-10-2006, 13.42.00

    scusa la mia ignoranza, ma il punto pt1 dove lo prendi?
    é il punto di inserzione del blocco?

    sto provando in tutti i modi ma non riesco a trovare la soluzione
    qualche anima buona sa come convertire queste informazioni ??


    joseph
    06-10-2006, 15.28.14

    scusa la mia ignoranza, ma il punto pt1 dove lo prendi?
    é il punto di inserzione del blocco?
    sto provando in tutti i modi ma non riesco a trovare la soluzione
    qualche anima buona sa come convertire queste informazioni ??
    Pt1 non è il punto di inserimento del blocco, le cui coordinate ricavi dal codice 10.
    Pt1 è l'estremo di un vettore unitario (più esattamente VERSORE) il cui primo estremo è posto nel punto 0,0,0 del sistema WCS e il secondo estremo (Pt1) ha coordinate, misurate rispetto all'WCS, indicate al codice 210; dà perciò un'indicazione di quanto si è spostato un asse Z, perpendicolare al piano di costruzione dell'oggetto e ad esso vincolato, rispetto all'asse Z del sistema generale WCS.

    Avrei invece ritenuto più utile calcolare gli angoli che il Versore forma con i piani XY, XZ e YZ rispettivamente.
    Joseph


    Shape3d
    06-10-2006, 17.05.31

    Io posso passarti una macro in vba che fa quello che chiedi, l'unica cosa è che riesco a rilevare solola rotazione del blocco rispetto al piano x e non gli altri due, proprietà che non sembra supportata dall'oggetto.

    Ti può essere utile

    esempio di output

    b8_bul 2951.30809795133 1389.09771122033 0 0 5 5 5
    b8_bul 2934.33048331957 881.86783654291 0 0 5 5 5
    b8_bul 2899.79716463915 375.446428864027 0 0 5 5 5
    b8_bul 1167.77729042529 1897.82314609118 0 0 5 5 5
    uguale 2151.39373139713 2873.86710126779 0 3.14159265358979 5 5 5
    uguale 2151.39373139713 2837.90857169245 0 3.14159265358979 5 5 5
    uguale 2151.39373139713 2619.19578420389 0 3.14159265358979 5 5 5
    uguale 2151.39373139713 2518.41146068467 0 3.14159265358979 5 5 5
    uguale 2151.39373139713 2183.04014469941 0 3.14159265358979 5 5 5
    uguale 2151.39373139713 2127.57512580539 0 3.14159265358979 5 5 5


    ingoenius
    09-10-2006, 11.03.50

    allora grazie alla collaborazione vostra e del forum francese cadxp e del forum cad italiano e del formi kino3d siamo arrivato penso ad una conclusione
    per quento riguarda lo scrip autolisp

    questo é quello che viene fuori

    attenzione pero' da quello che ho visto per funzionare perfattamente
    bisogna settare nelle unità del disegno che si analizza
    un valore alto di precisione per il calcolo dei gradiio ho messo 0.000000
    e ottengo una precisione accettabile per la rotazione dei blocchi

    ho aggiunto le linee per settare le variabili di precisione degli archi


    ;;; ASIN Retourne l'arc sinus du nombre, en radians

    (defun ASIN (num)
    (if (<= -1 num 1)
    (atan num (sqrt (- 1 (expt num 2))))
    )
    )


    ;;; Apply a transformation matrix to a vector by Vladimir Nesterovsky
    (defun mxv (m v)
    (mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
    )

    ;(defun C:Blend ()

    (defun C:Blend (/ ss n index str obj nome ins rot norm rotvec rotX rotY rotZ rotvec file)

    (setq SS (ssget (list (cons 0 "insert")))) ;zero é il codice del nome
    (setq N (sslength SS))
    (setq INDEX 0)


    (setq old-ArcUNITS (getvar "aunits"))
    (setq old-ArcPREC (getvar "auprec"))

    (setvar "aunits" 0) ;set des unité pour le degres
    (setvar "auprec" 6) ;set des precision pour le degres

    (setq STR "") ; chaine de caractère vide


    ;INIZIO DEL REPEAT ------------------------------------

    (repeat n ; Répéter pour chaque bloc

    (setq obj (vlax-ename->vla-object (ssname SS INDEX)))
    (setq nome (if (vlax-property-available-p obj "EffectiveName")
    (setq nome (vla-get-EffectiveName obj))
    (setq nome (vla-get-Name obj))
    )
    )
    (setq ins (vlax-get obj 'InsertionPoint))
    (setq rot (vla-get-Rotation obj))
    (setq norm (vlax-get obj 'normal))

    ;; calcul de la rotation du vecteur x dans le SCO du bloc

    (setq rotvec (trans (polar '(0 0 0) rot 1.0) norm 0))

    ;; Calcul des rotations subie par le bloc sur Y puis sur Z

    (setq rotY (- (asin (caddr rotvec)))) ; rotation sur Y
    (setq rotZ (atan (cadr rotvec) (car rotvec))) ; rotation sur Z

    ;; Calcul de la rotation inverse subie par le vecteur normal sur Z

    (setq zvec (mxv (list
    (list (cos (- rotZ)) (- (sin (- rotZ))) 0)
    (list (sin (- rotZ)) (cos (- rotZ)) 0)
    '(0 0 1)
    )
    norm
    )
    )

    ;; Calcul de la rotation inverse subie par le vecteur normal sur Y

    (setq zvec (mxv (list
    (list (cos (- rotY)) 0 (sin (- rotY)))
    '(0 1 0)
    (list (- (sin (- rotY))) 0 (cos (- rotY)))
    )
    zvec
    )
    )

    ;; Calcul de la rotation subie par le bloc sur X

    (setq rotX (- (atan (cadr zvec) (caddr zvec))))

    (setq str (strcat str ; ajout à la chaine précédente
    nome
    " "
    (rtos (car ins))
    " "
    (rtos (cadr ins))
    " "
    (rtos (caddr ins))
    " "
    (angtos rotX)
    " "
    (angtos rotY)
    " "
    (angtos rotZ)
    " "
    (rtos (vla-get-XScalefactor obj))
    " "
    (rtos (vla-get-YScalefactor obj))
    " "
    (rtos (vla-get-ZScalefactor obj))
    "\n" ; saut de ligne
    )
    )
    (setq INDEX (1+ INDEX)) ;pour passer au bloc suivant
    ) ; fin de repeat



    (setvar "aunits" old-ArcUNITS)
    (setvar "auprec" old-ArcPREC)





    (if
    (setq file (getfiled "Seletionner un fichier" "" "txt" 1))

    ;choisir ou créer un fichier
    (progn
    (setq file (open file "a")) ; ouvrir lr fichier
    (princ str file) ; écrire dans le fichier
    (close file) ; fermer le fichier
    )
    )

    (princ)
    )

    ancora grazie per la partecipazione di tutti
    Ultima modifica di PlannerRoad; 17-02-2008 alle 16: 10


  • Discussioni Simili

    1. f4 rotazione
      Di VigZ nel forum Inventor
      Risposte: 14
      Ultimo Messaggio: 16-04-2011, 23: 54
    2. Risposte: 7
      Ultimo Messaggio: 27-03-2010, 16: 58
    3. Risposte: 5
      Ultimo Messaggio: 17-02-2010, 20: 17
    4. rotazione di solidi
      Di ago nel forum Solid Edge
      Risposte: 8
      Ultimo Messaggio: 26-10-2009, 15: 39
    5. Gestore per sostituzione blocchi con altri blocchi
      Di arri nel forum Tips & Tricks per Autocad
      Risposte: 0
      Ultimo Messaggio: 09-02-2008, 21: 07

    Chi Ha Letto Questa Discussione: 0

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  



    CAD3D.it - la community dei progettisti