Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Dynamische Parameter in Blockdefinitionen ändern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Dynamische Parameter in Blockdefinitionen ändern (2247 mal gelesen)
Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 02. Jul. 2013 14:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo zusammen,
mit vla-getdynamicblockproperties komm ich ja an die "dynamischen Einstellungen" eines Inserts ran.

Aber wie komm ich an die "Originale", also die Parameter in der Blockdefinition.

Ich hab hier viiiiiele Blockdefinitionen deren Skalierung ich anpassen muss.
Die Objekte in den Blockdefinitionen bekomme ich wenn ich die Definition durchlaufe, aber alles was dynamisch ist bekomm ich damit nicht.
Weis jemand wo das versteckt ist ?

Oder gibt's eine andere Möglichkeit Blockdefinitionen zu skalieren ?
Und ich befürchte dass ich auch noch den Basispunkt anpassen darf, also Blockdefinition schieben kommt sicher auch noch.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 03. Jul. 2013 11:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

hier lies sich nix finden?

------------------
Gruss Dirk

http://cadplayerlounge.blogspot.se

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 03. Jul. 2013 12:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nö,
da geht's ja darum die dynamischen Parameter eines Inserts zu ändern.

Ich möchte (muss) die Parameter und Aktionen in der Blockdefinition ändern.
Ein vlax-dump-object mit so einem Parameter hat mir auch nix gebracht.
Da steht zwar alles drin was ich so zum Ändern brauche, aber ohne Anklicken find ich die Parameter immer noch nicht.

Die Frage ist : wo sind die versteckt ?

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 03. Jul. 2013 12:50    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Du kannst AutoCADbefehle im Blockeditor nutzen(command), aber ob du mit den 2-3 Funktionen glücklich wirst ? Wohl kaum.

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

wronzky
Ehrenmitglied V.I.P. h.c.
CAD-Dienstleistungen für Architekten



Sehen Sie sich das Profil von wronzky an!   Senden Sie eine Private Message an wronzky  Schreiben Sie einen Gästebucheintrag für wronzky

Beiträge: 2154
Registriert: 02.05.2005

CAD:
AutoCAD 2.6 bis 2014
ADT 2005 - 2014
Arcibem
System:
Windows 2000, XP, NO VISTA
Internet-Startseite:
http://www.archi.de

erstellt am: 03. Jul. 2013 16:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

nach meiner kurzen Recherche sind die Parameter in einem Dictionary unter dem Namen "ACAD_ENHANCEDBLOCK" abgelegt. Schau mal HIER oder HIER.

Grüsse, Henning

------------------
Henning Jesse
VoxelManufaktur
Computer-Dienstleistungen für Architekten und Ingenieure

  http://www.voxelman.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 03. Jul. 2013 16:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

Der erste Treffer passt, 10U´s4U    danke

------------------
Link: User:FAQ (einiges Wissenswertes über AutoCAD)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 04. Jul. 2013 08:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hm...
irgendwie passt das noch nicht. 

Wenn ich mir die Daten von vlax-dump-object anschaue bekomme ich bei einem Parameter zB. das hier:

; IAcadBlockLinearParameterEntity: IAcadBlockLinearParameterEntity-Schnittstelle
; Eigenschaftswerte:
;  Angle (RO) = 0.0
;  Application (RO) = #<VLA-OBJECT IAcadApplication 00000001401f8ca0>
;  BaseLocation = 1
;  BasePoint = (-5.0 5.0 0.0)
;  ChainActions = 0
;  Distance = 10.0
;  DistanceDesc = "41"
;  DistName = "Länge"
;  Document (RO) = #<VLA-OBJECT IAcadDocument 00000000029c45f0>
;  EndPoint = (5.0 5.0 0.0)
;  Grips = 1
;  Handle (RO) = "D22"
;  HasExtensionDictionary (RO) = 0
;  Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000031dee028>
;  LabelDist = 1.0
;  Layer = "0"
;  Linetype = "ByLayer"
;  LinetypeScale = 1.0
;  Lineweight = -1
;  Material = "ByLayer"
;  Name = "x"
;  ObjectID (RO) = 97
;  ObjectID32 (RO) = 97
;  ObjectName (RO) = "AcDbBlockLinearParameterEntity"
;  OwnerID (RO) = 46
;  OwnerID32 (RO) = 46
;  PlotStyleName = "ByLayer"
;  ShowProperties = -1
;  TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000031dee440>
;  ValueSetIncrement = Ausnahmefehler aufgetreten
;  ValueSetList = Ausnahmefehler aufgetreten
;  ValueSetMax = 0.0
;  ValueSetMin = 0.0
;  ValueSetType = 0
;  Visible = -1
; Unterstützte Methoden:
;  ArrayPolar (3)
;  ArrayRectangular (6)
;  Copy ()
;  Delete ()
;  GetBoundingBox (2)
;  GetExtensionDictionary ()
;  GetXData (3)
;  Highlight (1)
;  IntersectWith (2)
;  Mirror (2)
;  Mirror3D (3)
;  Move (2)
;  Rotate (2)
;  Rotate3D (3)
;  ScaleEntity (2)
;  SetXData (2)
;  TransformBy (1)
;  Update ()

