| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: List geht in ACA2010 nicht mehr (2594 mal gelesen)
|
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 23. Feb. 2010 11:04 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum... ich habe seinerzeit mal folgenden Lisp-Code zum Umwandlen von "assoziativen" AEC-Bemassungen in "nichtassoziative" AEC-Bemassungen zu großen Teilen aus diesem Forum "abgeschrieben" und mit meinen rudimentären Lisp-Kenntnissen etwas modifiziert. Bei ACA2009 hat auch alles ganz wunderbar geklappt. Bei ACA2010 scheint irgendeine dieser Funktionen nun andere Parameter zu verlangen, denn beim Ausführen des Lisps erscheint nach dem Wählen der Objekte die Fehlermeldung
Code: *Abbruch* Fehlerhafter Argumenttyp: 2D-/3D-Punkt: nil
Hat von euch jemand nen Tipp, wo das Problem liegt? Ich finde die Stelle einfach nicht... Code:
(defun c:convertdim( / oldosmode oldcmdecho ss ss2 l cl cnt en ed el p1 p2 pd w lauswahl ) (setq oldosmode (getvar "osmode") oldcmdecho (getvar "cmdecho") ;ss (ssget "X" '((0 . "AEC_DIMENSION_GROUP"))) ss (ssget) l (sslength ss) cl 0 cnt 0 ) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (< cnt l) (setq en (ssname ss cnt) ed (entget en) p1 (cdr (assoc 10 ed)) pd (cdr (assoc 16 ed)) w (angle '(0 0 0 ) pd) p2 (polar p1 w 1) cnt (1+ cnt) el (entlast) ) (command "_explode" en) (command "_explode" (entlast)) (setq ss2 (ssadd)) (while (setq el (entnext el)) (ssadd el ss2) ) (if (= (sslength ss2) 1) (command "dimconvert" ss2 "" "_yes" p1 p2) ;else (command "dimconvert" ss2 "" p1 p2 "") ) (setq cl (1+ cl)) (command "-objectscale" (entlast) "" "_add" "" "") ) (setvar "osmode" oldosmode) (setvar "cmdecho" oldcmdecho) (terpri) (princ l)(princ " Bemassungen in ")(princ cl)(princ " manuelle Bemassungen konvertiert") ;(sssetfirst(setq a(ssget "_x" '((0 . "DIMENSION"))))a) (setq lauswahl (ssget "_x" '((0 . "DIMENSION")))) (command "_erase" lauswahl "") (princ)) (princ "\nKonvertiert assoziative AEC-Bemassungen in nichtassoziative AEC-Bemassungen") (princ "\nACHTUNG!! Löscht alle klassischen AutoCAD-Bemassungen in der Zeichnung!!") (princ "\n") (princ "\nAufruf: CONVERTDIM ") (princ)
------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 23. Feb. 2010 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
hi, da war mal was mit (initcommandversion ...) nur ohne 2010 - kein Test... ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." (www.uni-leipzig.de/~rotheh/elefant.htm) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 23. Feb. 2010 11:29 <-- editieren / zitieren --> Unities abgeben:
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 23. Feb. 2010 12:28 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
Also bis vor (command "dimconvert"... funkts bei mir - den Befehl DIMCONVERT/_DIMCONVERT gibts bei mir aber nicht. Wähle ich aber z.B. einen Text (statt az. dim), dann krieg ich deine Fehlermeldung ... ------------------ Schöne Grüße Ernst www.geopaint.at [Diese Nachricht wurde von Geos am 23. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 23. Feb. 2010 18:16 <-- editieren / zitieren --> Unities abgeben:
Der Befehl DIMCONVERT gehört wohl zum AutoCAD ARCHITECTURE (ACA) - speziell zu den AEC-Bemaßungen - und ist bei deinem MAP scheinbar nicht vorhanden. Da es den Befehl aber sowohl in ACA2009 als auch ACA2010 gibt und die Einzelschritte beim "manuellen" Ausführen im AutoCAD aber identisch sind, glaub ich fast nicht, dass es an diesem liegt. Und falls doch, bräuchte ich nen Tipp, wie ich diesen dann jetzt aufrufen muss. ------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003 Rechner: i5-2500@3.3 GHz, 16GB RAM, Windows7 64bit Software: ACA2013, BDS Premium 2015/2016
|
erstellt am: 24. Feb. 2010 17:06 <-- editieren / zitieren --> Unities abgeben:
Ich habe jetzt mal angefangen, den Code weitestgehend auszukommentieren und Stück für Stück bzw. Zeile für Zeile durchzutesten. Dabei bin ich darauf gestoßen, dass schon der folgende Block Code:
(setq en (ssname ss cnt) ed (entget en) p1 (cdr (assoc 10 ed)) ... )
eben nicht den Startpunkt der Bemaßung sondern ein NIL zurückliefert. Das könnte durchaus dann den Fehler bei der späteren Verwendung von P1 bewirken.Leider hab ich keine Ahnung, wie die Ermittlung von P1 jetzt in ACA2010 "richtig" wäre. Könnt ihr mir da weiterhelfen? ------------------ http://www.sebastian-schild.de [Diese Nachricht wurde von snoopyonline am 24. Feb. 2010 editiert.] [Diese Nachricht wurde von snoopyonline am 24. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 24. Feb. 2010 18:56 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
Da hat sich in 2010 nichts geändert! Hast Du auch den Inhalt Deiner Variablen geprüft? - in "ed" müßtest Du beispielsweise sowas (ähnliches) finden:
Code: ((-1 . <Objektname: 7e5ace50>) (0 . "DIMENSION") (330 . <Objektname: 7e591d18>) (5 . "C7BA") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "DOOR_SINGLE") (100 . "AcDbDimension") (280 . 0) (2 . "*D30") (10 -2.02208 -14.075 0.0) (11 -1.67599 -15.3906 0.0) (12 0.0 0.0 0.0) (70 . 33) (1 . "") (71 . 5) (72 . 1) (41 . 1.0) (42 . 2.69812) (73 . 0) (74 . 0) (75 . 0) (52 . 0.0) (53 . 0.0) (54 . 0.0) (51 . 0.0) (210 0.0 0.0 1.0) (3 . "Bestand-100") (100 . "AcDbAlignedDimension") (13 0.15114 -16.5152 0.0) (14 -0.193923 -13.8393 0.0) (15 0.0 0.0 0.0) (16 0.0 0.0 0.0) (40 . 0.0) (50 . 0.0))
Also bei 10 müßte es eine Koordinate geben und auch bei ACA wirds wohl eine "DIMENSION" sein. Wenn nicht, mal zurückverfolgen ... ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 25. Feb. 2010 09:36 <-- editieren / zitieren --> Unities abgeben:
@Ernst: habe mal wie geraten, die Variable "ed" geprüft bzw. mit princ ausgeben lassen. Code:
((-1 . <Objektname: 7c79d980>;) (0 . AEC_DIMENSION_GROUP) (5 . 4728) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 7c79d988>;) (102 . }) (330 . <Objektname: 7c6f6d08>;) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . A_Bemassung))
Also ich kann da leider keinen Punkt drin finden... Was nun NACHTRAG: hab das Script auch noch mal im ACA2009 mit Prüfung von "ed" durchlaufen lassen und dort ist die Rückmeldung deutlich ergiebiger...
Code:
((-1 . <Objektname: 7e40d258>) (0 . AEC_DIMENSION_GROUP) (5 . 58AB) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 7e40d260>) (102 . }) (330 . <Objektname: 7e5fed08>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . A_Bemassung) (100 . AecDbEntity) (102 . {AEC_SUBOBJECT) (300 . AecImpDimensionGroup) (100 . AecImpObj) (3 . ) (100 . AecImpEnt) (171 . 0) (100 . AecImpGeo) (10 13.4141 5.52019 0.0) (15 -1.0 0.0 0.0) (16 0.0 -1.0 0.0) (210 0.0 0.0 1.0) (360 . <Objektname: 0>) (100 . AecImpDimensionGroup) (102 . {AEC_DIMENSION_CHAIN) (100 . AecImpObj) (3 . ) (100 . AecImpArray) (90 . 1) (102 . {AEC_SUBOBJECT) (300 . AecImpAssociativeDimensionChain) (100 . AecImpObj) (3 . ) (100 . AecImpEnt) (171 . 0) (100 . AecImpGeo) (10 0.0 0.0 0.0) (15 1.0 0.0 0.0) (16 0.0 1.0 0.0) (210 0.0 0.0 1.0) (360 . <Objektname: 0>) (100 . AecImpDimensionChain) (91 . 2) (10 10.8093 4.50568 0.0) (91 . 65535) (92 . 1) (93 . 0) (1 . ) (330 . <Objektname: 0>) (331 . <Objektname: 0>) (94 . 65535) (10 14.9703 4.47187 0.0) (91 . 65535) (92 . 1) (93 . 1) (1 . ) (330 . <Objektname: 0>) (331 . <Objektname: 0>) (94 . 65535) (100 . AecImpAssociativeDimensionChain) (102 . AEC_SUBOBJECT}) (102 . AEC_DIMENSION_CHAIN}) (341 . <Objektname: 7e40d200>) (68 . 0) (69 . 0) (10 0.0 0.0 0.0) (102 . AEC_SUBOBJECT}) (102 . {AEC_NULLOBJECT}) (100 . AecDbGeo) (100 . AecDbDimensionGroup))
------------------ http://www.sebastian-schild.de
[Diese Nachricht wurde von snoopyonline am 25. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.
Beiträge: 3329 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 25. Feb. 2010 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
|
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 25. Feb. 2010 12:17 <-- editieren / zitieren --> Unities abgeben:
|
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 25. Feb. 2010 12:26 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
|
Geos Mitglied Vermessungstechniker i.R.
Beiträge: 1017 Registriert: 21.09.2001 ACAD Map 2010, Win 7 Pro eigene Lisp's<P>HW: Core i7 860, 2.8 GHz 3.3 GB, NVIDIA GeForce GTS 250
|
erstellt am: 25. Feb. 2010 12:31 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
Mangels ACA muss ich passen ... Code: ((-1 . <Objektname: 7c79d980>;) (0 . AEC_DIMENSION_GROUP) (5 . 4728) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 7c79d988>;) (102 . }) (330 . <Objektname: 7c6f6d08>;) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . A_Bemassung))
...sorry. ------------------ Schöne Grüße Ernst www.geopaint.at Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 25. Feb. 2010 12:43 <-- editieren / zitieren --> Unities abgeben:
OK.... Zeichnung in ACA2009 erstellt, AEC-Bemassung eingefügt und geprüft: Code:
((-1 . <Objektname: 7e40d258>) (0 . AEC_DIMENSION_GROUP) (5 . 58AB) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 7e40d260>) (102 . }) (330 . <Objektname: 7e5fed08>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . A_Bemassung) (100 . AecDbEntity) (102 . {AEC_SUBOBJECT) (300 . AecImpDimensionGroup) (100 . AecImpObj) (3 . ) (100 . AecImpEnt) (171 . 0) (100 . AecImpGeo) (10 6.75328 0.876048 0.0) (15 -1.0 0.0 0.0) (16 0.0 -1.0 0.0) (210 0.0 0.0 1.0) (360 . <Objektname: 0>) (100 . AecImpDimensionGroup) (102 . {AEC_DIMENSION_CHAIN) (100 . AecImpObj) (3 . ) (100 . AecImpArray) (90 . 1) (102 . {AEC_SUBOBJECT) (300 . AecImpAssociativeDimensionChain) (100 . AecImpObj) (3 . ) (100 . AecImpEnt) (171 . 0) (100 . AecImpGeo) (10 0.0 0.0 0.0) (15 1.0 0.0 0.0) (16 0.0 1.0 0.0) (210 0.0 0.0 1.0) (360 . <Objektname: 0>) (100 . AecImpDimensionChain) (91 . 2) (10 0.883919 0.233529 0.0) (91 . 65535) (92 . 1) (93 . 0) (1 . ) (330 . <Objektname: 0>) (331 . <Objektname: 0>) (94 . 65535) (10 3.67483 0.233529 0.0) (91 . 65535) (92 . 1) (93 . 1) (1 . ) (330 . <Objektname: 0>) (331 . <Objektname: 0>) (94 . 65535) (100 . AecImpAssociativeDimensionChain) (102 . AEC_SUBOBJECT}) (102 . AEC_DIMENSION_CHAIN}) (341 . <Objektname: 7e40d200>) (68 . 0) (69 . 0) (10 0.0 0.0 0.0) (102 . AEC_SUBOBJECT}) (102 . {AEC_NULLOBJECT}) (100 . AecDbGeo) (100 . AecDbDimensionGroup))
Zeichnung gespeichert und Bemassung in ACA2010 geprüft: Code:
((-1 . <Objektname: 7db951d8>) (0 . AEC_DIMENSION_GROUP) (5 . 58AB) (102 . {ACAD_XDICTIONARY) (360 . <Objektname: 7db951e0>) (102 . }) (330 . <Objektname: 7c103d08>) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . A_Bemassung))
------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
neurosis Mitglied dipl.ing.
Beiträge: 222 Registriert: 22.08.2006
|
erstellt am: 25. Feb. 2010 15:01 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
|
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003 Rechner: i5-2500@3.3 GHz, 16GB RAM, Windows7 64bit Software: ACA2013, BDS Premium 2015/2016
|
erstellt am: 25. Feb. 2010 15:31 <-- editieren / zitieren --> Unities abgeben:
ich kann den Befehl DIMCONVERT händisch ausführen und diesen auch in meinem Lisp erfolgreich nutzen, sofern ich dort die Punkte P1 und P2 irgendwie festlege. Nur die Ermittlung der Punkte P1 und P2 klappt halt nicht, da die AEC-Bemassungen in den beiden Programmversionen wohl unterschiedliche Eigenschaften aufweisen (siehe vorherige Threads) ------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
snoopyonline Mitglied Architekt
Beiträge: 192 Registriert: 17.05.2003
|
erstellt am: 25. Feb. 2010 16:22 <-- editieren / zitieren --> Unities abgeben:
Die "fehlenden" Eigenschaften der AEC-Bemassungen in ACA2010 sind ja nun wohl ein Problem, welches man nicht so einfach wegdiskutieren kann. Daher hab ich mich mal daran gemacht und die im "Hauptbeitrag" eingestellte Lisp etwas umzustricken und bin dabei schon einen großen Schritt weitergekommen. Nur zum Verständnis: die Ur-Lisp hat aus den markierten AEC-Bemassungen die für die "neue Bemassung" benötigten Punkte P1 und P2 ausgelesen bzw. über Umwege ermittelt. Danach wurde die AEC-Bemassung in eine oder mehrere "gedrehte Bemassungen" zerlegt (2x Explode) und diese in den Auswahlsatz "SS2" eingefügt. Anschließenden wurden diese "gedrehten Bemassungen" in SS2 zu einer neuen AEC-Bemassung (DIMCONVERT SS2 "" P1 P2) zusammengesetzt. Dabei war es wohl egal, dass in SS2 auch Kreise oder Linien (Relikte von manuell entfernten Hilfspunkten) enthalten sein konnten. Die wurden wohl ignoriert. Jetzt hab ich die Lisp so umgestrickt, dass ich die AEC-Bemassungen sofort zerlege (Einzelteile wieder in Auswahlsatz SS2) und dann erst aus den gedrehten Bemassungen in SS2 meine Punkte P1 und P2 ermittle. Das klappt in 90% der Fälle auch ganz gut. Allerdings machen mir die oben erwähnten Kreise und Linien die ggf. auch in SS2 stecken echte Probleme. Daher meine Frage, wie ich im folgenden Lisp den Auswahlsatz SS2 so filtern kann, dass dieser ausschließlich die gedrehten Bemassungen enthält. Ich denke dabei könnt ihr mir eher helfen als bei fehlenden Objekteigenschaften in ACA2010 NEU:
Code:
(defun c:convertdim( / oldosmode oldcmdecho ss ss2 l cl cnt en en2 ed ed2 el el2 p1 p2 pd w lauswahl ) (setq oldosmode (getvar "osmode") oldcmdecho (getvar "cmdecho") ss (ssget) l (sslength ss) cl 0 cnt 0 ) (setvar "cmdecho" 0) (setvar "osmode" 0) (while (< cnt l) (setq en (ssname ss cnt) ed (entget en) cnt (1+ cnt) el (entlast) ) (command "_explode" en) (command "_explode" (entlast)) (setq ss2 (ssadd)) (while (setq el (entnext el)) (ssadd el ss2) ) (setq en2 (ssname ss2 (- (sslength ss2) 1)) ed2 (entget en2) p1 (cdr (assoc 10 ed2)) w (cdr (assoc 50 ed2)) ;(angle '(0 0 0 ) pd) p2 (polar p1 (+ w (* pi 0.5)) 1) ) (if (= (sslength ss2) 1) (command "dimconvert" ss2 "" "_yes" p1 p2 ) ;else (command "dimconvert" ss2 "" p1 p2 "") ) (setq cl (1+ cl)) (command "-objectscale" (entlast) "" "_add" "" "") ) (setvar "osmode" oldosmode) (setvar "cmdecho" oldcmdecho) (terpri) (princ l)(princ " Bemassungen in ")(princ cl)(princ " manuelle Bemassungen konvertiert")(setq lauswahl (ssget "_x" '((0 . "DIMENSION")))) (command "_erase" lauswahl "") (princ) ) (princ "\nKonvertiert assoziative AEC-Bemassungen in nichtassoziative AEC-Bemassungen") (princ "\nACHTUNG!! Löscht alle klassischen AutoCAD-Bemassungen in der Zeichnung!!") (princ "\n") (princ "\nAufruf: CONVERTDIM ") (princ)
------------------ http://www.sebastian-schild.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
marc.scherer Ehrenmitglied V.I.P. h.c. CAD-Administrator
Beiträge: 2490 Registriert: 02.11.2001 Windows 10 64bit AutoCAD Architecture 2018/2019 (deu/eng) AEC-Collection 2019 (Revit und Zeugs) Wenn sich's nicht vermeiden läßt: D-A-CH Erweiterung (mies implementierter Schrott)
|
erstellt am: 26. Feb. 2010 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für snoopyonline
Zitat: Original erstellt von snoopyonline: Daher meine Frage, wie ich im folgenden Lisp den Auswahlsatz SS2 so filtern kann, dass dieser ausschließlich die gedrehten Bemassungen enthält.
Ohne jetzt groß in Deinen Code eingestiegen zu sein... Du baust doch ss2 selbst zusammen? Mach doch einfach in Deiner Erstellungsschleife ein if mit rein und gut. Oder aber Du nimmst Deinen Auswahlsatz und gehst den noch mal durch und schmeißt alle Objekte raus die nicht Bemassung sind. ------------------ Ciao, Marc [Diese Nachricht wurde von marc.scherer am 26. Feb. 2010 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |