Beste cadkenners,
om al mijn xref's in één keer te herladen gebruik ik het volgende acad commando in een lispje:
(defun C:XRR ()
(command "-xref" "r" "*")
(prompt " alle xrefs worden HERladen")
(princ)
)
Dit werkt heel makkelijk. Nu wil ik dit ook doen voor het binden van mijn xref's.
(defun C:XRB ()
(command "-xref" "bind" "*")
(princ)
)
Helaas kan acad vaak mijn xref's niet tegelijk binden. Één voor één gaat wel goed. Kan iemand mij een voorbeeld geven hoe ik bijvoorbeeld eerst de namen van alle xref's kan opvragen en vervolgens stuk voor stuk deze xref's kan binden?
Groeten,
Reimer
ik begrijp niet helemaal je vraag maar dit is een lisp om: repeats the selection of xrefs for import into the current drawing at a registration point.
(defun c:mxrefi (/ dir pt typ scl ang file lista)
(setq dir (getstring T "X-Ref's Location<Current Folder>: "))
(setq pt (getpoint "\nSelect or Type Insertion Point<0,0>: "))
(if (= pt nil)(setq pt "0,0"))
(initget 1 "Overlay Attach")
(setq typ (getkword "Overlay or Attach <O or A>: "))
(setq scl (getreal "\nScale <1>: "))
(if (= scl nil)(setq scl 1))
(setq ang (getreal "\nRotation Angle<0>: "))
(if (= ang nil)(setq ang 0))
(setq file (getfiled "X-Ref's to attach" dir "dwg" 0))
(command"xref" typ file pt scl scl ang)
(setq lista (list file))
(while
(setq file (getfiled "X-Ref's to attach" dir "dwg" 0))
(setq lista (append (list file) lista))
(command"xref" typ file pt scl scl ang)
)
(princ)
)
Ik probeer een oud probleem opnieuw uit te zoeken. Onderstaande vraag heb ik net ook op AutocadExchange geplaatst.
Ik heb een eenvoudige lisp zelf gemaakt om alle xrefs in een tekening in één keer met BIND in de tekening vast te zetten.
(defun c:xrb ()
(command "-xref" "bind" "*")
)
Dit werkt theoretisch wel maar practisch niet. Ik merk dat autocad problemen krijgt wanneer er te veel xref's in één keer gebind worden. Wanneer ik ze dan stuk voor stuk bind gaat het wel altijd goed.
Nu is mijn vraag:
kan ik in mijn lisp eerst een lijst laten maken met daarin alle xref namen? Met zo'n lijst kun je volgens mij de xref's één voor één binden. Kan iemand mij met dit probleem helpen? (S.v.p. met een duidelijke uitleg. Ik weet nog niet hoe ik in een lisp de opdracht kan laten herhalen voor elke afzonderlijke naam.)
(defun c:xrb ()
maak eerst een lijst met xrefnamen en herhaal dan het volgende:
(command "-xref" "bind" "naam1")
(command "-xref" "bind" "naam2")
(etc.)
)
Groeten,
Reimer
Citaat van: Reimer op wo 26 09 2007, 09:07:55
Ik probeer een oud probleem opnieuw uit te zoeken. Onderstaande vraag heb ik net ook op AutocadExchange geplaatst.
Ik heb een eenvoudige lisp zelf gemaakt om alle xrefs in een tekening in één keer met BIND in de tekening vast te zetten.
(defun c:xrb ()
(command "-xref" "bind" "*")
)
Dit werkt theoretisch wel maar practisch niet. Ik merk dat autocad problemen krijgt wanneer er te veel xref's in één keer gebind worden. Wanneer ik ze dan stuk voor stuk bind gaat het wel altijd goed.
Nu is mijn vraag:
kan ik in mijn lisp eerst een lijst laten maken met daarin alle xref namen? Met zo'n lijst kun je volgens mij de xref's één voor één binden. Kan iemand mij met dit probleem helpen? (S.v.p. met een duidelijke uitleg. Ik weet nog niet hoe ik in een lisp de opdracht kan laten herhalen voor elke afzonderlijke naam.)
(defun c:xrb ()
maak eerst een lijst met xrefnamen en herhaal dan het volgende:
(command "-xref" "bind" "naam1")
(command "-xref" "bind" "naam2")
(etc.)
)
Groeten,Reimer
Beste Reimer,
Volgens mij zoek je zoiets als onderstaand,
en wat je zelf nog wel moet uit testen.
Let hierbij op de AutoCAD systeemvariabele Bindtype.
Met vriendelijke groet,
HofCAD CSI
PS Als Joop op deze site nog aanwezig was, kon hij ons nog adviseren.
(defun c:BindSel ()
(if (/= (setq ss1 (ssget '((0 . "INSERT")))) nil)
(progn
(setq i 0)
(setq bsl nil)
(setq bnl nil)
(repeat (sslength ss1)
(setq e1 (ssname ss1 i))
(setq bn (cdr (assoc 2 (entget e1))))
(setq bl (tblsearch "block" bn))
(setq bt (cdr (assoc 70 bl)))
(if (and (= (logand bt 4) 4) (not (member bn bnl)))
(setq bnl (cons bn bnl))
)
(setq i (1+ i))
)
)
)
(setq i 0)
(repeat (length bnl)
(command "-xref" "bind" (nth i bnl))
(setq i (1+ i))
)
)
(defun c:BindAll ()
(if (/= (setq ss1 (ssget "X" '((0 . "INSERT")))) nil)
(progn
(setq i 0)
(setq bsl nil)
(setq bnl nil)
(repeat (sslength ss1)
(setq e1 (ssname ss1 i))
(setq bn (cdr (assoc 2 (entget e1))))
(setq bl (tblsearch "block" bn))
(setq bt (cdr (assoc 70 bl)))
(if (and (= (logand bt 4) 4) (not (member bn bnl)))
(setq bnl (cons bn bnl))
)
(setq i (1+ i))
)
)
)
(setq i 0)
(repeat (length bnl)
(command "-xref" "bind" (nth i bnl))
(setq i (1+ i))
)
)
PS Let op de AutoCAD systeemvariabele Bindtype
BINDTYPE System Variable
Type: Integer
Saved in: Not-saved
Initial value: 0
Controls how xref names are handled when binding xrefs or editing xrefs in place.
0 Traditional binding behavior ("xref1|one" becomes "xref$0$one")
1 Insert-like behavior ("xref1|one" becomes "one")
In de Lisproutines zou men bijv. kunnen zetten (setvar "BINDTYPE" 0) of (setvar "BINDTYPE" 1)
of bijv.
(initget "0 1")
(setq btype (getkword "Bindtype[0/1]<0>"))
(if (= btype "1") (setvar "BINDTYPE" 1)
(setvar "BINDTYPE" 0))
Beste Reimer,
Je zou de bovenstaande programma's bijv. als
onderstaand kunnen vervangen.
(defun C:XRB ( / ss1 btype)
(princ "\nDoor XRB worden geselecteerde Xref's gebonden.")
(initget "All Select")
(setq stype (getkword "\nMaak de keuze voor de selectie van de Xref's [All/Select] <A>:"))
(if (= Stype "Select") (setq ss1 (ssget '((0 . "INSERT"))))
(setq ss1 (ssget "X" '((0 . "INSERT")))))
(initget "B I")
(setq btype (getkword "\nBindtype in R15+ [Bind/Insert] <B>:"))
($XRB ss1 btype )
)
(defun $XRB (ss1 btype / ~CMD ~BTP i bsl bnl e1 bn bl bt)
(setq ~CMD (getvar "CMDECHO") ~BTP (getvar "BINDTYPE"))
(setvar "CMDECHO" 0)
(if (> (atoi (substr (getvar "ACADVER") 1 2)) 14)
(if (= btype "I") (setvar "BINDTYPE" 1)
(setvar "BINDTYPE" 0)))
(if (/= ss1 nil)
(progn
(setq i 0)
(setq bsl nil)
(setq bnl nil)
(repeat (sslength ss1)
(setq e1 (ssname ss1 i))
(setq bn (cdr (assoc 2 (entget e1))))
(setq bl (tblsearch "BLOCK" bn))
(setq bt (cdr (assoc 70 bl)))
(if (and (= (logand bt 4) 4) (not (member bn bnl)))
(setq bnl (cons bn bnl))
)
(setq i (1+ i))
)
)
)
(setq i 0)
(repeat (length bnl)
(command "-XREF" "B" (nth i bnl))
(setq i (1+ i))
)
(setvar "CMDECHO" ~CMD) (setvar "BINDTYPE" ~BTP)
(terpri)
)
Opstarten met XRB of met (c:XRB) met keuzevragen
of met ($XRB (ssget '((0 . "INSERT"))) "B") met select en Bind
of met ($XRB (ssget '((0 . "INSERT"))) "I") met select en Insert
of met ($XRB (ssget "X" '((0 . "INSERT"))) "B") met select All en Bind
of met ($XRB (ssget "X" '((0 . "INSERT"))) "I") met select All en Insert
Met vriendelijke groet,
HofCAD CSI
Geweldig! :vreegoe: Hier ben ik heel blij mee. :D Ik heb nog niet uitgezocht wat deze routine allemaal doet, maar hij werkt perfect.
Heel erg bedankt hiervoor. :pintje:
Reimer