FastFiber

Xref-Path wijzigen met VLisp (opgelost)

Gestart door EddyBeerke, vr 11 06 2010, 16:21:54

Vorige topic - Volgende topic

EddyBeerke

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?
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

Joop

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 ()
_$
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

EddyBeerke

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)))...)?
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

HofCAD

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.
ACADcadabra

EddyBeerke

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
...
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

EddyBeerke

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) op de site gezet en daar heb ik nu nog wel wat aan gehad.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

yoin