Ik krijg een foutmelding:
Citeer; error: bad argument type: lentityp ((0 . "BLOCK") (2 . "X01-rev00_Drawing2")
(70 . 44) (4 . "") (10 0.0 0.0 0.0) (1 .
"U:\\Acad\\test\\xrefs\\X01-rev03_Drawing2.dwg") (-2 . <Entity name: 7eeb33a0>))
Het loop vast op deze code:
Waarbij de volgende waardes uit een vorig stuk code komt:
Xrefpath = "U:\\Acad\\test\\xrefs"
SIZ = "X01-rev03_Drawing2.dwg"
BLK = een Xref
(setq SIZ (strcat Xrefpath "\\" SIZ))
(setq tmp (findfile SIZ))
(setq BLK (subst (cons 1 SIZ)(assoc 1 BLK) BLK ))
(entmod BLK)
(entupd BLK)
Wie helpt mij opweg?
Voorzover mij bekend (na veel experimenteren) kun je op deze manier (via Auto Lisp) geen X-ref path wijzigen.
Je kunt wel proberen via Visual Lisp de Path property van de Xref te wijzigen (vla-put property).
Citeer_$ (C:HaveaDump)
; IAcadExternalReference: IAcadExternalReference Interface
; Property values:
; Application (RO) = #<VLA-OBJECT IAcadApplication 00d5f1d4>
; Document (RO) = #<VLA-OBJECT IAcadDocument 02b6d950>
; EffectiveName (RO) = "LP5102"
; Handle (RO) = "171"
; HasAttributes (RO) = 0
; HasExtensionDictionary (RO) = 0
; Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 1178957c>
; InsertionPoint = (0.0 0.0 0.0)
; InsUnits (RO) = "Unitless"
; InsUnitsFactor (RO) = 1.0
; IsDynamicBlock (RO) = 0
; Layer = "0"
; Linetype = "BYLAYER"
; LinetypeScale = 1.0
; Lineweight = -1
; Material = "ByLayer"
; Name = "LP5102"
; Normal = (0.0 0.0 1.0)
; ObjectID (RO) = 2128938376
; ObjectName (RO) = "AcDbBlockReference"
; OwnerID (RO) = 2128932032
; Path = "..\\..\\..\\..\\Basisbestanden\\hoensbroek\\02\\lp5102.dwg"; PlotStyleName = "ByLayer"
; Rotation = 0.0
; TrueColor = #<VLA-OBJECT IAcadAcCmColor 118303b8>
; Visible = -1
; XEffectiveScaleFactor = 1.0
; XScaleFactor = 1.0
; YEffectiveScaleFactor = 1.0
; YScaleFactor = 1.0
; ZEffectiveScaleFactor = 1.0
; ZScaleFactor = 1.0
; Methods supported:
; ArrayPolar (3)
; ArrayRectangular (6)
; ConvertToAnonymousBlock ()
; ConvertToStaticBlock (1)
; Copy ()
; Delete ()
; Explode ()
; GetAttributes ()
; GetBoundingBox (2)
; GetConstantAttributes ()
; GetDynamicBlockProperties ()
; GetExtensionDictionary ()
; GetXData (3)
; Highlight (1)
; IntersectWith (2)
; Mirror (2)
; Mirror3D (3)
; Move (2)
; ResetBlock ()
; Rotate (2)
; Rotate3D (3)
; ScaleEntity (2)
; SetXData (2)
; TransformBy (1)
; Update ()
_$
Citaat van: Joop op ma 14 06 2010, 08:18:31
Voorzover mij bekend (na veel experimenteren) kun je op deze manier (via Auto Lisp) geen X-ref path wijzigen.
Je kunt wel proberen via Visual Lisp de Path property van de Xref te wijzigen (vla-put property).
Joop bedankt voor je reactie.
Ik heb wel gezien in de Watch Window dat de waarde van (1 . "xrerfpath") veranderde na (endmod BLK).
Ik weet dat je met:
(setq ent (entsel))
(setq obj (vlax-ename->vla-object (car ent)))
(vlax-dump-object obj T)(princ)
Dat je dan een property lijst krijgt zoals in jou (C:HaveaDump)
Ik ben verder gaan werken met de code uit: http://www.cadsite.be/smf/index.php?topic=2647.msg13610#msg13610 van HofCad.
Als ik met visual lisp verder wil hoe doe ik dat dan met de (while (setq BLK (tblnext "block" (null BLK)))...)?
Citaat van: EddyBeerke op ma 14 06 2010, 11:26:54
Ik ben verder gaan werken met de code uit: http://www.cadsite.be/smf/index.php?topic=2647.msg13610#msg13610 van HofCad.
Als ik met visual lisp verder wil hoe doe ik dat dan met de (while (setq BLK (tblnext "block" (null BLK)))...)?
Beste Eddy,
Bedoel je
(setq BlkObj (vlax-ename->vla-object (tblobjname "block" (cdr (assoc 2 BLk))))
omdat dan BlkObj een Vla-Object bevat.
Met vriendelijke groet, HofCAD CSI.
Citaat van: HofCAD op do 17 06 2010, 15:38:41
Beste Eddy,
Bedoel je
(setq BlkObj (vlax-ename->vla-object (tblobjname "block" (cdr (assoc 2 BLk))))
omdat dan BlkObj een Vla-Object bevat.
Met vriendelijke groet, HofCAD CSI.
Ik denk dat ik dat bedoel.
Maar ik ben zelf ook nog wat gaan zoeken.:
(vlax-for b (vla-get-blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
(if (= (vla-get-isxref b) :vlax-true)
(progn
(setq xpath (vla-get-path b)
xnaam (vl-filename-base xpath)
xblk (tblsearch "block" (vla-get-name b))
Num70 (cdr(assoc 70 xblk))
xgeladen (if (= (logand 32 Num70) 32) "Ja" "Nee")
);end setq
...
Ik ben inmiddels al een stuk verder gekomen met alle berichten met code's die hier op de site staan.
Ik ga ze niet noemen want ik weet ze niet meer, maar een grote hulp hierbij is de kennis die een aantal leden hebben en graag willen delen.
Vooral Joop wil ik noemen, hij heeft hier een paar lessen (http://www.cadsite.be/lisp/lisp.php (http://www.cadsite.be/lisp/lisp.php)) op de site gezet en daar heb ik nu nog wel wat aan gehad.