und bei einer Aktion zB. das:


; IAcadBlockStretchActionEntity: IAcadBlockStretchActionEntity-Schnittstelle
; Eigenschaftswerte:
;  ActionType (RO) = "Strecken"
;  AngleOffset = 0.0
;  Application (RO) = #<VLA-OBJECT IAcadApplication 00000001401f8ca0>
;  Coordinate = ...Indizierter Inhalt wird nicht angezeigt...
;  Coordinates = (7.34353 8.05502 -7.27577 0.547865)
;  DistanceMultiplier = 1.0
;  DistanceType = 0
;  Document (RO) = #<VLA-OBJECT IAcadDocument 00000000029c45f0>
;  Handle (RO) = "D2C"
;  HasExtensionDictionary (RO) = 0
;  Hyperlinks (RO) = #<VLA-OBJECT IAcadHyperlinks 0000000031de8208>
;  Layer = "0"
;  Linetype = "ByLayer"
;  LinetypeScale = 1.0
;  Lineweight = -1
;  Material = "ByLayer"
;  Name = "Strecken2"
;  ObjectID (RO) = 98
;  ObjectID32 (RO) = 98
;  ObjectName (RO) = "AcDbBlockStretchActionEntity"
;  OwnerID (RO) = 46
;  OwnerID32 (RO) = 46
;  PlotStyleName = "ByLayer"
;  Position = (-11.7458 5.05216 0.0)
;  TrueColor = #<VLA-OBJECT IAcadAcCmColor 0000000031dedf60>
;  Visible = -1
; Unterstützte Methoden:
;  ArrayPolar (3)
;  ArrayRectangular (6)
;  Copy ()
;  Delete ()
;  GetBoundingBox (2)
;  GetExtensionDictionary ()
;  GetXData (3)
;  Highlight (1)
;  IntersectWith (2)
;  Mirror (2)
;  Mirror3D (3)
;  Move (2)
;  Rotate (2)
;  Rotate3D (3)
;  ScaleEntity (2)
;  SelectionSet ()
;  SetSelectionSet (1)
;  SetXData (2)
;  TransformBy (1)
;  Update ()

Da lässt sich was damit anfangen.
Aber über "ACAD_ENHANCEDBLOCK" und auslesen der Objekte bekomme ich nur sowas:

; IAcadObject: Die Vorgabe-Schnittstelle für ein AutoCAD-Basisobjekt
; Eigenschaftswerte:
;  Application (RO) = #<VLA-OBJECT IAcadApplication 00000001401f8ca0>
;  Document (RO) = #<VLA-OBJECT IAcadDocument 00000000029c45f0>
;  Handle (RO) = "C22"
;  HasExtensionDictionary (RO) = 0
;  ObjectID (RO) = 54
;  ObjectID32 (RO) = 54
;  ObjectName (RO) = "AcDbBlockLinearParameter"
;  OwnerID (RO) = 96
;  OwnerID32 (RO) = 96
; Unterstützte Methoden:
;  Delete ()
;  GetExtensionDictionary ()
;  GetXData (3)
;  SetXData (2)


Das sieht anders aus.
Da ist doch nix was man ändern kann, keine Koordinaten usw. und das sind auch ganz andere Objekte.

Raff ichs nicht oder was ?
Oder muss ich irgendwie über die ObjectIDs weiter ?

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADwiesel
Moderator
CAD4FM UG




Sehen Sie sich das Profil von CADwiesel an!   Senden Sie eine Private Message an CADwiesel  Schreiben Sie einen Gästebucheintrag für CADwiesel

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 04. Jul. 2013 08:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Andreas Kraus 10 Unities + Antwort hilfreich

hast du dir mal das Beispiel von LeeMac angesehen, wo er das Dict ausliest?
Das dürfte doch das sein, was du suchst?

------------------
Gruß
CADwiesel
Besucht uns im CHAT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 04. Jul. 2013 09:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Nö,
die Beispiele lesen die Parameter von Inserts aus, die brauch ich ja nicht.

Ich hab mir jetzt überlegt ob ich vielleicht über den Blockeditor und (ssget "x") auf alle Objekte in einer Definition zugreife und dann die Änderungen mache (mit "command" und so). Dauert zwar etwas länger, aber immer noch besser als zu Fuß.

Mit (ssget "x") bekomm ich nämlich alle Objekte in der Definition (habs getestet) ich muss das nur noch funktionierend zusammenschrauben.
Dauert aber noch, jetzt hab ich erst was anderes zu tun.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 04. Jul. 2013 13:28    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

So, jetzt hab ichs   
Mit diesem kleinen Codeschnipsel bekomme ich eine Liste mit ALLEN Objekten in den Blockdefinitionen (auch Parameter und Aktionen)

