#| Ersteller/Creator: Patrick Weber Datum/Date: 2011-02-08 Diskussion/Thread: http://ww3.cad.de/foren/ubb/Forum29/HTML/003794.shtml Umschifft elegant das Problem der langen bzw. unmöglichen Ladezeiten von sehr umfangreichen Punktwolken, indem eine STEP-Datei erzeugt wird, die vom System deutlich schneller geladen werden kann. |# (in-package :custom) (use-package :OLI) (sd-defdialog 'ascii-3d-to-step-dialog :dialog-title '(sd-multi-lang-string "ASCII(3D)-STEP-Convertor" :german "ASCII(3D)-STEP-Konverter") :toolbox-button :force :dialog-control :parallel :variables '( (InFile :value-type :filename :title (sd-multi-lang-string "ASCII file-->" :german "ASCII-Datei-->") :direction :input :prompt-text (sd-multi-lang-string "Specify source file" :german "Quelldatei angeben") :filename-incl-path t :initialPattern "*.*" :next-variable 'OutFile ) (OutFile :value-type :filename :title (sd-multi-lang-string "STEP file<--" :german "STEP-Datei<--") :prompt-text (sd-multi-lang-string "Specify destination file (STEP AP214)" :german "Zieldatei angeben (STEP AP214)") :direction :output :if-exist :confirm-overwrite :initialdirectory (sd-get-current-working-directory) :filename-incl-path t :initialPattern "*.stp" ) ("-") (Delimiter :value-type :string :initial-value " " :proposals '(" " "," ";" "_" "tabulator") :title (sd-multi-lang-string "delimiter" :german "Separatorzeichen") :prompt-text (sd-multi-lang-string "Specify delimiter" :german "Separatorzeichen wÌhlen") ) (Offset :value-type :integer :title (sd-multi-lang-string "Offset" :german "Offset") :prompt-text (sd-multi-lang-string "column offset (column where your x-component is located)" :german "Spaltenversatz (Spalte, in der die x-Komponente steht)") :initial-value 0 ) ("-") (Load_after :value-type :boolean :initial-value nil :title (sd-multi-lang-string "load after" :german "anschlieÞend laden") :after-input (if Load_after (sd-set-variable-status 'Load_check :enable t) (sd-set-variable-status 'Load_check :enable nil)) ) (Load_check :value-type :boolean :initial-value nil :initial-enable nil :title (sd-multi-lang-string "check part" :german "TeileprÏfung") ) ) :local-functions '() :ok-action '(let () (if (string-equal Delimiter "tabulator") (setq Delimiter #\Tab)) (ascii-3d-to-step (first InFile) (first OutFile) Delimiter Offset) (if Load_after (if Load_check (sd-call-cmds (step_import :check-part :yes :filename (first OutFile))) (sd-call-cmds (step_import :check-part :no :filename (first OutFile))) ) ) ) ) (defun ascii-3d-to-step (Ascii_filename Step_filename Delimiter Offset) (let ( (k 0) ) (sd-show-console-window) (when (probe-file (sd-convert-filename-to-platform Step_filename)) (delete-file (sd-convert-filename-to-platform Step_filename)) ) (format t "~%ASCII(3D)-STEP-Convertor~%~%CTRL-C to abort~%~%") (with-open-file (FI Step_filename :direction :output :if-exists :overwrite :if-does-not-exist :create) (format FI "ISO-10303-21;~%HEADER;~%FILE_DESCRIPTION((''),'2;1');~%FILE_NAME('cloud.stp','2000-01-01T00:00:00',(''),(''),~%'',~%'','');~%FILE_SCHEMA(('AUTOMOTIVE_DESIGN { 1 0 10303 214 1 1 1 1 }'));~%ENDSEC;~%DATA;~%") (with-open-file (Ascii_file Ascii_filename :direction :input :if-does-not-exist nil) (loop while (setq Line_ (read-line Ascii_file nil)) do (let ((xyz_ (sd-string-split Line_ Delimiter))) (setq k (+ k 10)) (format FI "#~A=CARTESIAN_POINT('',(~A,~A,~A));~%" k (nth (+ 0 Offset) xyz_) (nth (+ 1 Offset) xyz_) (nth (+ 2 Offset) xyz_)) (if (integerp (/ k 1000)) (format t "Step 1/2: Writing coordinates: line ~A~A" (/ k 10) #\Return) ) ) ) ) (setq k (+ k 10)) (format t "~%") (format FI "#~A=GEOMETRIC_CURVE_SET('',(~%" k) (loop for i from 10 to (- k 10) by 10 do (progn (if (< i (- k 10)) (format FI "#~A,~%" i) (format FI "#~A~%" i) ) (if (integerp (/ i 1000)) (format t "Step 2/2: Writing GEOMETRIC_CURVE_SET: line ~A~A" (/ i 10) #\Return) ) ) ) (format FI "));~%") (setq k (+ k 10)) (format FI "#~A=CARTESIAN_POINT('',(0.,0.,0.));~%" k) (format FI "#~A=DIRECTION('',(0.,0.,1.));~%" (+ k 10)) (format FI "#~A=DIRECTION('',(1.,0.,0.));~%" (+ k 20)) (format FI "#~A=AXIS2_PLACEMENT_3D('',#~A,#~A,#~A);~%" (+ k 30) k (+ k 10) (+ k 20)) (format FI "#~A=APPLICATION_CONTEXT(' ');~%" (+ k 40)) (format FI "#~A=APPLICATION_PROTOCOL_DEFINITION(' ','automotive_design',1998,~%#~A);~%" (+ k 50) (+ k 40)) (format FI "#~A=PRODUCT_CONTEXT('',#~A,'mechanical');~%" (+ k 60) (+ k 40)) (format FI "#~A=PRODUCT_DEFINITION_CONTEXT('part definition',#~A,'design');~%" (+ k 70)(+ k 40)) (format FI "#~A=PRODUCT('CloudT1','CloudT1','',(#~A));~%" (+ k 80) (+ k 60)) (format FI "#~A=PRODUCT_RELATED_PRODUCT_CATEGORY('part',' ',(#~A));~%" (+ k 90) (+ k 80)) (format FI "#~A=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#~A~%,.BOUGHT.);~%" (+ k 100) (+ k 80)) (format FI "#~A=PRODUCT_DEFINITION('',' ',#~A,#~A);~%" (+ k 110) (+ k 100) (+ k 70)) (format FI "#~A=PRODUCT_DEFINITION_SHAPE('','',#~A);~%" (+ k 120) (+ k 110)) (format FI "#~A=DIMENSIONAL_EXPONENTS(1.,0.,0.,0.,0.,0.,0.);~%" (+ k 130)) (format FI "#~A=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.);~%" (+ k 140)) (format FI "#~A=DIMENSIONAL_EXPONENTS(0.,0.,0.,0.,0.,0.,0.);~%" (+ k 150)) (format FI "#~A=(LENGTH_UNIT() NAMED_UNIT(*) SI_UNIT(.MILLI.,.METRE.));~%" (+ k 160)) (format FI "#~A=(NAMED_UNIT(*) PLANE_ANGLE_UNIT() SI_UNIT($,.RADIAN.));~%" (+ k 170)) (format FI "#~A=(NAMED_UNIT(*) SI_UNIT($,.STERADIAN.) SOLID_ANGLE_UNIT());~%" (+ k 180)) (format FI "#~A=(GEOMETRIC_REPRESENTATION_CONTEXT(3) ~%GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#~A)) ~%GLOBAL_UNIT_ASSIGNED_CONTEXT((#~A,#~A,#~A)) ~%REPRESENTATION_CONTEXT('',''));~%" (+ k 190) (+ k 200) (+ k 160) (+ k 170) (+ k 180)) (format FI "#~A=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(1.E-6),#~A,~%'distance_accuracy_value','maximum gap value');~%" (+ k 200)(+ k 160)) (format FI "#~A=GEOMETRICALLY_BOUNDED_WIREFRAME_SHAPE_REPRESENTATION('',(#~A~%,#~A),#~A);~%" (+ k 210) (+ k 30) (- k 10) (+ k 190)) (format FI "#~A=SHAPE_DEFINITION_REPRESENTATION(#~A,#~A);~%" (+ k 220) (+ k 120) (+ k 210)) (format FI "#~A=COLOUR_RGB('',0.6,0.6,0.6);~%" (+ k 230)) (format FI "#~A=DRAUGHTING_PRE_DEFINED_CURVE_FONT('continuous');~%" (+ k 240)) (format FI "#~A=CURVE_STYLE('',#~A,POSITIVE_LENGTH_MEASURE(0.1),#~A);~%" (+ k 250) (+ k 240) (+ k 230)) (format FI "#~A=PRESENTATION_STYLE_ASSIGNMENT((#~A));~%" (+ k 260) (+ k 250)) (format FI "#~A=STYLED_ITEM('',(#~A),#~A);~%" (+ k 270) (+ k 260) (- k 10)) (format FI "#~A=DRAUGHTING_MODEL('',(#~A),#~A);~%" (+ k 280) (+ k 270) (+ k 190)) (format FI "ENDSEC;~%END-ISO-10303-21;~%") (format t "~%Done.~%") ) ) (sd-hide-console-window) )