Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  parametrische Skripte mit CADCAL - ein Beispiel

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:  parametrische Skripte mit CADCAL - ein Beispiel (16 mal gelesen)
archtools
Mitglied



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

Beiträge: 944
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 02. Jul. 2024 19:30    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

Ein Beispiel dafür, wie mit CADCAL ein ganz normales Zeichnungsskript parametrisiert werden kann. Mit nur einer einzigen trivialen Skriptzeile! Zum Testen bitte die aktuellste (die vom 2. Juli 2024 oder neuer) Beta-Version von www.archtools.de/cadcal.zip downloaden.

Nehmen wir ein einfaches Standard-Skript wie das hier (einfach per Copy&Paste in Notepad kopieren und als "MeinSkript.SCR" speichern):
;;***** Skript Beginn
(if (not laenge) (setq laenge 80))
(if (not breite) (setq breite 120))
;;
(if (not ORIGIN) (setq ORIGIN '(0 0 0)))
(setq p1 ORIGIN)
(setq p2 (list (+ (car p1) laenge) (cadr p1)))
(setq p3 (list (car p2) (+ (cadr p1) breite)))
(setq p4 (list (car p1) (cadr p3)))
._line
!p1
!p2
!p3
!p4
_cl
._line !p1 !p3
._line !p2 !p4
;;***** Skript Ende

Im Skript sind wie immer ein- oder mehrzeilige Befehls-Aufrufe möglich (sowas wie ._LINE), CAL Aufrufe (egal ob CADCAL oder GeomCAL) und auch Lisp-Funktionen. Wenn man mit Variablen arbeiten will, empfiehlt sich entweder Lisp wie in diesem Beispiel oder ein CAL-Ausdruck (hier wäre es z.B. CAL P1=ORIGIN)

Dieses Skript kann man mit dem normalen Skript-Befehl von AutoCAD oder BricsCAD aufrufen, und dann wird es mit den im Skript stehenden Default-Werten für LAENGE und BREITE ausgeführt, und es entsteht die entsprechende Zeichnung. Wenn man LAENGE und BREITE vor dem Skript-Aufruf andere Werte zuweist, dann wird das Skript diese nutzen und eine entsprechend abweichende Zeichnung erstellen.

Nun kann man mit Hilfe von CADCAL diese Zuweisung der Parameter LAENGE und BREITE so wie in diesem Skript vornehmen:

;;***** Skript Beginn
CAL import(LAENGE,80,BREITE,120)
;;
(if (not ORIGIN) (setq ORIGIN '(0 0 0)))
(setq p1 ORIGIN)
(setq p2 (list (+ (car p1) laenge) (cadr p1)))
(setq p3 (list (car p2) (+ (cadr p1) breite)))
(setq p4 (list (car p1) (cadr p3)))
._line
!p1
!p2
!p3
!p4
_cl
._line !p1 !p3
._line !p2 !p4
;;***** Skript Ende

Der Unterschied ist einfach: statt der Lisp-Zuweisung der Defaultwerte an die Variablen LAENGE und BREITE steht nur noch diese Zeile drin:
CAL import(LAENGE,80,BREITE,120)
Damit passiert genau das gleiche: Die Variablen erhalten Default-Werte.

Übrigens: ORIGIN ist der für CALSCRIPT vordefinierte Blockeinfügepunkt. Die Zeile
(if (not ORIGIN) (setq ORIGIN '(0 0 0)))
ist also für das CALSCRIPT Skript auch unnötig. Man braucht sie nur für den Aufruf mit dem Standard-Skript Befehl.

Und jetzt kommt Magie ins Spiel: wenn man das Skript mit der IMPORT-Funktion von CADCAL mit dem Befehl CALSCRIPT ausführen lässt, dann wird man wie bei einer Blockeinfügung nach Einfügepunkt, Drehung und den Werten für die Import-Variablen gefragt, und CALSCRIPT erzeugt die Zeichnung ensprechend.

Und dieses mit CALSCRIPT erzeugte Zeichnungsobjekt kann jederzeit nachträglich mit dem Befehl CC-MODIFY verändert werden. Man kann auch beliebige Kopien davon erzeugen, und jede Kopie bleibt editierbar. Man kann eine DWG mit solchen CALSCRIPT-Objekten außer Haus geben, und der Empfänger benötigt nichts anderes als das kostenfreie CADCAL, und schon kann auch er die CALSCRIPT-Objekte parametrisch editieren.

Diese Änderung der Parameter eines CALSCRIPT-Objekts funktioniert natürlich auch per Lisp:
Erst mal ein CALSCRIPT-Objekt auswählen und einer Variablen zuweisen:
(setq en (car (entsel))
Und dann kann man mit
(cc-property-get en 'BREITE)
die gewünschte Eigenschaft auslesen. Und mit
(cc-property-set 'BREITE 120)
ändert man diesen Wert im Objekt.
Alle Parameter erfährt man mithilfe des Aufrufs:
(cc-property-get en nil)
Und mehrere Parameter gleichzeitg ändert man mit
cc-property-set en '((BREITE 120) (LAENGE 80)) nil)

Und man kann sogar Animationen erzeugen:
(setq br 150 la 50)
(repeat 100 (cc-property-set en (list (list 'BREITE br) (list 'LAENGE la)) nil) (setq br (- br 1) la (+ la 1)))

Viel Spaß damit, und lasst mich (am besten hier im Forum) wissen, was Ihr davon haltet, und welche Ideen für Zusatzfunktionen Ihr Euch wünscht. Und Rückmeldungen über die Funktionalität in AutoCAD wären hilfreich, denn ich arbeite unter BricsCAD.

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)2024 CAD.de | Impressum | Datenschutz