7.1. Σενάρια
Τα σενάρια σάς επιτρέπουν να επαναλάβετε μια ακολουθία εντολών IQcad από ένα αρχείο κειμένου — χρήσιμα για επαναλαμβανόμενη προετοιμασία σχεδίου, ομαδικές εργασίες, επιδείξεις (demos) και καταγραφή ακολουθιών εισόδων για μεταγενέστερη χρήση.
Αυτό το κεφάλαιο τεκμηριώνει την υποστήριξη σεναρίων κειμένου .scr
και τον ενσωματωμένο διερμηνέα σεναρίων Python που συνοδεύουν το
IQcad σήμερα. Ένα τρίτο backend — Pascal — είναι ακόμη
προγραμματισμένο και θα αποκτήσει τη δική του ενότητα όταν προστεθεί.
Για πλήρη προγραμματιστική δυνατότητα (μεταβλητές, βρόχους, συναρτήσεις
και πραγματικό API σχεδίασης) μεταβείτε στην ενότητα
Σενάρια Python παρακάτω. Η μηχανή .scr που τεκμηριώνεται
πρώτη είναι ο απλούστερος μηχανισμός αναπαραγωγής εισόδων.
Σημείωση
Η μηχανή SCRIPT (.scr) αναπαράγει εισόδους χρήστη — ονόματα
εντολών, συντεταγμένες και απαντήσεις σε προτροπές — ακριβώς όπως
αν τα είχατε πληκτρολογήσει στη γραμμή εντολών. Δεν υποστηρίζει
μεταβλητές, βρόχους ή συνθήκες. Για αυτά, χρησιμοποιήστε το backend
Python (Σενάρια Python).
7.1.1. Επισκόπηση
Ένα σενάριο είναι ένα αρχείο κειμένου UTF-8 με κατάληξη .scr (το
.txt λειτουργεί επίσης) που περιέχει εισόδους γραμμής εντολών του
IQcad, μία λειτουργία ανά λογικό βήμα. Κάθε γραμμή του σεναρίου — ή
κάθε token διαχωρισμένο από κενά μέσα σε μια γραμμή — τροφοδοτείται στον
δρομολογητή με τη σειρά, ακριβώς όπως αν την είχατε πληκτρολογήσει
χειροκίνητα και πατήσει Enter. Αυτό σημαίνει ότι οτιδήποτε μπορείτε να
κάνετε διαδραστικά μπορεί να γίνει και με σενάριο, με λίγες
τεκμηριωμένες εξαιρέσεις που περιγράφονται στους
Περιορισμοί παρακάτω.
7.1.2. Εκτέλεση σεναρίων
Τρεις τρόποι κλήσης ενός σεναρίου:
Εντολή — πληκτρολογήστε
SCRIPTστη γραμμή εντολών χωρίς ορίσματα για να ανοίξετε επιλογέα αρχείου με φίλτρο*.scr/*.txt. Ή πληκτρολογήστεSCRIPT <path>για άμεση εκτέλεση συγκεκριμένου αρχείου. Οι σχετικές διαδρομές αναλύονται από τον τρέχοντα κατάλογο εργασίας· βάλτε τη διαδρομή σε εισαγωγικά αν περιέχει κενά (SCRIPT "C:\Project Setup\boilerplate.scr").Συντόμευση — το
SCRείναι η σύντομη μορφή τουSCRIPT.Μενού — Tools → Run Script… ανοίγει τον επιλογέα αρχείου.
Ενώ το σενάριο εκτελείται, κάθε γραμμή που εκτελείται απηχείται στη
γραμμή εντολών ως [script] <γραμμή> σε γκρι χρώμα ώστε να μπορείτε
να παρακολουθείτε την πρόοδο. Μια επιτυχημένη εκτέλεση τερματίζει με
Script complete. σε πράσινο.
Διακοπή σεναρίου. Το Esc ακυρώνει τόσο την τρέχουσα εντολή CAD όσο και το ίδιο το σενάριο. Το σενάριο σταματά επίσης αυτόματα στην πρώτη άγνωστη εντολή ή μη χειρισμένη εξαίρεση, αναφέροντας τον αριθμό γραμμής:
Script stopped at line 9 (dispatch failed).
7.1.3. Μορφή αρχείου
Απλό κείμενο UTF-8:
Οι γραμμές που ξεκινούν με
;είναι σχόλια (επιτρέπεται κενό στην αρχή).Τα κενά μέσα σε μια γραμμή λειτουργούν ως Enter — η γραμμή σπάζεται σε tokens διαχωρισμένα από κενά και κάθε token τροφοδοτείται στον δρομολογητή με τη σειρά. Η
LINE 0,0 10,10είναι τρεις είσοδοι ταυτόχρονα. Αντιστοιχεί στη σύμβαση σεναρίων του AutoCAD.Μια κενή γραμμή λειτουργεί ως δεξί κλικ — τερματίζει το ενεργό εργαλείο σχεδίασης (POLYLINE, αλυσίδα LINE, SPLINE κ.λπ.). Στην κενή προτροπή εντολής, χωρίς ενεργό εργαλείο, μια κενή γραμμή δεν κάνει τίποτα.
Μια συμβολοσειρά σε διπλά εισαγωγικά (
"…") είναι ένα token ακόμη και αν περιέχει κενά — χρήσιμο για διαδρομές αρχείων. Τα εισαγωγικά αφαιρούνται.
7.1.3.1. Μορφές συντεταγμένων
Μια γραμμή με συντεταγμένες τροφοδοτείται στο εργαλείο σχεδίασης που είναι ενεργό και αντιμετωπίζεται ως συνθετικό κλικ ποντικιού στο αναλυμένο παγκόσμιο σημείο. Πέντε μορφές υποστηρίζονται· δείτε Εισαγωγή Συντεταγμένων στο κεφάλαιο 10 για πλήρη αναφορά. Συνοπτικά:
X,Y— απόλυτη 2D, το Z κληρονομείται από το τελευταίο σημείο.X,Y,Z— απόλυτη 3D.@dX,dY[,dZ]— σχετική με το τελευταίο σημείο.@dist<angle— πολική σχετική, γωνία σε μοίρες.#N— αριθμός σημείου τοπογραφίας από τη βάση δεδομένων του ενεργού σχεδίου.
7.1.4. Παραδείγματα ανά κατηγορία
Τα παραδείγματα παρακάτω βρίσκονται στο samples\scripts\ και
προορίζονται ως αφετηρία για αντιγραφή και τροποποίηση. Το καθένα
εκτελείται ολόκληρο σε ένα νέο σχέδιο (εκτελέστε πρώτα το
01_setup.scr αν το αρχείο αναφέρει ονομασμένες στρώσεις).
7.1.4.1. Προετοιμασία
Δημιουργία στρώσεων, ορισμός ενεργής στρώσης, επαναφορά προβολής. Αυτή είναι η βασική προετοιμασία που προϋποθέτει κάθε άλλο σενάριο του φακέλου.
Αρχείο: samples\scripts\01_setup.scr
MAKELAYER Existing 3
MAKELAYER Design 5
MAKELAYER Annotations 7
MAKELAYER Construction 1
MAKELAYER Centerlines 2
MAKELAYER Hatching 6
CURRENTLAYER Design
PLANVIEW
VIEWTWIST 0
ZE
REGEN
Τα χρώματα στρώσεων χρησιμοποιούν τον AutoCAD Colour Index (1=κόκκινο,
2=κίτρινο, 3=πράσινο, 4=κυανό, 5=μπλε, 6=ματζέντα, 7=λευκό). Η
MAKELAYER δέχεται επίσης ονομαστικές συντομεύσεις (RED /
YELLOW / …).
7.1.4.2. Βασικές οντότητες σχεδίασης
LINE / CIRCLE / ARC / RECTANGLE / ELLIPSE / POLYLINE / SPLINE / POINT χρησιμοποιούν όλες την ίδια σύμβαση εισόδου σημείων.
Αρχείο: samples\scripts\02_primitives.scr
LINE 0,0 10,0
LINE 0,5 10,5
LINE 0,10 @10,0
CIRCLE 20,0 25,0
CIRCLE 30,0 @5<0
ARC 40,0 45,2.5 50,0
RECTANGLE 0,20 10,30
RECTANGLE 15,20 @10,10
ELLIPSE 30,25 35,25 32.5,28
; Η πολυγραμμή τερματίζεται από την κενή γραμμή παρακάτω.
PLINE 0,40 5,45 10,40 15,45 20,40
Μερικές λεπτομέρειες που ξενίζουν τους νέους χρήστες:
CIRCLE θέλει δύο παγκόσμια σημεία (κέντρο + σημείο περιφέρειας)· απλός αριθμός ακτίνας όπως
CIRCLE 0,0 10δεν γίνεται δεκτός — χρησιμοποιήστε@10,0για το σημείο περιφέρειας.RECTANGLE θέλει δύο απέναντι γωνίες.
ELLIPSE θέλει κέντρο + άκρο μεγάλου άξονα + άκρο μικρού άξονα.
POLYLINE / SPLINE σε λειτουργία αλυσίδας: κάθε σημείο προσθέτει κορυφή· μια κενή γραμμή (ή άλλο όνομα εντολής) τερματίζει την οντότητα.
7.1.4.3. Επισημείωση
Το TEXT και το MTEXT παίρνουν το περιεχόμενο μέσω προτροπής και έπειτα ένα σημείο τοποθέτησης. Χρησιμοποιήστε τη μορφή με προτροπές (μία γραμμή για την εντολή, μία για το περιεχόμενο, μία για τη θέση) ώστε κείμενο πολλών λέξεων να μη συγχέεται με τη διάσπαση σε πολλά tokens:
Αρχείο: samples\scripts\03_annotation.scr
TEXT
Hello, IQcad scripting!
0,0
MTEXT
First paragraph of MText.
Second paragraph continues on the next line.
0,5
7.1.4.4. Σκίαση
Το HATCH είναι εργαλείο επιλογής σημείων: κάθε πληκτρολογημένη
συντεταγμένη προσθέτει κορυφή στο όριο σκίασης και η κενή γραμμή
τερματίζει το όριο, οπότε η σκίαση γεμίζει την κλειστή περιοχή. Το
μοτίβο και η κλίμακα προέρχονται από τις μεταβλητές συστήματος HP*
που ορίζονται με SETVAR.
Αρχείο: samples\scripts\04_hatching.scr
SETVAR HPName SOLID
HATCH 0,0 10,0 5,8
SETVAR HPName ANSI31
SETVAR HPScale 1
HATCH 15,0 25,0 20,8
7.1.4.5. Διαστασιολόγηση
Γραμμικές, ευθυγραμμισμένες, ακτίνας, διαμέτρου και γωνιακές διαστάσεις δέχονται σημεία με τον ίδιο τρόπο όπως τα εργαλεία σχεδίασης. Η συγκεκριμένη σειρά εισόδων κάθε εντολής αναφέρεται στο Αναφορα Εντολων.
Αρχείο: samples\scripts\05_dimensions.scr
LINE 0,0 10,0
DIMLINEAR 0,0 10,0 5,-3
CIRCLE 30,5 35,5
DIMRADIUS 30,5 33,7
; Γωνία μεταξύ δύο γραμμών με κοινή κορυφή στο (0,20)
LINE 0,20 10,20
LINE 0,20 7,27
DIMANGULAR 0,20 10,20 7,27
7.1.4.6. Οντότητες πολιτικού μηχανικού
Ροές που παίρνουν εισόδους ως συντεταγμένες (αλυσίδα SURVEYPOINT) ή εκτελούνται μονομιάς (CREATESURFACE) λειτουργούν καθαρά μέσω σεναρίου. Ροές που απαιτούν κλικ σε υπάρχουσα οντότητα (π.χ. η CREATEPARCEL επιλέγει κλειστή πολυγραμμή) ελέγχονται προς το παρόν καλύτερα από το γραφικό περιβάλλον.
Αρχείο: samples\scripts\06_civil.scr
SURVEYPOINT 0,0,100.0
0,10,100.5
0,20,101.0
10,0,99.8
10,10,100.2
; Δημιουργία επιφάνειας TIN από τα σημεία τοπογραφίας που μόλις τοποθετήθηκαν
CREATESURFACE
7.1.4.7. Καθοδηγημένη περιήγηση
Μια σύντομη περιήγηση που συνδυάζει διάφορους τύπους οντοτήτων — χρήσιμη ως γρήγορο πρότυπο εκκίνησης.
Αρχείο: samples\scripts\07_tour.scr
Αυτό το παράδειγμα δημιουργεί στρώσεις, σχεδιάζει ένα ίχνος κτιρίου ως κλειστή πολυγραμμή, το διαστασιολογεί, σκιάζει το εσωτερικό και προσθέτει ετικέτα — όλα σε ένα αυτοτελές σενάριο.
7.1.5. Πρακτικές
Βασική προετοιμασία. Ξεκινήστε κάθε σενάριο με κλήση του
01_setupή κάποιου ισοδύναμου, ώστε τα ονόματα στρώσεων και οι προεπιλογές προβολής να είναι προβλέψιμα.Μία λειτουργία, ένα λογικό μπλοκ. Ομαδοποιήστε τις γραμμές κάθε λειτουργίας σχεδίασης με μια γραμμή σχολίου από πάνω· κρατήστε τις κενές γραμμές μόνο για δεξιά κλικ «τερματισμού τρέχοντος εργαλείου».
Συνδυασμός χειροκίνητης εισόδου και σεναρίου. Ένα σενάριο μπορεί να σας αφήσει με ενεργό εργαλείο — βολικό για «προετοιμάζω τα πάντα και συνεχίζετε εσείς από εκεί».
Επαναχρησιμοποίηση με αντιγραφή-επικόλληση. Τα σενάρια είναι γραμμικά· προς το παρόν, ο τρόπος επαναχρησιμοποίησης λογικής είναι η αντιγραφή της. Μεταβλητές και βρόχοι έρχονται με τα backends Python / Pascal.
7.1.6. Περιορισμοί
Συντομεύσεις απλής αριθμητικής ακτίνας / απόστασης. Η συντόμευση του AutoCAD
CIRCLE 0,0 10(απλός αριθμός για ακτίνα) δεν υποστηρίζεται — το IQcad αναμένει δύο παγκόσμια σημεία. Χρησιμοποιήστε σημείο περιφέρειας στην επιθυμητή απόσταση.Αποκλειστικοί (modal) διάλογοι που ανοίγουν από εντολή σεναρίου (π.χ.
LAYERS,MAPSETTINGS) μπλοκάρουν μέχρι να τους κλείσετε χειροκίνητα. Το σενάριο παύει και έπειτα συνεχίζει. Αποφύγετε τέτοιες εντολές σε σενάρια που εκτελούνται χωρίς επίβλεψη.Ροές «επιλογή υπάρχουσας οντότητας». Εντολές που απαιτούν κλικ σε οντότητα που υπάρχει ήδη στο σχέδιο (CREATEPARCEL, ALIGNFROMPOLYLINE κ.λπ.) λειτουργούν μόνο αν το συνθετικό κλικ του σεναρίου τύχει να πέσει στην πλησιέστερη κορυφή της σωστής οντότητας. Είναι πιο αξιόπιστο να τις χειρίζεστε από το γραφικό περιβάλλον.
7.1.7. Σενάρια Python
Το IQcad ενσωματώνει πλέον έναν πλήρη διερμηνέα Python 3.12 — ένα
ιδιωτικό, πακεταρισμένο CPython που διανέμεται στον φάκελο python\
δίπλα στο IQcad.exe. Δεν χρειάζεται καμία εγκατάσταση και δεν
απαιτείται ούτε χρησιμοποιείται Python του συστήματος.
Η Python είναι η συνιστώμενη επιλογή για οτιδήποτε πέρα από μια γραμμική
αναπαραγωγή πληκτρολογημένων εισόδων. Σε αντίθεση με το .scr, η
Python σάς δίνει μεταβλητές, βρόχους, συναρτήσεις, συνθήκες, την πλήρη
τυπική βιβλιοθήκη της Python και ένα κανονικό API σχεδίασης μέσω του
ενσωματωμένου module iqcad.
7.1.7.1. Εκτέλεση Python
PYTHON drawing_setup.py ; εκτέλεση αρχείου .py (alias: PY)
PYEVAL 2 + 2 ; αποτίμηση μίας έκφρασης, εμφάνιση αποτελέσματος
PYLOAD extensions.py ; φόρτωση αρχείου που παραμένει ενεργό
PYSCRIPTS ; λίστα καταχωρημένων εντολών Python
PYPIP install requests ; εκτέλεση pip στον ενσωματωμένο διερμηνέα
PYTHON αρχείο (alias PY) εκτελεί ένα αρχείο
.pyμία φορά.PYEVAL έκφραση αποτιμά μία έκφραση Python και εμφανίζει το αποτέλεσμα στη γραμμή εντολών — βολικό ως αριθμομηχανή ή για γρήγορη διερεύνηση του API (
PYEVAL iqcad.active_drawing.name).PYLOAD αρχείο εκτελεί ένα αρχείο και το αφήνει ενεργό για όλη τη συνεδρία: όποιες προσαρμοσμένες εντολές ή χειριστές συμβάντων καταχωρεί παραμένουν ενεργοί μέχρι να κλείσετε το IQcad. Έτσι φορτώνετε χειροκίνητα μια επέκταση.
PYSCRIPTS εμφανίζει τις εντολές που έχουν οριστεί σε Python και είναι καταχωρημένες αυτή τη στιγμή.
PYPIP ορίσματα προωθεί τα ορίσματά του στο
pipπου εκτελείται μέσα στον ενσωματωμένο διερμηνέα, ώστε να προσθέτετε πακέτα τρίτων.
Σημείωση
Το PYPIP install <pkg> κατεβάζει από το PyPI και επομένως
απαιτεί πρόσβαση στο δίκτυο. Πίσω από διακομιστή μεσολάβησης (proxy)
ή antivirus που παρεμβαίνει στο TLS, η χειραψία SSL μπορεί να
αποτύχει. Σε αυτή την περίπτωση εγκαταστήστε από αρχείο wheel εκτός
σύνδεσης (PYPIP install C:\wheels\somepkg.whl) ή περάστε τις
επιλογές proxy / εμπιστοσύνης του pip (PYPIP install --proxy
http://host:port pkg ή --trusted-host pypi.org --trusted-host
files.pythonhosted.org).
7.1.7.2. Το module iqcad
Κάθε σενάριο εκτελείται με ένα ενσωματωμένο module iqcad ήδη
εισαγμένο. Αυτό παρέχει ένα αντικειμενοστρεφές API σχεδίασης με ρίζα το
iqcad.active_drawing (ένα Drawing), καθώς και ένα σύνολο απλών
βοηθητικών συναρτήσεων.
import iqcad
dwg = iqcad.active_drawing # το τρέχον Drawing
dwg.create_layer("Design", color=5)
dwg.active_layer = "Design"
h = dwg.add_line((0, 0), (10, 0)) # επιστρέφει ένα Entity
c = dwg.add_circle((5, 0), 2.5)
h.color = 1 # δείκτης χρώματος AutoCAD (1 = κόκκινο)
h.layer = "Design"
print(h.handle, h.type_name, h.points)
print(h.get_property("length"))
dwg.zoom_extents()
dwg.invalidate()
Το Drawing προσφέρει τις add_line, add_circle, add_arc,
add_ellipse, add_rectangle, add_polyline, add_text,
add_hatch, add_survey_point, add_tunnel_section_line,
create_layer, find_by_handle, entities, selection,
zoom_extents, invalidate, και τις ιδιότητες active_layer,
name, layer_names.
Οντότητες που μπορούν να δημιουργηθούν: γραμμή, κύκλος, τόξο, έλλειψη, ορθογώνιο, πολυγραμμή, κείμενο, σκίαση, σημείο τοπογραφίας, γραμμή διατομής σήραγγας.
Κάθε Entity παρέχει τις ιδιότητες handle, type_name,
layer, color, points και τις μεθόδους delete,
get_property, set_property.
Οι ίδιες λειτουργίες είναι διαθέσιμες και ως απλές βοηθητικές
συναρτήσεις για γρήγορες εντολές μίας γραμμής — iqcad.cmd,
iqcad.write_line, iqcad.point, iqcad.add_line /
add_circle / add_arc / add_ellipse / add_rectangle /
add_text / add_hatch / add_tunnel_section_line (η καθεμία
επιστρέφει ένα handle ως συμβολοσειρά), iqcad.create_layer,
iqcad.set_active_layer, iqcad.zoom_extents:
import iqcad
iqcad.create_layer("Grid", color=8)
iqcad.set_active_layer("Grid")
for x in range(0, 101, 10):
iqcad.add_line((x, 0), (x, 100))
iqcad.zoom_extents()
7.1.7.3. Επιφάνειες
Το Drawing παρέχει τρεις μεθόδους επιφανειών: η create_surface
δημιουργεί ένα νέο TIN από μια λίστα τρισδιάστατων σημείων, η
find_surface αναζητά μια υπάρχουσα επιφάνεια με βάση το όνομα
(επιστρέφει None αν δεν βρεθεί) και η surfaces απαριθμεί όλες
τις επιφάνειες του σχεδίου.
Κάθε Surface έχει τις ιδιότητες μόνο ανάγνωσης name και
handle και τέσσερις μεθόδους:
elevation_at(x, y)— παρεμβάλλει το TIN στις δοσμένες οριζοντιογραφικές συντεταγμένες· επιστρέφειNoneόταν το σημείο βρίσκεται εκτός του τριγωνισμού.add_point(x, y, z)— εισάγει νέα κορυφή και ξαναδημιουργεί το TIN.profile_along(pts)— δειγματοληπτεί την επιφάνεια κατά μήκος μιας πολυγραμμής που ορίζεται από δισδιάστατα οριζοντιογραφικά σημεία· επιστρέφει λίστα από πλειάδες(station, z)(χιλιομετρική θέση, υψόμετρο).volume_to(other, cell=1.0)— υπολογίζει όγκους ορυγμάτων και επιχωμάτων μεταξύ αυτής της επιφάνειας και της other με μέγεθος κελιού κανάβου cell μέτρα· επιστρέφει(cut, fill)ως πλειάδα δύο αριθμών κινητής υποδιαστολής.
import iqcad
d = iqcad.active_drawing
# Δημιουργία επιφάνειας υφιστάμενου εδάφους από σημεία τοπογραφίας
eg = d.create_surface("EG", [(0, 0, 10), (10, 0, 11), (5, 8, 10.5)])
z = eg.elevation_at(4, 2) # float, ή None αν είναι εκτός του TIN
prof = eg.profile_along([(0, 0), (50, 0)]) # [(station, z), ...]
# Σύγκριση με επιφάνεια τελικής διαμόρφωσης που υπάρχει ήδη στο σχέδιο
fg = d.find_surface("FG")
if fg is not None:
cut, fill = eg.volume_to(fg)
iqcad.write_line(f"cut={cut:.1f} fill={fill:.1f}")
7.1.7.4. Χαράξεις
Το Drawing παρέχει τρεις μεθόδους χαράξεων: η
create_alignment_from_polyline δημιουργεί νέα χάραξη από μια
υπάρχουσα οντότητα πολυγραμμής (που εντοπίζεται μέσω handle), η
find_alignment αναζητά μια χάραξη με βάση το όνομα (επιστρέφει
None αν δεν βρεθεί) και η alignments απαριθμεί κάθε χάραξη του
σχεδίου.
Κάθε Alignment έχει τις ιδιότητες μόνο ανάγνωσης name,
handle, length, start_station και end_station και πέντε
μεθόδους:
point_at_station(s)— επιστρέφει το παγκόσμιο σημείο(x, y, z)στη χιλιομετρική θέση s.direction_at_station(s)— αζιμούθιο στη χιλιομετρική θέση s, σε ακτίνια.elevation_at_station(s)— υψόμετρο μηκοτομής στη χιλιομετρική θέση s (από τη συνδεδεμένη κατακόρυφη χάραξη, αν υπάρχει).station_offset_at(x, y)— πλησιέστερη χιλιομετρική θέση και προσημασμένη απόσταση (offset) για ένα οριζοντιογραφικό σημείο· η απόσταση είναι αρνητική αριστερά και θετική δεξιά της κατεύθυνσης της χάραξης.elements()— λίστα από λεξικά που περιγράφουν τα στοιχεία της οριζόντιας γεωμετρίας· κάθε λεξικό έχει τα κλειδιάkind("line"ή"arc"),length,start_stationκαιradius(0για ευθύγραμμα τμήματα).
import iqcad
d = iqcad.active_drawing
# Δημιουργία χάραξης από πολυγραμμή που υπάρχει ήδη στο σχέδιο.
# Με radius=0 δημιουργούνται ευθύγραμμα τμήματα μέσα από κάθε κορυφή·
# μη μηδενική ακτίνα στρογγυλεύει τις εσωτερικές γωνίες με καμπύλες.
al = d.create_alignment_from_polyline(poly_handle, radius=25.0, name="CL-1")
s, off = al.station_offset_at(x, y) # χιλιομετρική θέση + offset (-αριστερά / +δεξιά)
x, y, z = al.point_at_station(120.0)
z = al.elevation_at_station(120.0) # από τη μηκοτομή
for el in al.elements():
print(el["kind"], el["length"])
# Διάσχιση όλων των χαράξεων του σχεδίου
for a in d.alignments():
print(a.name, f"{a.length:.1f} m")
Σημείωση
Η create_alignment_from_polyline με radius=0 (η προεπιλογή)
δημιουργεί ευθύγραμμα τμήματα μέσα από κάθε κορυφή, συμπεριλαμβανομένων
πολυγραμμών με 3 ή περισσότερες κορυφές. Δώστε μη μηδενική
radius (≥ 0.01) μόνο αν θέλετε οι εσωτερικές γωνίες να
στρογγυλευτούν με καμπύλες.
Πλήρης υπογραφή:
create_alignment_from_polyline(handle, radius=0, name="", use_z=False, vcurve_len=0)
Το use_z=True δημιουργεί τη μηκοτομή από τα υψόμετρα κάθε κορυφής
της πολυγραμμής — το ισοδύναμο, μέσω σεναρίου, της αποδοχής της
προτροπής Create vertical profile from vertex elevations?
(«Δημιουργία μηκοτομής από τα υψόμετρα των κορυφών;») της εντολής
AFP. Το vcurve_len ορίζει το μήκος κατακόρυφης καμπύλης που
εφαρμόζεται σε κάθε εσωτερικό PVI (το 0, η προεπιλογή, διατηρεί
γωνιακή μηκοτομή). Το ισοδύναμο σε PascalScript είναι το
CreateAlignmentFromPolylineZ(polyHandle, radius, name, vcurveLen)
(δείτε Σενάρια Pascal), το οποίο δημιουργεί πάντα τη μηκοτομή
από τα υψόμετρα των κορυφών.
7.1.7.5. Προσαρμοσμένες εντολές
Διακοσμήστε μια συνάρτηση με @iqcad.command για να καταχωρήσετε μια
νέα εντολή IQcad. Μόλις καταχωρηθεί (φορτώστε την με PYLOAD ή
τοποθετήστε την στον φάκελο αυτόματης φόρτωσης) εμφανίζεται στο HELP
και μπορεί να πληκτρολογηθεί στην προτροπή εντολής όπως κάθε
ενσωματωμένη εντολή. Τα ορίσματα της εντολής φτάνουν ως
συμβολοσειρές — μετατρέψτε τα μόνοι σας.
import iqcad
@iqcad.command("GRID", aliases="GR", category="Drafting",
description="Draw an N x N construction grid")
def grid(n, spacing):
n = int(n) # τα ορίσματα είναι συμβολοσειρές — μετατρέψτε τα
step = float(spacing)
for i in range(n + 1):
iqcad.add_line((0, i * step), (n * step, i * step))
iqcad.add_line((i * step, 0), (i * step, n * step))
iqcad.zoom_extents()
Έπειτα, στην προτροπή: GRID 5 10.
7.1.7.6. Συμβάντα
Καταχωρήστε χειριστές που ενεργοποιούνται όταν αλλάζει το σχέδιο. Οι χειριστές εκτελούνται σύγχρονα στο κύριο νήμα· μια εξαίρεση σε χειριστή καταγράφεται στη γραμμή εντολών και δεν είναι μοιραία.
import iqcad
@iqcad.on_entity_created
def created(entity):
iqcad.write_line(f"created {entity.type_name} {entity.handle}")
@iqcad.on_entity_deleted
def deleted(entity):
iqcad.write_line(f"deleted {entity.handle}")
@iqcad.on_selection_changed
def selected(entities):
iqcad.write_line(f"selection: {len(entities)} object(s)")
Οι χειριστές μπορούν επίσης να συνδεθούν και να αποσυνδεθούν ρητά με
iqcad.on(event, func) και iqcad.off(event, func).
7.1.7.7. Μακροχρόνια σενάρια
Ένας σφιχτός βρόχος Python μπλοκάρει το περιβάλλον χρήσης του IQcad για
όλη τη διάρκειά του. Σε κάθε βρόχο που μπορεί να διαρκέσει αρκετά,
καλείτε περιοδικά την iqcad.yield_(): επεξεργάζεται την ουρά
μηνυμάτων ώστε το παράθυρο να παραμένει αποκριτικό και επιτρέπει στο
Esc να ακυρώσει το σενάριο (κάτι που προκαλεί KeyboardInterrupt
στον κώδικά σας).
import iqcad
try:
for i in range(100000):
iqcad.add_circle((i, 0), 1)
if i % 100 == 0:
iqcad.yield_() # προσέξτε την κάτω παύλα στο τέλος
except KeyboardInterrupt:
iqcad.write_line("cancelled by user")
Σημείωση
Η μέθοδος γράφεται iqcad.yield_() με κάτω παύλα στο τέλος, επειδή
το yield είναι δεσμευμένη λέξη στην Python.
7.1.7.8. Εγκατεστημένες επεκτάσεις (αυτόματη φόρτωση) και εμπιστοσύνη
Κάθε αρχείο .py που τοποθετείται στο %APPDATA%\IQcad\scripts\
φορτώνεται αυτόματα κατά την εκκίνηση — εκεί κρατάτε τις προσωπικές σας
εντολές και τους χειριστές συμβάντων.
Επειδή ο κώδικας που φορτώνεται αυτόματα εκτελείται χωρίς ερώτηση, το
IQcad εμφανίζει έναν διάλογο εμπιστοσύνης περιεχομένου την πρώτη
φορά που συναντά ένα σενάριο (και ξανά όποτε αλλάζει το περιεχόμενό
του). Ο διάλογος δείχνει το hash SHA-256 του αρχείου και προσφέρει τις
επιλογές Always (Πάντα), This session (Αυτή τη συνεδρία) ή
Never (Ποτέ)· η επιλογή σας αποθηκεύεται στο
%APPDATA%\IQcad\scripts\script_trust.json. Ένα σενάριο που δεν
έχετε εμπιστευτεί ποτέ δεν εκτελείται.
7.1.7.9. Stubs τύπων και υποστήριξη IDE
Για αυτόματη συμπλήρωση και έλεγχο τύπων στον επεξεργαστή σας, δείξτε
του το stub τύπων samples\python\iqcad.pyi (ή τον ενσωματωμένο
διερμηνέα στο python\). Μαζί του διανέμονται έτοιμα παραδείγματα:
samples\python\01_primitives.py— σχεδίαση γεωμετρίας με το API.samples\python\02_command.py— καταχώρηση προσαρμοσμένης εντολής.samples\python\03_events.py— σύνδεση χειριστών συμβάντων.
7.1.7.10. Γνωστοί περιορισμοί (Python)
Τα ορίσματα εντολών είναι συμβολοσειρές. Το
@iqcad.commandπερνά κάθε όρισμα ωςstr· μετατρέψτε σεint/floatμέσα στη συνάρτησή σας.Περιορισμένη κάλυψη συμβάντων. Προς το παρόν υπάρχουν μόνο τα συμβάντα δημιουργίας οντότητας, διαγραφής οντότητας και αλλαγής επιλογής. Δεν υπάρχει ακόμη
on_entity_modifiedούτε συμβάντα κύκλου ζωής σχεδίου ή εντολών.Χωρίς εκτέλεση στο παρασκήνιο / ασύγχρονη εκτέλεση. Τα σενάρια εκτελούνται στο νήμα του περιβάλλοντος χρήσης· δεν υπάρχει ακόμη API εργασιών παρασκηνίου
iqcad.background(). Χρησιμοποιήστε τηνiqcad.yield_()για να διατηρείτε τους μακροσκελείς βρόχους αποκριτικούς.
7.1.8. Μελλοντικές γλώσσες σεναρίων
Η μηχανή SCR είναι σκόπιμα ελάχιστη — είναι πιστή αναπαραγωγή πληκτρολογημένων εισόδων. Για πιο σύνθετη αυτοματοποίηση:
Python — διαθέσιμη τώρα. Ένας διερμηνέας Python 3.12 ενσωματωμένος στο IQcad, με συνδέσεις (bindings) στο API σχεδίασης, στον δρομολογητή εντολών και στο μοντέλο οντοτήτων, που υποστηρίζει πλήρη έλεγχο ροής, υπολογισμούς, συναρτήσεις ορισμένες από τον χρήστη και εξωτερικές βιβλιοθήκες. Δείτε Σενάρια Python παραπάνω.
Pascal — προγραμματισμένη. Ένας host σεναρίων Free Pascal που χρησιμοποιεί τον ίδιο μεταγλωττιστή με τον οποίο δημιουργείται το IQcad, για χρήστες που ήδη γράφουν επεκτάσεις σε Pascal και θέλουν την ίδια σύνταξη για σενάρια. Όταν προστεθεί, αυτό το κεφάλαιο θα αποκτήσει ενότητα Σενάρια Pascal.