Camera lijst? - OPGELOST

Gestart door julien, do 27 06 2024, 11:38:23

Vorige topic - Volgende topic

julien

Ik ben, sinds lang, nog eens bezig met een ruimte volledig uit te tekenen zodat ik er renders van kan maken.
Alles lukt, maar ik loop tegen een ergernis aan.
Ik heb een aantal camera's geplaatst, maar ze selecteren is altijd lastig.

De camera's staan in een gesloten ruimte, dus om de camera te kunnen selecteren om de properties te kunnen aanpassen moet ik telkens een antal objecten verbergen.

Is er geen gemakkelijkere manier, zoals bijvoorbeeld voor lichten met Lightlist?

EddyBeerke

Je zou Blender kunnen gebruiken, daar kan het wel. En fotorealistisch renderen kan ook goed  :mrgreen:
blender.org

Met AutoCAD kun je een filter maken, en dan ALL -> de-select degene die je niet nodig hebt.
Ik heb even geprobeerd maar je kunt niet op naam selecteren.

Anders zou je een selectie met lisp kunnen maken die alleen de camera selecteert met een bepaalde naam.
Civil3d 2022, Blender 3.4 gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Reimer

Het is mogelijk om met qselect een camera te selecteren door de juiste naam op te geven.
Ik vond het leuk om te proberen dit met een lisp-routine op te lossen.
De onderstaande lisp maakt een lijst van alle camera's in de tekening. Na selectie van een camera wordt deze in de tekening zelf geselecteerd.

(defun c:GETCAM ( / ALLCAMS CNT CAMLIST CAM CAMNAME CAMSEL)
  (setq ALLCAMS (ssget "x" (list '(0 . "CAMERA"))))                               ;selecteer alle camera's in de tekening
  (if ALLCAMS                                                                     ;als er camera's gevonden zijn ga dan door
    (progn                                                                        ;er komt een serie opdrachten
      (setq CNT 0                                                                 ;maak een teller aan
            CAMLIST '())                                                          ;maak een lege lijst aan
      (while (< CNT (sslength ALLCAMS))                                           ;zolang de teller kleiner is dan het aantal geselecteerde camera's ga dan door
        (setq CAM (ssname ALLCAMS CNT))                                           ;selecteer de camera uit de lijst op basis van de teller
        (setq CAMNAME    (vlax-get-property (vlax-ename->vla-object CAM) 'name))     ;pak de naam van de geselecteerde camera
        (setq CAMLIST (append CAMLIST (list CAMNAME)))                            ;voeg de naam toe aan de lijst
        (setq CNT (1+ CNT))                                                       ;hoog de teller op met 1 waarna WHILE opnieuw begint
      );_while
      (setq CAMSEL (LM:listbox "Kies een camera" CAMLIST 2))                      ;start een selectiebox
      (if CAMSEL                                                                  ;is er een selectie gemaakt?
        (command "pselect" (ssname ALLCAMS (car CAMSEL)) "")                      ;zo ja: selecteer de camera in de tekening
      );_if
    );_progn
    (prompt "\nGeen camera's in de tekening gevonden.")                           ;indien in het begin geen camera's zijn gevonden geef dan een melding
  );_if
  (print)
);_defun
;; Listbox funtie Lee-mac
;; https://www.lee-mac.com/listbox.html
(defun LM:listbox ( msg lst bit / dch des tmp rtn )
    (cond
        (   (not
                (and
                    (setq tmp (vl-filename-mktemp nil nil ".dcl"))
                    (setq des (open tmp "w"))
                    (write-line
                        (strcat "listbox:dialog{label=\"" msg "\";spacer;:list_box{key=\"list\";multiple_select="
                            (if (= 1 (logand 1 bit)) "true" "false") ";width=50;height=15;}spacer;ok_cancel;}"
                        )
                        des
                    )
                    (not (close des))
                    (< 0 (setq dch (load_dialog tmp)))
                    (new_dialog "listbox" dch)
                )
            )
            (prompt "\nError Loading List Box Dialog.")
        )
        (   t    
            (start_list "list")
            (foreach itm lst (add_list itm))
            (end_list)
            (setq rtn (set_tile "list" "0"))
            (action_tile "list" "(setq rtn $value)")
            (setq rtn
                (if (= 1 (start_dialog))
                    (if (= 2 (logand 2 bit))
                        (read (strcat "(" rtn ")"))
                        (mapcar '(lambda ( x ) (nth x lst)) (read (strcat "(" rtn ")")))
                    )
                )
            )
        )
    )
    (if (< 0 dch)
        (unload_dialog dch)
    )
    (if (and tmp (setq tmp (findfile tmp)))
        (vl-file-delete tmp)
    )
    rtn
)

julien

OW!!
Dat ziet er veelbelovend uit, dank je!

julien

@Reimer
Bedankt!
Dit is echt héél handig!



Mag ik deze lisp op de downloads pagina aanbieden?