7.2. Αναφορά σεναρίων Python
Αυτό το κεφάλαιο είναι η πλήρης αναφορά για το ενσωματωμένο module
Python iqcad του IQcad: κάθε κλάση, μέθοδος, ιδιότητα, decorator και
συμβάν, με διαγράμματα κλάσεων σε μορφή κειμένου και πλήρη παραδείγματα.
Για μια εισαγωγή (εκτέλεση σεναρίων, μοντέλο εμπιστοσύνης, προσαρμοσμένες εντολές, η συνολική εικόνα) δείτε Σενάρια Python στο κεφάλαιο 18. Αυτό το κεφάλαιο είναι η αναφορά API στην οποία ανατρέχετε αφού γνωρίζετε τα βασικά.
7.2.1. Εισαγωγή
Το IQcad ενσωματώνει έναν ιδιωτικό, συνοδευτικό διερμηνέα Python 3.12
που διανέμεται στον φάκελο python\ δίπλα στο IQcad.exe. Δεν
χρειάζεται καμία εγκατάσταση και δεν απαιτείται ούτε χρησιμοποιείται
Python του συστήματος. Κάθε σενάριο εκτελείται με το ενσωματωμένο module
iqcad ήδη εισηγμένο, το οποίο εκθέτει ένα αντικειμενοστραφές API
σχεδίασης με ρίζα το iqcad.active_drawing, μαζί με ένα σύνολο απλών
βοηθητικών συναρτήσεων.
Η αναφορά που ακολουθεί παράγεται από το αρχείο stub τύπων
samples\python\iqcad.pyi και αντιστοιχεί ακριβώς σε αυτό. Ρυθμίστε
το IDE σας να χρησιμοποιεί αυτό το stub (ή τον συνοδευτικό διερμηνέα)
για αυτόματη συμπλήρωση.
7.2.2. Εκτέλεση Python
Πέντε σημεία εισόδου από τη γραμμή εντολών ελέγχουν τον host της Python:
Εντολή |
Περιγραφή |
|---|---|
|
Εκτελεί ένα αρχείο |
|
Υπολογίζει μία έκφραση Python και εμφανίζει το αποτέλεσμα στη
γραμμή εντολών (π.χ. |
|
Εκτελεί ένα αρχείο και το αφήνει μόνιμο για τη συνεδρία: όσες
εντολές |
|
Εμφανίζει τις εντολές που έχουν οριστεί σε Python και είναι καταχωρισμένες αυτή τη στιγμή. |
|
Προωθεί τα ορίσματα στο |
Προειδοποίηση
Το 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.2.2.1. Αυτόματη φόρτωση και εμπιστοσύνη
Κάθε αρχείο .py που τοποθετείται στο %APPDATA%\IQcad\scripts\
φορτώνεται αυτόματα κατά την εκκίνηση. Επειδή ο κώδικας που φορτώνεται
αυτόματα εκτελείται χωρίς ερώτηση, το IQcad εμφανίζει έναν
διάλογο εμπιστοσύνης περιεχομένου την πρώτη φορά που συναντά ένα
σενάριο (και ξανά κάθε φορά που αλλάζει το hash SHA-256 του περιεχομένου
του). Ο διάλογος προσφέρει Always, This session ή Never· η
επιλογή σας απομνημονεύεται στο
%APPDATA%\IQcad\scripts\script_trust.json. Ένα σενάριο που δεν
έχετε εμπιστευτεί ποτέ δεν εκτελείται.
7.2.2.2. Απόκριση και Esc
Τα σενάρια εκτελούνται στο νήμα του GUI, οπότε ένας σφιχτός βρόχος
μπλοκάρει το περιβάλλον χρήσης για όλη τη διάρκειά του. Σε κάθε βρόχο
που μπορεί να διαρκέσει αρκετά, καλείτε περιοδικά το iqcad.yield_():
επεξεργάζεται την ουρά μηνυμάτων ώστε το παράθυρο να παραμένει
αποκρίσιμο και επιτρέπει στο Esc να ακυρώσει το σενάριο (εγείροντας
ένα KeyboardInterrupt που μπορεί να συλληφθεί). Η μέθοδος γράφεται
με κάτω παύλα στο τέλος επειδή το yield είναι δεσμευμένη λέξη της
Python.
7.2.2.3. Stubs τύπων
Για αυτόματη συμπλήρωση και έλεγχο τύπων, ρυθμίστε τον επεξεργαστή σας
να χρησιμοποιεί το stub samples\python\iqcad.pyi ή τον συνοδευτικό
διερμηνέα στο python\.
7.2.3. Το αντικειμενικό μοντέλο
Το module iqcad είναι η ρίζα. Περιέχει τις απλές βοηθητικές
συναρτήσεις, τους decorators εντολών/συμβάντων και το δυναμικό
χαρακτηριστικό active_drawing. Το active_drawing επιλύεται εκ
νέου σε κάθε πρόσβαση (PEP 562) και επιστρέφει το τρέχον Drawing.
Το Drawing είναι το εργοστάσιο (factory) για όλα τα υπόλοιπα:
δημιουργεί και επιστρέφει αντικείμενα Entity, Surface και
Alignment.
iqcad (module)
|
|-- flat helpers ....... cmd, write_line, point,
| add_line/add_circle/add_arc/add_ellipse/
| add_rectangle/add_hatch/
| add_tunnel_section_line (return handle str),
| create_layer, set_active_layer, zoom_extents
|-- decorators ......... command, on_entity_created,
| on_entity_deleted, on_selection_changed,
| on / off, unregister_command
|-- yield_() ........... pump UI / allow Esc
|
`-- active_drawing ---> Drawing (resolves fresh each access)
|
| create/returns
|
+---------------+----------------+
| | |
v v v
Entity Surface Alignment
(geometry) (TIN) (horizontal/vertical)
add_line/circle/arc/ellipse/rectangle/polyline/
text/hatch/survey_point/tunnel_section_line --> Entity
create_surface / find_surface / surfaces --> Surface
create_alignment_from_polyline /
find_alignment / alignments --> Alignment
Σημείωση
Το iqcad.add_line(...) (απλή συνάρτηση) επιστρέφει συμβολοσειρά
handle, ενώ το iqcad.active_drawing.add_line(...) (OO) επιστρέφει
ένα Entity. Το add_polyline υπάρχει μόνο στο OO API: δεν
υπάρχει απλή συνάρτηση iqcad.add_polyline.
7.2.4. Αναφορά κλάσεων
7.2.4.1. Drawing
Λαμβάνεται από το iqcad.active_drawing. Το εργοστάσιο για
οντότητες, επιφάνειες και χαράξεις.
Μέλος |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
ιδιότητα (ανάγνωση/εγγραφή) |
|
Όνομα της τρέχουσας στρώσης. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Όνομα σχεδίου. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Όλα τα ονόματα στρώσεων. |
|
|
|
Γραμμή από το σημείο a στο b. |
|
|
|
Κύκλος, κέντρο c, ακτίνα r. |
|
|
|
Κείμενο στη θέση pos με ύψος height. |
|
|
|
Πολυγραμμή μέσω των pts (μόνο OO). |
|
|
|
Σημείο τοπογραφίας με αριθμό number. |
|
|
|
Τόξο τριών σημείων. |
|
|
|
Έλλειψη με ημιάξονες. |
|
|
|
Ορθογώνιο από απέναντι γωνίες. |
|
|
|
Σκίαση που γεμίζει το όριο points. |
|
|
|
Γραμμή διατομής σήραγγας. |
|
|
|
Δημιουργεί στρώση· το color είναι δείκτης ACI. |
|
|
|
Αναζήτηση οντότητας με βάση το handle. |
|
|
|
Όλες οι οντότητες του σχεδίου. |
|
|
|
Οι τρέχουσες επιλεγμένες οντότητες. |
|
|
|
Εστίαση στην έκταση του σχεδίου. |
|
|
|
Επιβολή επανασχεδίασης. |
|
|
|
Όλες οι επιφάνειες. |
|
|
|
Αναζήτηση επιφάνειας με βάση το όνομα. |
|
|
|
Κατασκευή TIN από σημεία |
|
|
|
Όλες οι χαράξεις. |
|
|
|
Αναζήτηση χάραξης με βάση το όνομα. |
|
|
|
Κατασκευή χάραξης από οντότητα πολυγραμμής. |
7.2.4.2. Entity
Ένα μεμονωμένο αντικείμενο σχεδίου που επιστρέφεται από τις μεθόδους
OO add_*.
Μέλος |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
ιδιότητα (μόνο ανάγνωση) |
|
Μόνιμο handle. |
|
ιδιότητα (μόνο ανάγνωση) |
|
|
|
ιδιότητα (ανάγνωση/εγγραφή) |
|
Όνομα στρώσης. |
|
ιδιότητα (ανάγνωση/εγγραφή) |
|
Δείκτης χρώματος ACI. |
|
ιδιότητα (ανάγνωση/εγγραφή) |
|
Σημεία ορισμού. |
|
|
|
Αφαιρεί την οντότητα. Κάθε μεταγενέστερη πρόσβαση εγείρει
|
|
|
|
Ανάγνωση ιδιότητας με τύπο (π.χ. |
|
|
|
Εγγραφή ιδιότητας με τύπο. |
Συνήθη ονόματα για get_property / set_property: κύκλος
'Radius'· έλλειψη 'RadiusX' / 'RadiusY'· κείμενο 'Text' /
'Height'· σημείο τοπογραφίας 'PointNumber' / 'Elevation'.
7.2.4.3. Surface
Μια επιφάνεια TIN που δημιουργείται με το Drawing.create_surface (ή
εντοπίζεται μέσω των find_surface / surfaces).
Μέλος |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
ιδιότητα (μόνο ανάγνωση) |
|
Όνομα επιφάνειας. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Μόνιμο handle. |
|
|
|
Παρεμβαλλόμενο Z, ή |
|
|
|
Εισάγει κορυφή και ανακατασκευάζει το TIN. |
|
|
|
Μηκοτομή: λίστα από |
|
|
|
Προσέγγιση με κάνναβο |
7.2.4.4. Alignment
Μια οριζοντιογραφική χάραξη που δημιουργείται με το
create_alignment_from_polyline (ή εντοπίζεται μέσω των
find_alignment / alignments).
Μέλος |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
ιδιότητα (μόνο ανάγνωση) |
|
Όνομα χάραξης. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Μόνιμο handle. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Συνολικό μήκος. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Χιλιομετρική θέση αρχής. |
|
ιδιότητα (μόνο ανάγνωση) |
|
Χιλιομετρική θέση τέλους. |
|
|
|
|
|
|
|
Αζιμούθιο στο s, σε ακτίνια. |
|
|
|
Υψόμετρο μηκοτομής στο s. |
|
|
|
|
|
|
|
Γεωμετρικά στοιχεία· κλειδιά |
7.2.4.5. Συναρτήσεις επιπέδου module
Οι απλές βοηθητικές συναρτήσεις και το δυναμικό χαρακτηριστικό
active_drawing.
Μέλος |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
χαρακτηριστικό (μόνο ανάγνωση) |
|
Το τρέχον σχέδιο· επιλύεται εκ νέου σε κάθε πρόσβαση. |
|
|
|
Εκτελεί μια συμβολοσειρά γραμμής εντολών. |
|
|
|
Εμφανίζει μια γραμμή στη γραμμή εντολών. |
|
|
|
Κατασκευάζει μια πλειάδα (tuple) σημείου. |
|
|
|
Απλή γραμμή· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλός κύκλος· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλό κείμενο· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλό τόξο· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλή έλλειψη· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλό ορθογώνιο· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλή σκίαση· επιστρέφει συμβολοσειρά handle. |
|
|
|
Απλή γραμμή διατομής σήραγγας· επιστρέφει συμβολοσειρά handle. |
|
|
|
Δημιουργεί στρώση (χρώμα ACI color). |
|
|
|
Ορίζει την τρέχουσα στρώση. |
|
|
|
Εστίαση στην έκταση του σχεδίου. |
|
|
|
Αφαιρεί μια καταχωρισμένη προσαρμοσμένη εντολή. |
|
|
|
Συνδέει χειριστή συμβάντος με βάση το όνομα. |
|
|
|
Αποσυνδέει χειριστή συμβάντος. |
|
|
|
Επεξεργάζεται την ουρά του UI· εγείρει |
|
|
|
Εμφανίζει πλαίσιο μηνύματος. |
|
|
|
Ερώτηση Ναι/Όχι· |
|
|
|
Εισαγωγή κειμένου· |
|
|
|
Επιλογέας αρχείου· |
7.2.5. Decorators και συμβάντα
7.2.5.1. Προσαρμοσμένες εντολές
Διακοσμήστε μια συνάρτηση με @iqcad.command για να καταχωρίσετε μια
νέα εντολή IQcad. Φορτώστε την με PYLOAD (ή τοποθετήστε την στον
φάκελο αυτόματης φόρτωσης) και μπορείτε να την πληκτρολογείτε στη
γραμμή εντολών όπως κάθε ενσωματωμένη εντολή.
@iqcad.command("NAME", aliases="N", category="Tools",
description="What it does")
def handler(*args):
...
Προειδοποίηση
Τα ορίσματα των εντολών φτάνουν ως συμβολοσειρές. Μετατρέψτε τα
μόνοι σας (int(args[0]), float(args[1])).
Αφαιρέστε μια καταχώριση με iqcad.unregister_command("NAME").
7.2.5.2. Συμβάντα
Τρεις decorators συμβάντων καταχωρίζουν χειριστές που ενεργοποιούνται όταν αλλάζει το σχέδιο:
Decorator |
Ο χειριστής λαμβάνει |
Ενεργοποιείται όταν |
|---|---|---|
|
|
Δημιουργείται μια οντότητα. |
|
|
Διαγράφεται μια οντότητα. |
|
|
Αλλάζει η επιλογή. |
Οι χειριστές μπορούν επίσης να συνδεθούν και να αποσυνδεθούν ρητά με
iqcad.on(event, func) και iqcad.off(event, func).
Σημείωση
Οι χειριστές εκτελούνται σύγχρονα στο νήμα του GUI. Μια εξαίρεση
μέσα σε χειριστή καταγράφεται στη γραμμή εντολών και δεν είναι
μοιραία. Δεν υπάρχουν ακόμη on_entity_modified, ούτε συμβάντα
κύκλου ζωής σχεδίου ή εντολών.
7.2.6. Διάλογοι
Τέσσερις συναρτήσεις διαλόγων επιπέδου module ζητούν είσοδο από τον
χρήστη. Είναι κοινές με τον host της Pascal (δείτε
Σενάρια Pascal). Όταν εκτελούνται χωρίς γραφικό περιβάλλον –
ή όπου δεν υπάρχει εγκατεστημένος πάροχος GUI – επιστρέφουν ασφαλείς
προεπιλογές ώστε ένα σενάριο χωρίς επιτήρηση να μη μπλοκάρει ποτέ: το
confirm επιστρέφει False, το input_string επιστρέφει
None και το select_file επιστρέφει ''.
Συνάρτηση |
Υπογραφή |
Επιστρέφει |
Περιγραφή |
|---|---|---|---|
|
|
|
Εμφανίζει πλαίσιο μηνύματος με το text. |
|
|
|
Ερώτηση Ναι/Όχι· |
|
|
|
Εισαγωγή κειμένου μίας γραμμής· |
|
|
|
Επιλογέας αρχείου· |
import iqcad
iqcad.show_message("Starting import.")
if iqcad.confirm("Proceed?"):
name = iqcad.input_string("Layer name", "Design")
if name is not None:
path = iqcad.select_file("Open points file", "CSV files|*.csv", False)
if path:
iqcad.write_line("import %s onto %s" % (path, name))
7.2.7. Παραδείγματα
Πλήρη παραδείγματα σεναρίων διανέμονται στο samples\python\:
samples\python\01_primitives.py– σχεδίαση γεωμετρίας με το API.samples\python\02_command.py– καταχώριση προσαρμοσμένης εντολής.samples\python\03_events.py– σύνδεση χειριστών συμβάντων.samples\python\04_surface.py– επιφάνειες TIN: δημιουργία, ερωτήματα, μηκοτομή, όγκος.samples\python\05_alignment.py– χαράξεις από πολυγραμμή.samples\python\06_civil_workflow.py– χιλιομέτρηση κατά μήκος χάραξης με ταυτόχρονη δειγματοληψία επιφάνειας (το κορυφαίο παράδειγμα).
7.2.7.1. Επιφάνειες
Δημιουργήστε ένα TIN από αρχικά σημεία, κάντε παρεμβολή σε αυτό, πάρτε
μια μηκοτομή και στη συνέχεια συγκρίνετε δύο επιφάνειες ως προς τον όγκο
(04_surface.py):
import iqcad
d = iqcad.active_drawing
eg = d.create_surface("EG", [
(0, 0, 10.0), (50, 0, 11.0), (50, 40, 12.5),
(0, 40, 10.5), (25, 20, 11.2),
])
z = eg.elevation_at(25, 20) # float, ή None εκτός του TIN
eg.add_point(25, 40, 11.8) # ανακατασκευάζει το TIN
for station, pz in eg.profile_along([(0, 20), (50, 20)]):
iqcad.write_line("STA %.3f Z %.3f" % (station, pz))
fg = d.create_surface("FG", [
(0, 0, 11.0), (50, 0, 12.0), (50, 40, 13.5),
(0, 40, 11.5), (25, 20, 12.2),
])
cut, fill = eg.volume_to(fg, cell=1.0) # όρυγμα όπου το EG είναι πάνω από το FG
iqcad.write_line("cut=%.2f fill=%.2f" % (cut, fill))
7.2.7.2. Χαράξεις
Κατασκευάστε μια χάραξη από πολυγραμμή (απαιτείται ακτίνα συναρμογής για
3+ κορυφές) και στη συνέχεια υποβάλετε ερωτήματα σε αυτή
(05_alignment.py):
import iqcad
d = iqcad.active_drawing
# Το add_polyline υπάρχει μόνο στο OO API· κρατήστε το handle για τη δημιουργία της χάραξης.
ph = d.add_polyline([(0, 0), (100, 0), (100, 50), (160, 50)], False).handle
al = d.create_alignment_from_polyline(ph, 20.0, "CL-1")
iqcad.write_line("len=%.3f STA %.3f..%.3f" % (
al.length, al.start_station, al.end_station))
x, y, z = al.point_at_station(50.0)
d_rad = al.direction_at_station(50.0)
s, off = al.station_offset_at(50.0, 5.0) # απόσταση -αριστερά / +δεξιά
for el in al.elements():
iqcad.write_line("%s len=%.3f R=%.3f" % (
el["kind"], el["length"], el["radius"]))
7.2.7.3. Συνδυασμένη ροή εργασιών πολιτικού μηχανικού
Το κορυφαίο παράδειγμα: προχωρήστε βηματικά τη χιλιομέτρηση κατά μήκος
μιας χάραξης και πάρτε δείγμα της επιφάνειας εδάφους σε κάθε
χιλιομετρική θέση (06_civil_workflow.py):
import iqcad
d = iqcad.active_drawing
surf = d.create_surface("EG", [
(-20, -20, 10.0), (180, -20, 14.0), (180, 80, 16.0),
(-20, 80, 11.0), (80, 25, 13.0),
])
ph = d.add_polyline([(0, 0), (100, 0), (100, 50), (160, 50)], False).handle
al = d.create_alignment_from_polyline(ph, 20.0, "CL-1")
step = 10.0
s = al.start_station
while s <= al.end_station + 1e-6:
x, y, z = al.point_at_station(s)
gz = surf.elevation_at(x, y) # None εκτός του TIN
iqcad.write_line("STA %.1f surf=%.3f" % (
s, gz if gz is not None else float('nan')))
s += step
7.2.8. Διάλογοι και πλαίσια μηνυμάτων
Τα σενάρια μπορούν να εμφανίσουν διάλογο παραμέτρων ή πλαίσιο μηνύματος μέσω του ίδιου UI που κατασκευάζει ο host και χρησιμοποιεί το SDK προσθέτων (επομένως δεν υπάρχει εξάρτηση από Tk/Qt).
Το iqcad.create_dialog(title) επιστρέφει ένα αντικείμενο διαλόγου·
περιγράψτε τα πεδία, καλέστε execute() και έπειτα διαβάστε τις
τιμές:
dlg = iqcad.create_dialog("Draw a shape")
dlg.add_choice("shape", "Shape", ["Rectangle", "Circle"], 0)
dlg.add_float("size", "Size (m)", 10.0, decimals=2) # min=0, max=0 → χωρίς όρια
dlg.add_text ("layer", "Layer name", "SHAPES")
dlg.add_color("color", "Color", 0x00B400) # 0x00BBGGRR
dlg.add_bool ("filled","Filled?", False)
if dlg.execute():
shape = dlg.get_choice("shape") # δείκτης επιλεγμένου στοιχείου
size = dlg.get_float("size")
layer = dlg.get_text("layer")
color = dlg.get_color("color")
filled = dlg.get_bool("filled")
Δημιουργοί πεδίων: add_text, add_multiline, add_int(…, min=0,
max=0), add_float(…, min=0.0, max=0.0, decimals=3), add_bool,
add_choice(key, label, options_list, default_index=0), add_file(…,
filter='', save=False), add_folder, add_color. Συναρτήσεις
ανάγνωσης: get_text (επιστρέφει επίσης το κείμενο της επιλεγμένης
επιλογής), get_int, get_float, get_bool, get_choice
(δείκτης), get_color. Το execute() επιστρέφει False αν ο
χρήστης ακυρώσει.
Το iqcad.message_box(text, caption="", buttons=iqcad.MB_OK,
icon=iqcad.MB_ICON_NONE) εμφανίζει πλαίσιο μηνύματος και επιστρέφει το
κουμπί που πατήθηκε. Κουμπιά: MB_OK, MB_OKCANCEL, MB_YESNO,
MB_YESNOCANCEL· εικονίδια: MB_ICON_NONE/INFO/WARNING/ERROR/QUESTION·
αποτελέσματα: MB_RESULT_OK/CANCEL/YES/NO (ένα πλαίσιο που κλείνει
χωρίς επιλογή επιστρέφει MB_RESULT_CANCEL).
if iqcad.message_box("Delete selection?", "Confirm",
iqcad.MB_YESNO, iqcad.MB_ICON_QUESTION) == iqcad.MB_RESULT_YES:
pass # … συνέχεια με τη διαγραφή
7.2.9. Ζωντανές φόρμες
Ενώ ένας διάλογος είναι modal, μια ζωντανή φόρμα είναι ένα μη modal παράθυρο εργαλείου, που ανήκει στον host και παραμένει ανοιχτό: κατασκευάζετε στοιχεία ελέγχου, κρατάτε τα handles τους, τα τροποποιείτε κατά την εκτέλεση και αντιδράτε στις ενέργειες του χρήστη μέσω ενός αντικειμένου χειριστή. Είναι η όψη, για τα σενάρια, των ζωντανών παραθύρων εργαλείων του SDK προσθέτων.
Το iqcad.create_form(title, handler=None) επιστρέφει μια ζωντανή
φόρμα. Κατασκευάστε τη με add_button, add_label, add_text,
add_multiline, add_int, add_float, add_bool,
add_choice, add_color, add_file, add_folder,
add_list (καθώς και begin_row / end_row, find_control)
και έπειτα καλέστε show(). Κάθε add_* επιστρέφει ένα αντικείμενο
στοιχείου ελέγχου με μεθόδους πρόσβασης get_* / set_*,
set_caption / set_enabled / set_visible, καθώς και τις
λειτουργίες λίστας append_line / clear / item_count /
get_selected / set_selected. Η φόρμα προσφέρει επίσης
hide(), close(), is_visible() και set_title().
Ο προαιρετικός handler είναι οποιοδήποτε αντικείμενο του οποίου τις
μεθόδους on_button_clicked(key), on_value_changed(key) και
on_form_closed() καλεί ο host (στο κύριο νήμα) όταν ο χρήστης
αλληλεπιδρά με τη φόρμα:
class Handler:
def __init__(self, form):
self.form = form
def on_button_clicked(self, key):
if key == "add":
n = self.form.find_control("n").get_int()
self.form.find_control("log").append_line("Added: %d" % n)
self.form.find_control("status").set_text("Last added: %d" % n)
form = iqcad.create_form("Form demo")
form.add_label("status", "Click Add to append a value")
form.add_int("n", "Value", 1, 0, 1000)
form.add_button("add", "Add")
form.add_list("log", "Log")
form.handler = Handler(form) # ή περάστε handler= στο create_form
form.show()
Το iqcad.create_panel(title, handler=None) είναι ίδιο με το
create_form αλλά προσαρτά το πάνελ στο κύριο παράθυρο —
εμφανίζεται ως καρτέλα στη δεξιά λωρίδα προσάρτησης αντί για αιωρούμενο
παράθυρο. Ο δημιουργός, τα αντικείμενα στοιχείων ελέγχου και η
διεπαφή του χειριστή είναι ακριβώς τα ίδια· διαφέρει μόνο ο περιέκτης:
panel = iqcad.create_panel("Form demo", handler) # προσαρτημένο δίδυμο του create_form
7.2.10. Κορδέλα και μενού
Τα iqcad.add_ribbon_button(group, command, caption, hint='', icon='',
large=True) και iqcad.add_menu_item(submenu, command, caption)
προσθέτουν στοιχεία GUI που εκτελούν μια καταχωρισμένη εντολή — ένα
κουμπί στην καρτέλα κορδέλας Plugins και ένα στοιχείο στο μενού
Plugins. Τα σενάρια εμφανίζονται κάτω από μία ενιαία ομάδα/υπομενού
Scripts· το icon είναι απόλυτη διαδρομή προς αρχείο PNG
(παραλείψτε το για γενικό εικονίδιο). Δείτε Συνεισφορές σε κορδέλα και μενού.
@iqcad.command("GREET")
def greet():
iqcad.message_box("Hello!", "Greet", iqcad.MB_OK, iqcad.MB_ICON_INFO)
iqcad.add_ribbon_button("Demo", "GREET", "Greet", hint="Say hello", large=True)
iqcad.add_menu_item("Demo", "GREET", "Greet")
7.2.11. Περιορισμοί και συμβουλές
Τα ορίσματα εντολών είναι συμβολοσειρές. Το
@iqcad.commandπερνά κάθε όρισμα ωςstr· μετατρέψτε σεint/floatμέσα στη συνάρτησή σας.Το ``elevation_at`` επιστρέφει None εκτός του TIN. Ελέγχετε πάντα το αποτέλεσμα πριν το χρησιμοποιήσετε σε αριθμητικές πράξεις.
Ακτίνα συναρμογής χάραξης. Το
create_alignment_from_polylineμεradius=0(η προεπιλογή) κατασκευάζει ευθείες εφαπτόμενες μέσω κάθε κορυφής, ακόμη και σε πολυγραμμές με 3 ή περισσότερες κορυφές. Δώστε μη μηδενική ακτίνα (τουλάχιστον0.01) μόνο αν θέλετε οι εσωτερικές γωνίες να στρογγυλευτούν με τόξα.Πρόσημο απόστασης. Το
station_offset_atεπιστρέφει απόσταση που είναι αρνητική προς τα αριστερά και θετική προς τα δεξιά ως προς τη φορά της χάραξης.Περιορισμένη κάλυψη συμβάντων. Σήμερα υπάρχουν μόνο τα συμβάντα δημιουργίας οντότητας, διαγραφής οντότητας και αλλαγής επιλογής. Δεν υπάρχουν ακόμη
on_entity_modified, ούτε συμβάντα κύκλου ζωής σχεδίου ή εντολών.Χωρίς εκτέλεση στο παρασκήνιο / ασύγχρονη εκτέλεση. Τα σενάρια εκτελούνται στο νήμα του GUI· χρησιμοποιήστε το
iqcad.yield_()ώστε οι μεγάλοι βρόχοι να παραμένουν αποκρίσιμοι και να ακυρώνονται με Esc.