• Dieses Forum ist die maschinengenerierte Übersetzung von www.cad3d.it/forum1 - der italienischen Design-Community. Einige Begriffe sind nicht korrekt übersetzt.

VLisp: Importgeometrie n Elemente in Excel für die Verarbeitung

  • Ersteller Ersteller Dr.Lube
  • Erstellt am Erstellt am

Dr.Lube

Guest
Hallo alle,
Ich versuche, erschöpferisch zu sein, da ich im Titel nur Totbriefe verwenden kann (und ich habe sie alle benutzt!)

für die Arbeit muss ich die Berechnung des Zentrums der Steifigkeit automatisieren.
was ich tue, ist in polyline Regionen umwandeln und gehen, um die Koordinaten des Zentrums und die Hauptträgheitsmomente zu extrahieren. alles wird auf eine Unterstützung Excel-Datei gesetzt, wo ich die notwendigen Berechnungen durchführen, um die Koordinaten des Trägheitszentrums zu finden, die ich dann als Punkt in Autocad einfügen werde.

Um dies zu nutzen zwei Lispel, die Datenextraktion wird von mir gemacht, und während die von Export und Weitergabe von Daten von Excel I fand es im Netz.
das Problem Ich habe aufgetreten ist die Unfähigkeit, einen Zyklus mit progressivem Index zu machen, um innerhalb der Excel-Datei zu bewegen. im Import in der Tat überschreibe ich immer die gleiche Linie! Ein weiteres Problem ist, dass die Werte mit dem Punkt zu mir importiert werden, anstatt mit dem Komma.
Code:
(vl-load-com)
(defun c:inerzia)
(setq acapp (vlax-get-acad-object))
(Indexsatz 1)
(sing)
(Sectq ent (Auto(entsel));
(setq ent (vlax-ename->vla-object ent));

(setq xy (vla-get-centroid ent)
(Sectq i (vla-get-principalmoments ent));

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0); Variante ist ein Array von 2 Elementen, extrahieren die erste ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i)); siehe oben, ich extrahiere das zweite iy
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0) Koordinatenzentrum x
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

; die Idee war nun, ein Array zu erstellen, das alle Daten des Zyklus enthält. hier ist definitiv falsch, es wird bei dem letzten Versuch, den ich gemacht habe zu verstehen, wie es funktioniert
(setq cord (vlax-make-safearray vlax-vbdouble '(1.3)))
(vlax-safearray-put-element cord 0 index ix)

; unten ist, wie ich es zuerst gemacht, ohne Daten einzeln zu extrahieren. Ich hatte 2 Listen, die, wenn in Exel eingefügt, wichtig waren "richtig" in 4 Spalten
(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))
; Ausfuhr von Listen
(setq xl (vlax-get-or-create-object "excel.application"))
(openexcel "c:\\prova.xls" nil)
;apro die test.xls-Datei in diesem Pfad, auf der Seite "Inertia" und mit nil Ich sehe nicht, dass es in der Taskleiste erscheint
(putcell "a1" xy)
(Eingabezelle c1 i)
(closeexcel "c:\\prova.xls")

(Setq-Index (1+-Index)); Zeilenzähler erhöhen
;

(princ)
Ende
Fehlen des Teils, in dem ich die verarbeiteten Daten nehme, aber ich habe Schritt für Schritt:)
Die Frage ist also: Wie komme ich voran?

unter dem Code für die Verwendung von Excel (Annex)

Danke:)
Den Haag
 

Anhänge

so sollte es für das Schreiben der Daten über Excel arbeiten, di volta in volta, jede Auswahl einer Region.
sagen Sie mir, ob Sie die Daten schreiben möchten nur einmalAm Ende der Auswahl.
Code:
(vl-load-com)
(defun c:inerzia)
(setq acapp (vlax-get-acad-object))[COLOR="#FFA500"] ;(setq index 1)[/COLOR]
[B][COLOR="#FF0000"] (Satzindex 0)[/COLOR][/B](sing)
(Sectq ent (Auto(entsel));
(setq ent (vlax-ename->vla-object ent));

(setq xy (vla-get-centroid ent)
(Sectq i (vla-get-principalmoments ent));

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0); Variante ist ein Array von 2 Elementen, extrahieren die erste ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i)); siehe oben, ich extrahiere das zweite iy
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0) Koordinatenzentrum x
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

