CADsite forum

AutoCAD => Autolisp => Topic gestart door: EddyBeerke op vr 11 06 2010, 16:21:54

Titel: Xref-Path wijzigen met VLisp (opgelost)
Bericht door: EddyBeerke op vr 11 06 2010, 16:21:54
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?
Titel: Re:Xref-Path wijzigen met VLisp
Bericht door: 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).
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 ()
_$
Titel: Re:Xref-Path wijzigen met VLisp
Bericht door: EddyBeerke op ma 14 06 2010, 11:26:54
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)))...)?
Titel: Re:Xref-Path wijzigen met VLisp
Bericht door: HofCAD op do 17 06 2010, 15:38:41
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.
Titel: Re:Xref-Path wijzigen met VLisp
Bericht door: EddyBeerke op vr 18 06 2010, 08:22:59
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
...
Titel: Re:Xref-Path wijzigen met VLisp (opgelost)
Bericht door: EddyBeerke op do 24 06 2010, 14:44:59
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.