Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Programmerläuterung

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:  Programmerläuterung (1220 mal gelesen)
EnricoB
Mitglied


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

Beiträge: 1
Registriert: 19.04.2005

erstellt am: 19. Apr. 2005 21:47    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 erst mal,
ich hab da ein programm das mir hilft die summe aller linienlängen zu bestimmen. da ich von dieser art der programmierung rein gar keine ahnung habe (das aber gern ändern würde), wäre es schön wenn sich einer die mühe machen könnte mir mal jede zeile des programms zu kommentieren (so das auch ich es verstehe :-)).
außerdem scheint es ein problem zu sein, geeignete literatur zum thema lisp-programmierung zu bekommen. auch hier wäre ich dankbar für ein paar hilfreiche tips (wenns geht gleich mir ISBN-nummer)
so nun genug erzählt
vielen dank schon mal im voraus für eure hilfe !!

(defun c:linelength (/ ssAusw intLen vla-Obj reaSumPLine Layercollection )
(vl-load-com)
(setq reaSumLine 0.0
reaSumPLine 0.0
Layercollection (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
)
(if (setq ssAusw (ssget "X" '((0 . "LINE,LWPOLYLINE")(410 . "Model"))))
(repeat (setq intLen (sslength ssAusw))
(setq vla-Obj (vlax-ename->vla-object (ssname ssAusw (setq intLen (1- intLen)))))
(if (= (vla-get-freeze (vla-item Layercollection (vla-get-layer vla-obj))) :vlax-false)
(if (= (vla-get-ObjectName vla-Obj) "AcDbLine")
(setq reaSumLine (+ reaSumLine (vla-get-length vla-Obj)))
(setq reaSumPLine (+ reaSumPLine (vlax-curve-getDistAtPoint vla-Obj (vlax-curve-getEndPoint vla-Obj))))
)
)
)
)
(if ssAusw
(progn
(princ (strcat "\nLänge aller Linien:    " (rtos (/ reaSumLine 1000) 2 3) " km"))
(princ (strcat "\nLänge aller Polylinien: " (rtos (/ reaSumPLine 1000) 2 3) " km"))
(princ (strcat "\n---------------------------------"))
(princ (strcat "\n          Gesamtlänge: " (rtos (/ (+ reaSumLine reaSumPLine) 1000) 2 3) " km"))
)
(princ "\nEs sind noch keine Linien im Modellbereich vorhanden.")
)
(princ)
)


 

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

CADchup
Ehrenmitglied V.I.P. h.c.




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

Beiträge: 3329
Registriert: 14.03.2001

Sicher ist, dass nichts sicher ist. Selbst das nicht.
Joachim Ringelnatz

erstellt am: 19. Apr. 2005 22:07    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 EnricoB 10 Unities + Antwort hilfreich

Hi,

hier die Kommentare:

Code:

(defun c:linelength ; so heißt die Funktion
      (/ ssAusw intLen vla-Obj reaSumPLine Layercollection)
; benutzte Variablen lokalisieren
  (vl-load-com) ; ActiveX-Schnittstelle aktivieren
  (setq reaSumLine 0.0 ; Variable mit 0.0 initialisieren
reaSumPLine 0.0 ; dito
Layercollection (vla-get-layers
  (vla-get-activedocument (vlax-get-acad-object))
) ; die Layercollection der aktuellen Zeichnung holen
  )
  (if (setq ssAusw (ssget "X" '((0 . "LINE,LWPOLYLINE") (410 . "Model"))))
; Auswahlsatz über alle Linien und Plinien im Modell bilden
    (repeat (setq intLen (sslength ssAusw))
; das folgende sooft wiederholen, wie Elemente im Auswahlsatz sind
      (setq vla-Obj (vlax-ename->vla-object
      (ssname ssAusw (setq intLen (1- intLen)))
    )
      ) ; Element in VLA-Objekt umwandeln
      (if (= (vla-get-freeze
      (vla-item Layercollection (vla-get-layer vla-obj))
    )
    :vlax-false
  ) ;kucken, dass der Layer des Objekt nicht gefroren ist
(if (= (vla-get-ObjectName vla-Obj) "AcDbLine")
; wenn es eine Linie ist
  (setq reaSumLine (+ reaSumLine (vla-get-length vla-Obj)))
; die Länge der Linie zu reaSumLine addieren
  (setq reaSumPLine
(+ reaSumPLine
    (vlax-curve-getDistAtPoint
      vla-Obj
      (vlax-curve-getEndPoint vla-Obj)
    )
)
  ) ; ansonsten dürfte es eine Plinie sein, also Länge ermitteln und addieren
) ; if schließen
      ) ; noch ein if schließen
    ) ; das repeat schließen
  ) ; das if des Auswahlsatzes schließen
  (if ssAusw ; falls ein Auswahlsatz da ist
    (progn ; die folgenden Ausdrücke in ein "dann" zusammenpacken
      (princ (strcat "\nLänge aller Linien:    "
    (rtos (/ reaSumLine 1000) 2 3)
    " km"
    )
      ) ; dem Anwender zeigen
      (princ (strcat "\nLänge aller Polylinien: "
    (rtos (/ reaSumPLine 1000) 2 3)
    " km"
    )
      )
      (princ (strcat "\n---------------------------------"))
      (princ
(strcat "\n          Gesamtlänge: "
(rtos (/ (+ reaSumLine reaSumPLine) 1000) 2 3)
" km"
)
      )
    ) ; progn schließen
    (princ
      "\nEs sind noch keine Linien im Modellbereich vorhanden."
    ) ; dem Anwender zeigen
  ) ; if schließen
  (princ) ; leise beenden
) ; Schluss der Funktion


Gruß
CADchup

------------------
www.cadditions.de

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

SebZ
Mitglied
Bauingenieur Tiefbau


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

Beiträge: 189
Registriert: 17.10.2004

AutoCAD 2010 Civil 3D DACH
WinXP Professional 2002 SP3
MS Office 2007
Intel Core2Duo 2.80 GHz, 3.00 GB RAM

erstellt am: 21. Apr. 2005 17: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 Nur für EnricoB 10 Unities + Antwort hilfreich

... und den online-Klassiker über Lisp findest du hier:
http://www.autolisp-tutorial.mapcar.net/ (für Einsteiger)
http://www.autolisp.mapcar.net/index.html (für Fortgeschrittene)

sorry, hatte zuerst bloß den link auf das Fortgeschrittenen-Tutorial angegeben.

------------------
Gruß
SebZ

[Diese Nachricht wurde von SebZ am 21. Apr. 2005 editiert.]

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