; die Idee war nun, ein Array zu erstellen, das alle Daten des Zyklus enthält. hier ist definitiv falsch, es wird bei dem letzten Versuch, den ich gemacht habe zu verstehen, wie es funktioniert[COLOR="#FFA500"] (setq cord (vlax-make-safearray vlax-vbdouble '(1.3)))
(vlax-safearray-put-element cord 0 index ix)[/COLOR]; unten ist, wie ich es zuerst gemacht, ohne Daten einzeln zu extrahieren. Ich hatte 2 Listen, die, wenn in Exel eingefügt, wichtig waren "richtig" in 4 Spalten
(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))
; Ausfuhr von Listen
(setq xl (vlax-get-or-create-object "excel.application"))
(openexcel "c:\\prova.xls" nil)
;apro die test.xls-Datei in diesem Pfad, auf der Seite "Inertia" und mit nil Ich sehe nicht, dass es in der Taskleiste erscheint[COLOR="#FFA500"] ;(putcell "a1" xy)[/COLOR]
[B][COLOR="#FF0000"] (putcell (strcat "a" (setq index (1+ index))))[/COLOR][/B]
[COLOR="#FFA500"] ; (putcell "c1" i)[/COLOR]
[B][COLOR="#FF0000"] (Einzelwert)[/COLOR][/B](closeexcel "c:\\prova.xls")
 [COLOR="#FFA500"] ;(setq Index (1+ Index)); Zeilenzähler erhöhen[/COLOR]),

(princ)
);fin
 
Wow! Herzlichen Glückwunsch, ich hatte 2 Tage gebraucht, um diesen Teil zu tun:) danke, dass ich die Fehler bemerken!!

Ja, in der Tat wäre das Ideal, in der Lage sein, alles in einer Reihe auszuwählen und die Datei zu öffnen, um uns nur am Ende zu schreiben (um den Code zu beschleunigen).
Wie können Sie das Problem des Punktes lösen (Ersatz mit Komma)? Gibt es auch einen Weg, sich nicht auf die Excel-Datei zu stützen und Hersteller und Divisionen zu machen?

Vielen Dank :)
 
...wie können Sie das Problem des Punktes lösen (Ersatz mit Komma)?...
also:
Code:
(vl-load-com)
(defun c:inerzia)
(setq acapp (vlax-get-acad-object))
(Satzindex 0)
(while)
(setq ent (car(entsel)))
(setq ent (vlax-ename->vla-object ent) ;lo strasformo in an oggetto

(setq xy (vla-get-centroid ent)
(setq und (vla-get-principalmoments ent)

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0) ;il Variante ist ein 2 Element Array, estraggo il primo ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i) 1)
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0)
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))

Esportazione delle liste
(setq xl (vlax-get-or-create-object "excel.application"))

;apro il file prova.xls che si trova in quel path, alla pagina "inerzia" e con nil non lo vedo comparire nella taskbar
(openexcel "c:\\prova.xls" "inerzia" nil)

(putcell (strcat "a" (setq index (1+ index)))
(Einzelwert)
(closeexcel "c:\\prova.xls")
)
(princ)
)

(defun real2texcel)
(Mapcar)
Lambda (x)
(Setq a (Karte 'vl-princ-to-string (Liste x)))))
(setq a (vl-string-subst "," a))
(setq b)
)
(Reverse lst)
)
b) b)
)
Denken Sie jedoch daran, dass Sie mit der Art, wie Sie die Daten zum Export setzen, möglicherweise Präzisionsprobleme in Berechnungen haben.

wenn zum Beispiel Ihre xy-Variable den Wert hat (4224.31 11186.3), in excel so importiert werden, und die, mit dem Komma anstelle des Punktes.

die angezeigten Werte können nicht die tatsächlichen sein, wie "....die realen Zahlen werden im doppelgenauen mobilen Komma-Format gespeichert, mindestens 14 signifikante Präzisionsfiguren, trotz Compaiano solo 6 im autocad Kommandozeilenbereich."So könnte beispielsweise der Wert der obigen Variablen sein ("4224.314606319430" "11186.31810501377"), daher ist es ratsam, zu entscheiden, wie viele Dezimals verwendet und die Rtos-Funktion verwendet.


... gibt es auch einen Weg, sich nicht auf die Excel-Datei zu stützen und Produzenten und Divisionen zu machen? . .
Natürlich, wenn Sie nicht die Notwendigkeit haben, in Excel zu arbeiten, und in diesem Fall würden die Ergebnisse genau sein.
Wie ist es Formel?
 
Hallo! Danke für die Antwort, wieder:)

Gestern Ich benutzte das Programm zum ersten Mal und ich hatte genau die Probleme, über die Sie jetzt sprachen.. Ich musste alles von Hand korrigieren und ich nahm viel Zeit. .

