| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Lisp-Tool Flächenermittlung unter 64-bit (3206 mal gelesen)
|
GWH Mitglied
Beiträge: 549 Registriert: 08.06.2001
|
erstellt am: 14. Sep. 2010 14:21 <-- editieren / zitieren --> Unities abgeben:
Hallo Lisp-Profis, folgende Problematik stellt sich unter der 64-bit Version von AutoCAD ein (egal ob 2010 oder 2011): es gibt ein Lisp zu Flächenermittlung von Objekten, wo die Fläche als Schriftfeld abgelegt wird. Funktionierte bisher in den 32-bit Versionen einwandfrei, egal ob AutoCAD oder Civil, aber in den 64-bit nicht mehr - egal ob AutoCAD oder Civil, ob Win XP oder Win 7. Es wird die Abfrage ausgeführt, das Schriftfeld abgelegt, jedoch nicht der Flächeninhalt, sonder die Rautezeichen = Verknüpfung zu Objekt verloren. So sieht das aktuelle Lisp aus: (defun c:flm2 () (setq a (car (entsel)) b (getpoint "\n Select Point: ")) (linkedlength a b) ) (vl-load-com) ;;get a reference to model space (setq *model-space* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;;pass this function an entity and a point (defun LinkedLength (ent pt / obj objID ip width str) ;;convert the entity to an object (setq obj (vlax-ename->vla-object ent) ;;get the object ID objID (vla-get-objectid obj) ;;convert the point ip (vlax-3D-Point pt) ;;set the width for the MTEXT width 0.0 ;;set the string - this creates the field str (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId " (rtos objID 2 0) ">%).Area \\f \"%lu2%pr2%ct8\">%""m²" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) ) Kennt von euch jemand dieses Problem, beziehungsweise hat eine Lösung? Vielen Dank im voraus.
------------------ Ciao Günter -------------------------------------------------------------------------------- "Wir haben keine Probleme, sondern Aufgaben zu lösen." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13508 Registriert: 30.11.2003 Hinweis: Meine Mitarbeit auf CAD.DE ist fakultativ, unentgeltlich und beruht nur auf einem ausgeprägtem Helfersyndrom.
|
erstellt am: 14. Sep. 2010 14:24 <-- editieren / zitieren --> Unities abgeben: Nur für GWH
|
GWH Mitglied
Beiträge: 549 Registriert: 08.06.2001
|
erstellt am: 14. Sep. 2010 14:39 <-- editieren / zitieren --> Unities abgeben:
das mit der ObjektID ist mir schon aufgefallen, nur hatte ich im Forum diesbezüglich nichts gefunden. ------------------ Ciao Günter -------------------------------------------------------------------------------- "Wir haben keine Probleme, sondern Aufgaben zu lösen." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GWH Mitglied
Beiträge: 549 Registriert: 08.06.2001 AutoCAD ab R14, Civil 3D 20xx BricsCAD ab V20 Win 10 Pro 64bit, ...
|
erstellt am: 14. Sep. 2010 15:27 <-- editieren / zitieren --> Unities abgeben:
Da meine Kenntnisse im programmieren äußerst dürftig sind, hoffe ich es richtig zusammengebaut zu haben. Es funktioniert nach wie vor nicht - Schriftfeld mit Raute wird abgelegt - zusätzlich bekomme ich folgende Meldung: ; Fehler: Falsch formatierte Liste in Eingabe Befehl: flm2 Objekt wählen: Select Point: #<VLA-OBJECT IAcadMText2 000000002be0ff28> Befehl: **********************
zusammengestellter Code: defun c:flm2 () (setq a (car (entsel)) b (getpoint "\n Select Point: ")) (linkedlength a b) ) (vl-load-com) ;;get a reference to model space (setq *model-space* (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)) ) ) ;;pass this function an entity and a point (defun LinkedLength (ent pt / obj objID ip width str) ;;convert the entity to an object (setq OBJ(vlax-ename->vla-object ENT)) ;;get the object ID (or(and(setq UTIL(vla-get-utility(vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-method-applicable-p UTIL "GetObjectIdString") (setq OBJID(vlax-invoke-method UTIL "GetObjectIdString" OBJ :vlax-False)) ) (setq OBJID (vla-get-objectid OBJ) ) ;;convert the point ip (vlax-3D-Point pt) ;;set the width for the MTEXT width 0.0 ;;set the string - this creates the field (setq STR (strcat "%<\\AcObjProp.16.2 Object(%<\\_ObjId" (vl-princ-to-string OBJID) ">%).Area \\f \"%lu2%pr2%ct8\">%""m²" ) ) ;;Create the MTEXT entity containing the field. (vla-addMText *model-space* ip width str) )
------------------ Ciao Günter -------------------------------------------------------------------------------- "Wir haben keine Probleme, sondern Aufgaben zu lösen." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 bis ACA 2013 Arcibem System: Windows Internet-Startseite: http://www.archi.de
|
erstellt am: 14. Sep. 2010 15:46 <-- editieren / zitieren --> Unities abgeben: Nur für GWH
|
GWH Mitglied
Beiträge: 549 Registriert: 08.06.2001
|
erstellt am: 14. Sep. 2010 17:45 <-- editieren / zitieren --> Unities abgeben:
Danke für dein bemühen Henning, aber diese Routine ist nur für Polylinien. Zudem funktioniert sie leider nicht. Es kam die Meldung: Raumpolygon wählen: ; Fehler: Fehlerhafter Argumenttyp: numberp: "8796083607888" Im Beitrag fand ich dann deinen Hinweis, das etwas ausgetauscht gehört. Getan, nächste Meldung: Objekt wählen: Select Point: #<VLA-OBJECT IAcadMText2 0000000025f11558> und der Befehl wurde ohne Ergebnis beendet. Wie schon erwähnt, bin ich dem Programmieren nicht mächtig. Trotzdem vielen Dank. ------------------ Ciao Günter -------------------------------------------------------------------------------- "Wir haben keine Probleme, sondern Aufgaben zu lösen." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
runkelruebe Moderator Straßen- / Tiefbau
Beiträge: 8075 Registriert: 09.03.2006 Kinder, kauft Kämme! Es kommen lausige Zeiten.
|
erstellt am: 14. Sep. 2010 19:15 <-- editieren / zitieren --> Unities abgeben: Nur für GWH
Weil Du eine ganz fiese Stolperstelle drin hast, also für jmd. der nicht proggen kann, wie Dich und mich z.B. Hat mich doch so einige Minuten gekostet, diese zusätzliche Zeile in wronzkys Beispiel heißt es (freies Zitat) Zitat: statt:Code: (vla-get-objectid (vlax-ename->vla-object hElement))
Das:Code: (Get-ObjectIDx64 hElement)
Du dagegen hast Code: (setq obj (vlax-ename->vla-object ent) ;;get the object ID objID (vla-get-objectid obj)
da stehen--> da mußt Du eingreifen. Das andere, was Du noch tauschen mußt, steht weiter unten (das mit dem rtos)------------------ Gruß, runkelruebe Herr Kann-ich-nich wohnt in der Will-ich-nich-Straße... System-Info | Dateianhänge | FAQ-ACAD | CAD.de-Hilfe | Sei eine Antilope Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |