FastFiber

Recente berichten

#1
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Jacob - wo 28 05 2025, 07:01:04
Beste Reimer,

Inderdaad lukt dit wel en alle dynamische functies blijven behouden.  :ole:
De verschillende commando's in de code had ik niet scherp.

Op een gegeven moment is het meer de sport om het voor elkaar te krijgen....

Bedankt voor je hulp.
#2
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Reimer - ma 26 05 2025, 17:44:07
Hallo Jacob,

Wanneer je mijn lisproutine geladen hebt dan kun je in Autocad het commando Copyb gebruiken. Deze kun je ook in de toolpallet gebruiken met "^C^CCopyb".
Kun je aangeven of dit wel werkt?
#3
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Jacob - do 22 05 2025, 16:39:00
Dag Reimer en Eddy,

Bedankt voor jullie input.
Ik heb jullie uitleg 3 keer doorggelezen, maar krijg het neit voor elkaar om de lisp te starten.

Het bestand heet "CopyBlockDefinition.lsp", deze wordt automatisch geladen met "acaddoc.lsp"
Via de toolpallet wil ik de lisproutine uitvoeren.
Normaal start ik met "^C^CCopyBlockDefinition"
Na de uitleg  heb ik het geprobeerd met "^C^CLMCopyBlockDefinition" en met "^C^CLM:CopyBlockDefinition"
Maar ik blijf de melding houden dat hij het commando niet kent.

Wellicht lees ik het niet goed of zie wat over het hoofd.
Hoor graag.
#4
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door EddyBeerke - do 22 05 2025, 09:15:52
Misschien hoort deze uitleg in het les-gedeelte thuis...
Even uitgelegd zo als ik het snap:
(defun C:LINE ( / )
...
)
defun = definieer functie

C: = de waar het in te gebruiken is. Als er dus 'LM:' staat dan is het in een soort geheugen-ruimte  met de naam 'LM'
  Het bijzondere is dat geheugen-ruimte 'C:' direct uitvoerbaar is door de naam (bv LINE) te typen, het is dus de commandoregel.
  (LET OP!: je mag hier geen variabelen vóór de '/' zetten)
LINE = is (in dit geval) de naam van de routine

( / ) = de ruimte voor de variabelen, alles na de '/' zijn 'locale' variabelen die na het uitvoeren van een routine uit het geheugen zijn verdwenen.
  Alle variabelen vóór de '/' mag je alleen gebruiken als je een functie definieert.
 
Citaat van: Reimer op ma 19 05 2025, 13:04:33...
Wat Lee Mac doet is niets anders dan "LM:" toevoegen als onderdeel van de naam van zijn commando's.
...

Met 'LM:' creëert Lee Mac dus een ruimte waarmee hij dus geen andere functies kan 'overrullen'
Het is dus toegestaan om zoiets te maken (gebruik commando 'FOO'):