um die Berechnungen zu verstehen, um die xls-Datei zu befestigen, die ich gerade gestern produziert habe. 2 Multiplikationen für jedes Objekt (Koordinate x durch ix, koordiniert y durch iy), die Summe dieser Multiplikationen (separate), die Summe aller Trägheitsmomente (x und y getrennt) und die Beziehung zwischen den Summen.

Danke! :finger:
 

Anhänge

Es tut mir leid, diese Lispe war im Hintergrund. Jetzt statt es mir diente und ich habe das Problem der Komma ist wirklich ärgerlich, ich verliere viel Zeit. .
Kannst du mir helfen, es zu reparieren? wissen, alles ist bequem, um einige Elemente zu ändern, ohne zufällig zu gehen

die neueste Version der Lisp ist:
(vl-load-com)
(defun c:inerzia)
(setq acapp (vlax-get-acad-object))
(Sektenindex 1)
(Indexsatz 0)
(sing)
(Sectq ent (Auto(entsel));
(setq ent (vlax-ename->vla-object ent));

(vla-put-color ent "3")

(setq xy (vla-get-centroid ent)
(Sectq i (vla-get-principalmoments ent));

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0); Variante ist ein Array von 2 Elementen, extrahieren die erste ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i)); siehe oben, ich extrahiere das zweite iy
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0) Koordinatenzentrum x
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

; die Idee war nun, ein Array zu erstellen, das alle Daten des Zyklus enthält. hier ist definitiv falsch, es wird bei dem letzten Versuch, den ich gemacht habe zu verstehen, wie es funktioniert
; (setq cord (vlax-make-safearray vlax-vbdouble '(1.3))
; (vlax-safearray-put-element cord 0 index ix)
; unten ist, wie ich es zuerst gemacht, ohne Daten einzeln zu extrahieren. Ich hatte 2 Listen, die, wenn in Exel eingefügt, wichtig waren "richtig" in 4 Spalten
(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))
; Ausfuhr von Listen
(setq xl (vlax-get-or-create-object "excel.application"))
(openexcel "c:\\users\studio 3\\\\\\cobiax\xls\inerzia.xls" "inerzia" nil)
;apro die test.xls-Datei in diesem Pfad, auf der Seite "Inertia" und mit nil Ich sehe nicht, dass es in der Taskleiste erscheint
;(putcell "a1" xy)
(putcell (strcat "a" (setq index (1+ index))) xy)
; (putcell "c1" i)
(Einzelwert)
(closeexcel "c:\\users\studio 3\\\\\cobiax\xls\\inerziaxls")

;(setq Index (1+ Index)); Zeilenzähler erhöhen
;

(princ)
Ende
zusätzlich zur Färbung des ausgewählten Gegenstandes würde ich auch den Namen der Säule hinzufügen (die dann gehen, um in die erste Spalte der Excel-Datei, auch die Zahl ist fein), um eine größere Kontrolle über alles zu haben:)

ps. Dies sind die Daten, die ich von der Extraktion erhalten habe:
276.003 2.56 0.00426667 0.0170667
101.864.00000 2.56 0,0106667 0,266667
14.69 2.56 0.00426667 0.0170667
233.791,00000 2.76 0,0170667 0.00426667
256.003,00000 767.523,00000 0.0170667 0.00426667
105.864,00000 766,523,00000 0.002133 0.002133
14.89 766.523,00000 0.002133 0.002133
233.791,00000 707.523,00000 0,266667 0,0106667
13.518.00000 106.253,00000 0.692946 329.262,00000
256.003,00000 128,652,00000 0,266667 0,0106667
129.382.00000 130.652,00000 0.0272212 443.118,00000
182.371,00000 130.652,00000 0.002133 0.002133
233.791.00000 128.652,00000 0.0170667 0.00426667
336.003,00000 201.626,00000 0,0106667 0,266667
106.564.00000 199.626.00000 0.0170667 0.00426667
Jetzt stellen Sie die richtigen, sobald ich fertig bin
 
die richtigen sind:
2,760 2,560 0,00426667 0,01706670
10.186 2,560 0,01066670 0,26666700
14,690 2,560 0,00426667 0,01706670
2.760 0,01706670 0,00426667
2,560 7,675 0,01706670 0,00426667
10,586 7,665 0,002133 0,00213333
14,890 7,665 0,002133 0,00213333
23,379 7,075 0,26666700 0,01066670
13,518 10,625 0,69294600 3,29262000
2,560 12,865 0,266700 0,01066670
12,938 13,065 0,02722120 4,43118000
18,237 13,065 0,002133 0,00213333
23.379 12,865 0,01706670 0,00426667
3,360 20,163 0,01066670 0,26666700
10,656 19,963 0,01706670 0,00426667
 