Muss ich dann nur noch abarbeiten.

Code:

(defun k_satz->entlist (satz)
  (if (= (type satz) 'PICKSET)
    (vl-remove-if-not
      '(lambda (dummy) (= (type dummy) 'ENAME))
      (mapcar 'cadr (ssnamex satz))
    )
  )
)
(defun get_blkhandles (blocknamen_list / obj_list)
  (foreach blk blocknamen_list
    (command "-bedit" blk)
    (setq
      obj_list
       (cons (list blk
   (mapcar 'vla-get-handle
   (mapcar 'vlax-ename->vla-object
   (k_satz->entlist (ssget "x"))
   )
   )
     )
     obj_list
       )
    )
    (command "_u")
  )
  obj_list
)


blocknamen_list enthält eine Liste der Blocknamen als Zeichenketten. Alles was im Blockeditor nicht zu bearbeiten geht bitte rausfiltern, also unbenannte, Layouts, usw., sonst Fehlermeldung.

Wenn ichs fertig hab stell ichs hier rein.
Wird wahrscheinlich erst Montag.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

[Diese Nachricht wurde von Andreas Kraus am 04. Jul. 2013 editiert.]

[Diese Nachricht wurde von Andreas Kraus am 04. Jul. 2013 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Andreas Kraus
Mitglied
Elektrotechniker


Sehen Sie sich das Profil von Andreas Kraus an!   Senden Sie eine Private Message an Andreas Kraus  Schreiben Sie einen Gästebucheintrag für Andreas Kraus

Beiträge: 1356
Registriert: 11.01.2006

WIN 10
ACAD 2022

erstellt am: 08. Jul. 2013 08:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Ich bin ein Wenig weiter gekommen.

Es nutzt nix die Handles zu ermitteln und später abzuarbeiten, weil die Parametzer und Aktionen nach Schließen des Blockeditors nicht mehr da sind. Die werden wohl nur zur Laufzeit des Blockeditors erzeugt aber ganz woanders hergeholt. 

Auch egal.
Dann muss man eben die Objekte direkt im Blockeditor bearbeiten. 

Ich hab mal was angefangen, bin aber noch nicht sehr weit gekommen (das Wetter was so schön, da setz ich mich doch nicht vor den Rechner  ) aber mal so als Anfang wie ich mir das gedacht hab.

Code:
(defun k_satz->entlist (satz)
  (if (= (type satz) 'PICKSET)
    (vl-remove-if-not
      '(lambda (dummy) (= (type dummy) 'ENAME))
      (mapcar 'cadr (ssnamex satz))
    )
  )
)

(defun k_liste->variant (liste typ)
;;;  erstellt aus einer Koordinatenliste einen Variant
  (vlax-make-variant
    (vlax-safearray-fill
      (vlax-make-safearray
5
(cons 0 (1- (length liste)))
      )
      liste
    )
    typ
  )
)

(defun work_blkscale (blocknamen_list)
    (foreach blk blocknamen_list
      (command "-bedit" blk)
      (foreach obj_name (mapcar 'vlax-ename->vla-object
(k_satz->entlist (ssget "x"))
)
(cond
  ((= (vla-get-ObjectName obj_name)
      "AcDbBlockLinearParameterEntity"
  )
  (vla-put-BasePoint
    obj_name
    (k_liste->variant
      (mapcar '*
      (VLAX-SAFEARRAY->LIST
(variant-value (vla-get-BasePoint obj_name))
      )
      (list faktor faktor faktor)
      )
      8197
    )
  )
  (vla-put-EndPoint
    obj_name
    (k_liste->variant
      (mapcar '*
      (VLAX-SAFEARRAY->LIST
(variant-value (vla-get-EndPoint obj_name))
      )
      (list faktor faktor faktor)
      )
      8197
    )
  )
  (vlax-put-property
    obj_name
    'LabelDist
    (* (vlax-get-property obj_name 'LabelDist) faktor)
  )
  (vlax-put-property
    obj_name
    'ValueSetMax
    (* (vlax-get-property obj_name 'ValueSetMax) faktor)
  )
  (vlax-put-property
    obj_name
    'ValueSetMin
    (* (vlax-get-property obj_name 'ValueSetMin) faktor)
  )
  )
  (t
  (print (vla-get-ObjectName obj_name))
  (if (vlax-method-applicable-p obj_name 'ScaleEntity)
    (progn
      (vla-ScaleEntity
obj_name
(vlax-3d-point '(0 0 0))
faktor
      )
    )
  )
  )
)
      )
      (command "_bclose" "")
    )
    obj_list
  )


Nach dem cond müssen noch alle möglichen Parameter und Aktionen eingefügt und abgearbeitet werden und ein Error-Handler ist auch noch nicht drin.
Ich hab erst mal einen Linearen Parameter soweit fertig. Funktioniert auch.
Alles weitere kommt nach und nach.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz