yoin

Reimer

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



silverster

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)
)

Reimer

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

HofCAD

#3
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))
ACADcadabra

HofCAD

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
ACADcadabra

Reimer

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