(vl-load-com)
(defun c:inerzia)
(setq acapp (vlax-get-acad-object))
(Sektenindex 1)
(Indexsatz 0)
(sing)
(setq ent (Auto (entsel "\nsel select polylinea:"))
(Befehl "region" ent)
(Sectq ent (Auto(entsel));
(setq ent (vlax-ename->vla-object ent));

(setq centroid (vlax-safearray->list (vlax-variant-value))
(Befehl "text" "g" "s" centroid 0.2 0.0 "index+1"); es funktioniert nicht, wenn ich Zitate entfernen, es geht nicht

(vla-put-color ent "3")

(setq xy (vla-get-centroid ent)
(Sectq i (vla-get-principalmoments ent));

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0); Variante ist ein Array von 2 Elementen, extrahieren die erste ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i)); siehe oben, ich extrahiere das zweite iy
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0) Koordinatenzentrum x
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

; die Idee war nun, ein Array zu erstellen, das alle Daten des Zyklus enthält. hier ist definitiv falsch, es wird bei dem letzten Versuch, den ich gemacht habe zu verstehen, wie es funktioniert
; (setq cord (vlax-make-safearray vlax-vbdouble '(1.3))
; (vlax-safearray-put-element cord 0 index ix)
; unten ist, wie ich es zuerst gemacht, ohne Daten einzeln zu extrahieren. Ich hatte 2 Listen, die, wenn in Exel eingefügt, wichtig waren "richtig" in 4 Spalten
(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))
; Ausfuhr von Listen
(setq xl (vlax-get-or-create-object "excel.application"))
(openexcel "c:\\users\studio 3\\\\\\cobiax\xls\inerzia.xls" "inerzia" nil)
;apro die test.xls-Datei in diesem Pfad, auf der Seite "Inertia" und mit nil Ich sehe nicht, dass es in der Taskleiste erscheint
;(putcell "a1" xy)
(putcell (strcat "a" (setq index (1+ index))) xy)
; (putcell "c1" i)
(Einzelwert)
(closeexcel "c:\\users\studio 3\\\\\cobiax\xls\\inerziaxls")

;(setq Index (1+ Index)); Zeilenzähler erhöhen
;

(princ)
Ende
Ich kann ihn nicht dazu bringen, den Wert der Variablen zu schreiben, dann will ich, dass er außerhalb der Säule ist. .
dann hört auf, wenn es nicht schon eine Region ist:
1 geschlossene Sequenzextraktion.
Schaffung durch 1 Region durchgeführt.
; Fehler: Art des falschen Themas: vla-object nil
 
Frohes neues Jahr!
Kann mir jemand einen Tipp geben? Ich habe versucht, mich umzusehen und noch nicht zu einer Lösung gekommen.
 
Code:
(defun c:inerzia (/ent i xy ix y)

(vl-load-com)
(Satzindex 0)
(while)
(setq ent (Auto "\nseleziona polilinea:"))
(cond)
(eq (cdr (assoc 0)) "lwpolyline")
(Befehl "region" ent ")
(setq ent (entlast)
)
(eq (cdr (assoc 0) "region")
(alert (gestrichen "das oggetto selezionato è già a regione" "\n" "\nok/invio per proseguire"))
)
(Zwischenrufe)
)

(setq ent (vlax-ename->vla-object ent));lo strasformo in a oggetto

(setq centroid (vlax-safearray->list (vlax-variant-value))

(Befehl "testo" "g" "s" centroid "0.2" "0.0" (rtos (1+ Index)
(vla-put-color ent "3")

(setq xy (vla-get-centroid ent)
(setq und (vla-get-principalmoments ent)

(setq ix (vlax-safearray-get-element (vlax-variant-value i) 0) ;il Variante ist ein 2 Element Array, estraggo il primo ix
(setq iy (vlax-safearray-get-element (vlax-variant-value i) 1)
(setq x (vlax-safearray-get-element (vlax-variant-value xy) 0)
(setq y (vlax-safearray-get-element (vlax-variant-value xy) 1)

(setq i (vlax-safearray->list (vlax-variant-value i)))
(setq xy (vlax-safearray->list (vlax-variant-value xy))

Esportazione delle liste
(setq xl (vlax-get-or-create-object "excel.application"))

(openexcel "c:\\users\studio 3\cobiax\xls\\inerzia.xls" "inerzia" nil)

;apro il file prova.xls che si trova in quel path, alla pagina "inerzia" e con nil non
;lo vedo comparire nella taskbar
(putcell (strcat "a" (setq index (1+ index))))) (real2texcel xy 4))

;
(Einzelwert) (real2texcel und 8)

(closeexcel "c:\\users\studio 3\cobiax\xls\\inerzia.xls")
)
(princ)
)


(defun real2texcel)
(Liste)
(vl-string-subst "," "." (rtos (car xy) 2 dec)
(vl-string-subst "," "." (rtos (cadr xy) 2 dec)
)
)
ein paar Dinge, um eine einfache Hilfe zu machen:
- Code mit Knopf # einschließen, Tag
Code:
, andernfalls verlieren Einbuchtungen
- wenn Sie einen Monat vor der Antwort verbringen lassen, verlieren Sie Zeit, um den Code "passen"

Hi.
 
Wow, vielen Dank, jetzt funktioniert es perfekt.. Ich studiere jetzt den Code, um etwas Neues zu lernen :))

Du hast recht, Entschuldigung. nächste Woche Text und möglicherweise sofort platziert. .

Vielen Dank:)
 
Ich habe versucht, einige Zeilen hinzuzufügen, um die Koordinaten des Zentrums des Lofts zu importieren. Ich verstehe nicht, warum ich nicht gehe:/
Ich bekomme diesen Fehler:
befehl: ; fehler: typ falsch objekt: consp!<variant ...="" 8197=""></variant>
Code:
(defun c:baricentro)

(vl-load-com)

(setq ent (Auto (entsel "\nselect polylinea perimeter:"))
(cond)
(eq (cdr) (entget ent)) (lwpolyline)
(Befehl "region" ent)
(setq ent (entlast)
)
(eq (cdr (assoc 0 (entget ent)) "region")
(alert (Strkat "das ausgewählte Objekt ist bereits eine Region" "\n" "\nok/ send to Continue"))
)
(t (alert "das ausgewählte Objekt ist keine Polylinie oder Region") (exit)
)

(setq ent (vlax-ename->vla-object ent));

(setq centroid (vlax-safearray->list (vlax-variant-value))
(vla-put-color ent "5")
(Befehl "point" centroid)
(Befehl "text" "g" "s" centroid "0.2" "0.0" "mass center")


(setq xy (vla-get-centroid ent)

(setq xl (vlax-get-or-create-object "excel.application"))

(openexcel "c:\\users\studio 3\\\\\\cobiax\xls\inerzia.xls" "inerzia" nil)

[B](Einsatzzellen (Strcat "k" "5") (real2texcel xy 4))[/B] ; das Problem ist, wer

(closeexcel "c:\\users\studio 3\cobiax\xls\\inerzia.xls")
(princ)
)

(defun real2texcel)
(Liste)
(vl-string-subst "," "." (rtos (car xy) 2 dec)
(vl-string-subst "," "." (rtos (cadr xy) 2 dec)
)
)
Danke noch mal:)
 
per completezza
Code:
(defun c:baricentro)

(vl-load-com)

(setq ent (Auto (entsel "\nsel select polylinea:"))
(cond)
(eq (cdr) (entget ent)) (lwpolyline)
(Befehl "region" ent)
(setq ent (entlast)
)
(eq (cdr (assoc 0 (entget ent)) "region")
(alert (Strkat "das ausgewählte Objekt ist bereits eine Region" "\n" "\nok/ send to Continue"))
)
(t (alert "das ausgewählte Objekt ist keine Polylinie oder Region") (exit)
)

(setq ent (vlax-ename->vla-object ent));

(setq centroid (vlax-safearray->list (vlax-variant-value))


(Befehl "text" "g" "s" centroid "0.2" "0.0" "geometrisches Zentrum")
;(setq x (car centroid))
;(setq y (cadr centroid))
;(seq z 0)
(Befehl "Punkt" centroid ")
(vla-put-color ent "5")

(setq xy (vla-get-centroid ent)
(setq xy (vlax-safearray->list (vlax-variant-value xy))

(setq xl (vlax-get-or-create-object "excel.application"))

(openexcel "c:\\users\studio 3\\\\\\cobiax\xls\inerzia.xls" "inerzia" nil)
(Einsatzzellen (Strcat "k" "5") (real2texcel xy 4))
(closeexcel "c:\\users\studio 3\\\\\cobiax\xls\\inerziaxls")
(princ)
)
 

Statistik des Forums

Themen
58.521
Beiträge
499.056
Mitglieder
104.110
Neuestes Mitglied
ChristianR

Zurzeit aktive Besucher

Keine Mitglieder online.
Zurück
Oben