(defun AB:subroutine ( / )
  (alert "Dit is een subroutine")
  (princ)
)
(defun XY:subroutine (a / )
  (alert (strcat "Dit is een " a " subroutine")
  (princ)
)
Je kunt dit dan zo gebruiken:
(defun C:foo ( / )
  ; roep de subroutines aan
  (AB:subroutine)
  (XY:subroutine "andere")

  (princ) ; nette afsluiting van je routine
)


     
#5
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Reimer - ma 19 05 2025, 13:04:33
Hallo Jacob,

Ik snap de verwarring. Het klopt dat "defun c:commando" de naam van het commando bepaald. Je kunt echter ook "defun commando2" gebruiken voor het maken van sub-commando's. Deze kun je dan binnen een andere routine weer aanroepen. Je kunt deze trouwens ook in Autocad gebruiken door (commando2) inclusief de haakjes in te voeren. Je moet er echter wel op letten dat er dan vaak parameters bij horen die je dan ook moet opgeven (commando2 parm1 parm2 etc.).
Wat Lee Mac doet is niets anders dan "LM:" toevoegen als onderdeel van de naam van zijn commando's. Het heeft niets met de programmacode te maken.

Ik heb nu dus een programma gemaakt dat heet CopyB. Deze maakt gebruik van de sub-functies van Lee Mac.
"LM:CopyBlockDefinition" vraagt om een bestaande blocknaam (blk) en nieuwe blocknaam (new)
"LM:al-effectivename" gebruik ik om de werkelijke blocknaam van een dynamic block (ent) op te vragen.

Groeten,
Reimer
#6
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Jacob - ma 19 05 2025, 07:45:28
Reimer,

Mooi dat het is gelukt, maar bij mij geeft hij aan dat hij het commando niet kent.
Ik begin te vermoeden waar het door komt.

Bij de meeste lisproutines is de opbouw: "defun c:commando"
Nu is de "C" vervangen voor "LM".
Bij andere lisproutines van Lee Mac waarin ook "LM" wordt gebruikt kreeg ik ook niet aan de gang.

Nu is de vraag; moet ik lisproutines met "LM" anders gebruiken/benaderen?
#7
Autolisp / Re: Dynamic blocks kopiëren
Laatste bericht door Reimer - do 15 05 2025, 20:43:06
Ik moest ook even puzzelen maar ben er denk ik uit. Lee Mac schrijft bij de uitleg dat zijn functie werkt wanneer je het volgende ingeeft: (LM:CopyBlockDefinition "OldBlock" "NewBlock")
Ik wil liever een bestaand block selecteren dan een naar intypen. Het opvragen van de naam van een dynamic block is net wat lastiger dan van een gewoon block. Gelukkig heeft Lee Mac daar al een functie voor geschreven.
Ik heb zijn functies bij elkaar gezet en zelf een stukje code bijgeschreven. Als het goed is werkt het onderstaande wanneer je Copyb start. Bij mij werkt het!

;; Copy Block Definition  -  Lee Mac
;; Duplicates a block definition, with the copied definition assigned the name provided.
;; blk - [str] name of block definition to be duplicated
;; new - [str] name to be assigned to copied block definition
;; Returns the copied VLA Block Definition Object, else nil
(defun LM:CopyBlockDefinition ( blk new / abc app dbc dbx def doc rtn vrs )
    (setq dbx
        (vl-catch-all-apply 'vla-getinterfaceobject
            (list (setq app (vlax-get-acad-object))
                (if (< (setq vrs (atoi (getvar 'acadver))) 16)
                    "objectdbx.axdbdocument" (strcat "objectdbx.axdbdocument." (itoa vrs))
                )
            )
        )
    )
    (cond
        (  (or (null dbx) (vl-catch-all-error-p dbx))
            (prompt "\nUnable to interface with ObjectDBX.")
        )
        (  (and
                (setq doc (vla-get-activedocument app)
                      abc (vla-get-blocks doc)
                      dbc (vla-get-blocks dbx)
                      def (LM:getitem abc blk)
                )
                (not (LM:getitem abc new))
            )
            (vlax-invoke doc 'copyobjects (list def) dbc)
            (vla-put-name (setq def (LM:getitem dbc  blk)) new)
            (vlax-invoke dbx 'copyobjects (list def) abc)
            (setq rtn (LM:getitem abc new))
        )
    )
    (if (= 'vla-object (type dbx))
        (vlax-release-object dbx)
    )
    rtn
)

;; VLA-Collection: Get Item  -  Lee Mac
;; Retrieves the item with index 'idx' if present in the supplied collection
;; col - [vla]    VLA Collection Object
;; idx - [str/int] Index of the item to be retrieved
(defun LM:getitem ( col idx / obj )
    (if (not (vl-catch-all-error-p (setq obj (vl-catch-all-apply 'vla-item (list col idx)))))
        obj
    )
)

;; Effective Block Name  -  Lee Mac
;; ent - [ent] Block Reference entity
(defun LM:al-effectivename ( ent / blk rep )
    (if (wcmatch (setq blk (cdr (assoc 2 (entget ent)))) "`**")
        (if
            (and
                (setq rep
                    (cdadr
                        (assoc -3
                            (entget
                                (cdr
                                    (assoc 330
                                        (entget
                                            (tblobjname "block" blk)
                                        )
                                    )
                                )
                              '("AcDbBlockRepBTag")
                            )
                        )
                    )
                )
                (setq rep (handent (cdr (assoc 1005 rep))))
            )
            (setq blk (cdr (assoc 2 (entget rep))))
        )
    )
    blk
)

;; Functie door Reimer om de routine van Lee Mac te laten werken.
;;
(defun c:CopyB ( / OLDBLOCK OLDNAME NEWNAME)
  (prompt "\nSelecteer een blok om te kopiëren: ")
  (setq OLDBLOCK (car (entsel)))
  (if (and OLDBLOCK (= (cdr (assoc 0 (entget OLDBLOCK))) "INSERT"))
    (progn
      (setq OLDNAME (LM:al-effectivename OLDBLOCK))
      (setq NEWNAME (strcat OLDNAME "_1"))
      (while (tblsearch "BLOCK" NEWNAME)
        (setq NEWNAME (strcat NEWNAME "_1"))
      )
      (LM:CopyBlockDefinition OLDNAME NEWNAME)
      (princ (strcat "\nBlock '" OLDNAME "' gekopieerd als '" NEWNAME "'."))
    )
    (if (not OLDBLOCK)
      (prompt " Geen object geselecteerd.")
      (prompt " Selectie is geen block.")
    )
  );_if
  (print)
)
#8
AutoCAD probleem / Re: 2026 - Base from model wer...
Laatste bericht door julien - di 13 05 2025, 11:53:35
Het gaat over een educational versie.
Installeren kan ik niet zelf, alles is daar behoorlijk dicht getimmerd.
#9
AutoCAD probleem / Re: 2026 - Base from model wer...
Laatste bericht door jo-king - di 13 05 2025, 10:17:18
even in je manage.autodesk.com portaal de inventor extension downloaden en op een usb-stickje zetten... :vreegoe:

ik stel me wel even de vraag, hoe die autodesk software dan de genuine check doet?
normaal moet je toch minstens 1 keer per maand eventjes online gaan om de licentie te checken?

#10
AutoCAD probleem / Re: 2026 - Base from model wer...
Laatste bericht door julien - ma 12 05 2025, 16:26:28
Dat zal het zijn denk ik, bedankt!!
Nu hopen dat de verantwoordelijke dit snel in orde kan brengen.

Dit kan niet automatisch geïnstalleerd worden omdat er op die locatie geen internet is. (jaja, er bestaan nog zo'n locaties  :mrgreen: )
yoin