Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Xdata GC 1011 und VLA-setXdata

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:  Xdata GC 1011 und VLA-setXdata (1256 mal gelesen)
reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 10:29    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 liebe Lispler,

Ich hätte da eine frage bezüglich Xdata's und deren "besonderen" GC 1011,1012,1013 usw.
Diese werden ja nicht als dottedPairs gespeichert sondern als Listen.

Folgendes ist zB. vorhanden [Var = XData]:

Code:

((1001 . "hallo") (1000 . "ich bin Xdata") (1002 . "{") (1070 . 1) (1070 . 2) (1070
. 3) (1070 . 4) (1000 . "mit einem String") (1011 2.0 3.5 4.3) (1000 . "und noch
einen") (1002 . "}"))

und soll mittels folgenden Code an ein Objekt geheftet werden:
Code:

(foreach DataItem (reverse XData)
  (setq Data (cons (cdr DataItem) Data))
  (setq DataType (cons (car DataItem) DataType))
)

(vlax-invoke-method
   obj
   'SetXdata
   (vlax-make-variant
      (vlax-safearray-fill
         (vlax-make-safearray vlax-vbInteger
            (cons 0 (- (length DataType) 1))
          )
         (cons (car DataType) (cdr DataType))
       )
    )
    (vlax-make-variant
       (vlax-safearray-fill
          (vlax-make-safearray vlax-vbVariant
             (cons 0 (- (length data) 1))
           )
           (cons (car data) (cdr data))
        )
    )
)

Conclusio: funktioniert nicht -> "vlax-safearray-fill failed.  Invalid initialization list. #<safearray...>

Wo liegt denn der Fehler? Also, auftreten tut er nur wegen GC 1011 und dessen "UN-dotted"-Charakter, ansonsten funktioniert das so tadellos.

Hoffend auf eure Hilfe
lg
reltro

[Diese Nachricht wurde von reltro am 22. Mai. 2012 editiert.]

[Diese Nachricht wurde von reltro am 22. Mai. 2012 editiert.]

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 22. Mai. 2012 10:49    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 reltro 10 Unities + Antwort hilfreich

deine Funktion hab ich jetz nicht getestet ... meine will(1001 . "hallo")nicht, sondern (1000 . "hallo") ....

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 10:56    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 Cadmium,
ähm, verstehe ich nicht. (1001 . "hallo") wäre in diesem Fall ja der ApplicationName.
ob da 1000 oder 1001 als GC steht; beides sollte ein String sein.

Dürfte also kein Unterschied machen, außer dass es ohne 1001 kein ApplicationName gibt und so die Xdata's was auch immer sind (???)
 
geht das überhaupt? ohne AppName?

lg reltro


Ps.: wie sieht denn deine Funtkion aus?

[Diese Nachricht wurde von reltro am 22. Mai. 2012 editiert.]

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 22. Mai. 2012 11:04    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 reltro 10 Unities + Antwort hilfreich

ach so ..der appli-Name .. den übergeb ich extra .... haste vielleicht (regapp "hallo")vergessen ?


Die Funktionen sind Bestandteil einer Bibo, die außeinanderzuklamüsern würde hier zu weit führen, ..die Bibo zu posten aber auch.

Aber ein GC-Lisp daraus kann ich dir zur Verfügung stellen:

(defun DT:XDATA-PUT-GC (OBJ NEWXDATA / XDATA DATA)
  (if(and(=(type OBJ)'ENAME)
         (=(type NEWXDATA)'LIST)
         (=(type(car NEWXDATA))'STR)
         (vl-every
           '(lambda(X)
              (and (listp X)
                   (=(type(car X))'INT)
                   (<= 1000 (car X))
              )    
            ) 
           (cdr NEWXDATA)
         ) 
     )
    (progn
      (setq XDATA (assoc -3 (entget OBJ '("*"))))
      (regapp (car NEWXDATA))
      (if(setq DATA(assoc (car NEWXDATA) (cdr XDATA)))
        (setq XDATA(subst NEWXDATA                       
                          DATA
                         (cdr XDATA)
                   )
        )
        (setq XDATA(cons -3 (append (cdr XDATA)
                                    (list NEWXDATA)    
                            )
                   )     
        )
      )         
      (entmod(append (entget OBJ) (list XDATA)))
    )
  ) 
)

Aufruf dann
(DT:XDATA-PUT (car(entsel)) '("hallo" (1000 . "ich bin Xdata") (1002 . "{") (1070 . 1) (1070 . 2) (1070
. 3) (1070 . 4) (1000 . "mit einem String") (1011 2.0 3.5 4.3) (1000 . "und noch
einen") (1002 . "}")))

------------------
      - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 11:08    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

Aso aso,
hab ich mir eigentlich schon gedacht...  

mja, auch bei mir, teil einer bib...

Wie ich sehe machst du das ganze mit "(entmod)"
Wollte das ganze mit VLA-setXdata machen.

Warum? Weil ich mir nicht zur Gänze sicher bin ob das in Reaktoren funktioniert, mit "(entmod)"
funktioniert es denn?

bzw. kannst du mir vielleicht eine Hilfe geben mit VLA (wenn es mit entmod in rekatoren nicht funktioniert)

und zwecks (regapp "hallo") -> hab mal gelesen das ganze sollte eh automatisch passieren wenn die App noch nicht registriert ist?

lg reltro

[Diese Nachricht wurde von reltro am 22. Mai. 2012 editiert.]

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

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


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

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 22. Mai. 2012 11:09    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 reltro 10 Unities + Antwort hilfreich

Hallo Reltro,
auch ich habe mich probiert, ohne Erfolg.
Meine Alternative dazu ist glaube ich daß gleiche in Grün, was CADmium eben schon aus seiner Bibo gepostet hat:

Code:

(defun c:test  (/ APPNAME OBJ XDATA)
  (setq obj(car (entsel))
        AppName "hallo"
        XData '((1000 . "ich bin Xdata")
                (1002 . "{")
                (1070 . 1)
                (1070 . 2)
                (1070 . 3)
                (1070 . 4)
                (1000 . "mit einem String")
                (1011 2.0 3.5 4.3)
                (1000 . "und noch einen")
                (1002 . "}")))
 
  (entmod (append (entget obj) (list (list -3
            (cons AppName XData))))))

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 22. Mai. 2012 11:12    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 reltro 10 Unities + Antwort hilfreich

nee.. meine vla-Routine kann das auch ... aber , wie gesagt, keine Zeit und Lust das jetzt aufzudröseln.

------------------
  - Thomas -          
"Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben."

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 11: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

Hallo Jörn,
danke für deine anteilnahme...

Das Problem liegt nicht beim AppName oder sonstigen GC.
Der fehler tritt nur auf wenn es sich wie bei GC 1011 um eine Liste handelt, und nicht wie bei anderen um dotted-pairs.
Wenn ein solcher GC vermieden wird, funktioniert das so einwandfrei

lg reltro

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

reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 11: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

@Cadmium...
Ist Ok, solltest du Lust und Zeit entwickeln wär ich um Hilfe dankbar. Vielen Dank Dir. Glücklichen Tag Dir

lg reltro

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

neurosis
Mitglied
dipl.ing.


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

Beiträge: 222
Registriert: 22.08.2006

erstellt am: 22. Mai. 2012 17:02    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 reltro 10 Unities + Antwort hilfreich

hallo reltro,
dein denkfehler liegt an der subliste. diese muss du natuerlich auch umwandeln.
fuer eine koord-liste, wie in deinem beispiel, hier eine moeglichkeit der umsetzung:

Code:
(foreach DataItem (reverse XData)
  (setq Data (cons (cdr DataItem) Data))
  (setq DataType (cons (car DataItem) DataType))
)

(setq sa (vlax-make-safearray vlax-vbVariant (cons 0 (- (length data) 1)))
      i -1)
(repeat (length data)
  (setq i (1+ i))
  (if (= (type (nth i data)) 'LIST)
    (vlax-safearray-put-element sa i (vlax-3d-point (nth i data)))
    (vlax-safearray-put-element sa i (nth i data))
  )
)
 
(vlax-invoke-method
  obj
  'SetXdata
  (vlax-safearray-fill
    (vlax-make-safearray vlax-vbInteger (cons 0 (- (length DataType) 1)))
    DataType
  )
  sa
)



entmod, entdel ... funktionieren ueblicherweise in reaktoren (mir selber ist nichts gegenteiliges bekannt).

gruss
marco

------------------
Marco Heuer
www.arc-aachen.de
Airport Office

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



Architekt / Bauingenieur (m/w/d) als Projektleiter im Bereich Bauwesen / Liegenschaften

Beckhoff Automation ist einer der welt­weit führenden Spezialisten für Auto­matisierungs- und Steuerungs­technik. Als inhaber­geführtes Familien­unter­nehmen realisieren wir seit 1980 innovative Auto­mati­sierungs­systeme auf der Grundlage PC-basierter Steuerungs­technik. Heute erwirtschaften wir mit rund 6.000 Mitarbeitern (September 2023) an mehr als 75 Standorten weltweit einen Umsatz von über 1,515 Mrd....

Anzeige ansehenProjektmanagement
reltro
Mitglied
student


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

Beiträge: 125
Registriert: 08.11.2009

Acad 2012 - VBA,Lisp
Revit 2012
3dsMax 2012
Rhino 5 - GH,Pyhton 3,rhino.Common<P>Win 7 - i7 4x3.2GHz - 8Gb DDR3

erstellt am: 22. Mai. 2012 18:02    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

Hello neurosis


Das ist es...
Vielen Dank für deine Hilfe.

U's sind unterwegs

Danke an alle beteiligten; natürlich gibts auch für euch ein paar U's

Lg reltro

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