乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 2|回复: 2

[编程交流] 视口网格lisp帮助

[复制链接]

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 19:58:53 | 显示全部楼层 |阅读模式
您好,我正在为vieport网格使用此lisp。我想改变坐标文本在X轴上的旋转,就像附加照片一样(上下)。
 
  1. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;;; Koordinatenbeschriftung fόr Ansichtsfenster.lsp   V1.2                                            ;;;
  3. ;;; entstanden aus cvp.lsp                                                                        ;;;
  4. ;;; Erweitert und όberarbeitet von Udo Hόbner - www.CAD-Huebner.de fόr Autodesk                       ;;;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6. ;;; Lisp-Datei zum Zeichnen von Koordinaten an Layout-Ansichtsfenster                                 ;;;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  8. ;  erstellt 12/03  Th.J.
  9. ;           06/07  einfaches Errorhandling hinzugefuegt
  10. ;           06/07  Fehler bei Abweichung von Koordinatenrichtung und Winkeleinheiten beseitigt
  11. ;
  12. ;           07/07  Udo Hόbner / Vorgabewerte neu berechnet, Unterfunkion fόr Koordinatenanschrieb
  13. ;                             / Gruppierung des Anschriebs
  14. ;           16.07.07 Gitterkreuze zusδtzlich einfόgen
  15. ;           09/07  Auswahl, ob Anschreiben innen oder aussen vom AF
  16. ;           10/07 Voreinstellung der Textgrφίe auf Textsize (wenn nicht fix im Stil)
  17. ;                 Benutzung einer neuen Funktion statt #VPT_BOX
  18. ;           12/07 Viewdirbestimmung zur Erkennung von nicht "Normalen" WKS Ansichten
  19. ;                 und Ausgabwe eines Hinweises
  20. ;           Mφgliche Erweiterungen: Reaktor am AF, bei F Δnderung Neuerstellung der Beschriftung
  21. ;           Koordinatenkreuze
  22. ;  Vorhaben: waehle Ansichtsfenter und zeichne im Plotbereich an das AF die Koordinaten (Linien und Werte)
  23. ;            des dargestellten (Lage)planausschnittes
  24. ;
  25. ;
  26. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  27.      
  28. (vl-load-com)
  29. (prompt "\nKoordinatenanschrieb fόr Ansichtsfenster fόr AutoCAD Civil 3D - Start mit CVP")
  30. ;
  31. ; Hauptprogramm
  32. ;
  33. (defun C:cvp ( / alterror sblip scmd sosmode al anz x axl zen_af zen_af_x zen_af_y zen_modw zen_mod_xw zen_mod_yw
  34.             br_af h_af h_mod affakt br_mod alpha liun_af_x liob_af_x reun_af_x reob_af_x liun_af_y liob_af_y
  35.             reun_af_y reob_af_y element punkte liun_mb liob_mb reun_mb reob_mb liun_mb_x liob_mb_x reun_mb_x
  36.             reob_mb_x liun_mb_y liob_mb_y reun_mb_y reob_mb_y startx starty delta_l delta_m delta_a cy_af
  37.             richtg textht textri textausri cx_mb minx maxx delta_m1 cx_af ctext p1 p2 pt cy_mb miny maxy
  38.             elemlist temp digits viewdir
  39.                )
  40. (setq alterror *error*)
  41. (setq *error* my_error)
  42. (command "_undo" "_mark")
  43. ; globale Variablen
  44. (setq  *AD:TEXTHOEHE* (GETVAR "TEXTSIZE")
  45.       *AD:LINIENLAENGE* (* 3.0 *AD:TEXTHOEHE*)
  46. )      
  47. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  48. ;;; Unterprogramme
  49. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  50. (defun createCvp (p1 p2 textausri pt textht textri ctext / elelist)
  51.            (command "_LINE" p1 p2 "")
  52.            (setq elelist (list (entlast)))
  53.            (if (> (cdr (assoc 40 (tblsearch "Style" (getvar "textstyle")))) 0.0); wenn aktueller Textstil keine feste Texthφhe
  54.       (command "_TEXT" "_Justify" textausri pt textri ctext)
  55.              (command "_TEXT" "_Justify" textausri pt *AD:TEXTHOEHE* textri ctext)
  56.     )
  57.            (setq elelist (cons (entlast) elelist)) ; Rόckgabe er Liste
  58.                ;(COMMAND "_-INSERT" "CVP" p1 1.0  (angtos richtg) (itoa cx_mb))
  59.     ;(CreateBLockinPaperspace "CVPRECHTS" p1 richtg (itoa cx_mb))
  60. )
  61. (prompt "\nCoordinate Labeling for Viewports")
  62. ;
  63. ; Sichern und Setzen einiger Systremvariable
  64. ;
  65. (setq sblip (getvar "blipmode"))
  66. (setq scmde (getvar "cmdecho"))
  67. (setq sosmode (getvar "osmode"))
  68. (setq sangbase (getvar "angbase"))
  69. (setq sangdir (getvar "angdir"))
  70. (setq saunits (getvar "aunits"))
  71. (setvar "blipmode" 0)
  72. (setvar "cmdecho" 0)
  73. (setvar "osmode" 0)
  74. (setvar "angbase" 0)
  75. (setvar "angdir" 0)
  76. (setvar "aunits" 0)
  77. ;  Aufforderung zur Ansichtsfensterwahl
  78. (setq anz 0 al (ssget '((0 . "VIEWPORT"))))
  79. (if al (setq anz (sslength al)) (prompt "\nNo Viewport selected !"))
  80. (setq x 0)
  81. (while (< x anz)
  82.   (setq axl (entget (ssname al x)))
  83.   ;
  84.   ; pruefen ob ansichtsfenster
  85.   ;
  86.   (if (= "VIEWPORT" (cdr (assoc 0 axl)))
  87.       (progn
  88.          (setq zen_af (cdr (assoc 10 axl)))
  89.          (setq zen_af_x (car zen_af))
  90.          (setq zen_af_y (cadr zen_af))
  91.          (setq zen_modw (cdr (assoc 12 axl)))
  92.          (setq zen_mod_xw (car zen_modw))
  93.          (setq zen_mod_yw (cadr zen_modw))
  94.          (setq br_af (cdr (assoc 40 axl)))
  95.          (setq h_af (cdr (assoc 41 axl)))
  96.          (setq h_mod (cdr (assoc 45 axl)))
  97.          (setq affakt (/ h_af h_mod))
  98.          (setq br_mod (/ br_af affakt))
  99.          (setq alpha (cdr (assoc 51 axl)))
  100.          ;
  101.          ;
  102.          ; eckpunkte ansichtsfenster (annahme nicht gedreht)
  103.          ;
  104.          (setq liun_af_x (- zen_af_x (/ br_af 2.)))
  105.          (setq liob_af_x (- zen_af_x (/ br_af 2.)))
  106.          (setq reun_af_x (+ zen_af_x (/ br_af 2.)))
  107.          (setq reob_af_x (+ zen_af_x (/ br_af 2.)))
  108.          (setq liun_af_y (- zen_af_y (/ h_af 2.)))
  109.          (setq liob_af_y (+ zen_af_y (/ h_af 2.)))
  110.          (setq reun_af_y (- zen_af_y (/ h_af 2.)))
  111.          (setq reob_af_y (+ zen_af_y (/ h_af 2.)))
  112.          ;
  113.          ;  OK bis hier, nun Koordinaten der Eckpunkte fuer Modellbereich ermitteln
  114.          ;
  115.          ; dafόr haben wir im lisp forum etwas gefunden
  116.          ;
  117.          (setq element (cdr (assoc -1 axl)))
  118.          ;(SETQ punkte (#VPT_BOX element))
  119.          ; neue Routine soll obige Routine ersetzen
  120.   (setq Punkte (MSAnsichtsfensterkoordinaten element))
  121.          ;
  122.          ; punkte extrahieren
  123.          ;
  124.          (setq liun_mb (nth 0 punkte))
  125.          (setq reun_mb (nth 1 punkte))
  126.          (setq reob_mb (nth 2 punkte))
  127.          (setq liob_mb (nth 3 punkte))
  128.          (setq liun_mb_x (car liun_mb))
  129.          (setq liun_mb_y (cadr liun_mb))
  130.          (setq liob_mb_x (car liob_mb))
  131.          (setq liob_mb_y (cadr liob_mb))
  132.          (setq reun_mb_x (car reun_mb))
  133.          (setq reun_mb_y (cadr reun_mb))
  134.          (setq reob_mb_x (car reob_mb))
  135.          (setq reob_mb_y (cadr reob_mb))
  136.          ;
  137.          ; Ausgabe Extremwerte und Abfrage Startwerte und Schrittweiten
  138.          ;
  139.          (if (= :vlax-true (vlax-get-property (vlax-ename->vla-object (ssname al x)) "clipped"))
  140.            (prompt "Das Ansichtsfenster besitzt eine Zuschneideumgrenzung, das Ergebnis kann unerwartet ausfallen")
  141.          )
  142.   (setq viewdir  (vlax-safearray->list (vlax-variant-value (vlax-get-property (vlax-ename->vla-object (ssname al x)) "Direction"))))
  143.          (if (not (and (equal (car  viewdir) 0.0 1.0E-5)
  144.                 (equal (cadr viewdir) 0.0 1.0E-5)
  145.                   )
  146.       )
  147.            (alert "The Viewport is not in plan. Result will be wrong!")
  148.          )
  149.   (prompt (strcat "\nViewport Coordinates for " (itoa (1+ x)) ". Viewport"))
  150.          (prompt "\nMinimal- and Maximalvalue of x:")
  151.          (princ (setq minx (min liun_mb_x liob_mb_x reun_mb_x reob_mb_x)))
  152.          (princ "  ")
  153.          (princ "  ")
  154.          (princ (setq maxx (max liun_mb_x liob_mb_x reun_mb_x reob_mb_x)))
  155.          (prompt "\nMinimal- and Maximalvalue of y:")
  156.          (princ (setq miny (min liun_mb_y liob_mb_y reun_mb_y reob_mb_y)))
  157.          (princ "  ")
  158.          (princ "  ")
  159.          (princ (setq maxy (max liun_mb_y liob_mb_y reun_mb_y reob_mb_y)))
  160.          (terpri)
  161.          ; (initget 1)
  162.          ;(initget 3)
  163.   (setq temp (fix (/ (- (max liun_mb_x liob_mb_x reun_mb_x reob_mb_x)
  164.                         (min liun_mb_x liob_mb_x reun_mb_x reob_mb_x)
  165.                      )
  166.                      10 ; 10 Unterteilungen pro Fenster als Vorschlag
  167.                   )
  168.                     )
  169.   )
  170.   (setq digits (1- (strlen (itoa temp)))
  171.         temp (* (fix (/ temp (expt 10 digits))) (expt 10 digits))
  172.   )
  173.   (if (= 0 temp) (setq temp 1))
  174.   
  175.   (If (not (setq delta_l (getint (strcat "Distance between Coordinates <" (itoa temp) ">: "))))
  176.     (setq delta_l temp)
  177.   )
  178.   
  179.   (setq minx (* (fix (/ minx delta_l)) delta_l)
  180.         miny (* (fix (/ miny delta_l)) delta_l)
  181.   )
  182.   (if (not (setq startx (getint (strcat "\nStartvalue for X-Coordinates <" (itoa minx) ">: "))))
  183.     (setq startx minx)
  184.   )
  185.          (if (not (setq starty (getint (strcat "\nStartvalue for Y-Coordinates <" (itoa miny) ">: "))))
  186.     (setq starty miny)
  187.   )
  188.          (Initget "Inside Outside")
  189.          (if (setq temp (getkword "\nCoordinate Labels [inside/Outside] of VP <Outside>:"))
  190.              (setq lraussen  (= temp "Outside"))
  191.              ;else
  192.              (setq lraussen  'T)
  193.          )
  194.          (if (setq temp (getdist (strcat "Length of line <" (rtos *AD:LINIENLAENGE*) ">:")))
  195.     (setq *AD:LINIENLAENGE* temp)
  196.   )
  197.   (createunnamedgroupfromelist
  198.            (erzeugeGitterkreuze startx starty maxx maxy delta_l (ssname al x))
  199.   )
  200.          ; diese 8 Wiederholungen sollten sich doch auch in einer Schleife unterbringen lassen, die nur die
  201.          ; Viewportkoordinaten bekommt
  202.          ; Udo Hόbner
  203.          
  204.          ;
  205.          ; Werte pruefen und setzen (lassen wir noch offen)
  206.          ;
  207.          ;
  208.          ; jetzt gehts richtig los
  209.          ;
  210.          ; unterer Rand, x werte
  211.          ;
  212.          (setq delta_m (- reun_mb_x liun_mb_x))  ; dargestellte Koord.diff im Modellb.
  213.          (setq delta_a (- reun_af_x liun_af_x))  ; dargestellte Koord.diff im Ansichtsf.
  214.          (setq cy_af liun_af_y)
  215.          (if (and (> alpha (/ pi 2.)) (< alpha (* 3 (/ pi 2.))))  ; Richtg. der Linie in Abh. von Drehung MB in AF
  216.            (setq richtg (- alpha (/ pi 2.)))
  217.            (setq richtg (+ alpha (/ pi 2.)))
  218.          ) ; end if
  219.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))   ; nur Richtung 0 .. 2pi zulaessig
  220.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  221.          (setq textht *AD:TEXTHOEHE*) ; vorher Konstant 1
  222.          (if (< richtg (/ pi 2))                 ; Textrichtg. in Abh. von Linienrichtg.
  223.            (progn (setq textri (/ (* richtg 180 ) pi))
  224.                   (setq textausri (if lraussen "_mr" "_ml"))
  225.            ) ; end progn
  226.            (progn (setq textri (/ (* (- richtg pi) 180 ) pi))
  227.                   (setq textausri (if lraussen "_ml" "_mr"))
  228.            ) ; end progn
  229.          ) ; end if
  230.                 (if lraussen (setq richtg (+ richtg pi)))
  231.          (setq cx_mb startx)
  232.          (setq minx (min liun_mb_x reun_mb_x))  ; es kann auch in negativer Richtung verlaufen
  233.          (setq maxx (max liun_mb_x reun_mb_x))
  234.          (while (<= cx_mb minx)                 ; ersten auf Rand im MB vorh. Wert ermitteln
  235.            (setq cx_mb (+ cx_mb delta_l))
  236.          ) ; end while cx_mb
  237.          (while (< cx_mb maxx)
  238.            (setq delta_m1 (- cx_mb liun_mb_x))  ; Streckenverhaeltnisse
  239.            (setq cx_af (+ liun_af_x (* (/ delta_m1 delta_m) delta_a)))
  240.            (setq ctext (rtos cx_mb 2 0))
  241.            (setq p1 (list cx_af cy_af))
  242.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  243.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  244.     ; Koordinatenbeschiftung anfόgen
  245.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  246.            (setq cx_mb (+ cx_mb delta_l))
  247.          ) ; end while cx_mb
  248.          ; oberer Rand, x werte
  249.          ;
  250.          (setq delta_m (- reob_mb_x liob_mb_x))
  251.          (setq delta_a (- reob_af_x liob_af_x))
  252.          (setq cy_af liob_af_y)
  253.          (if (and (> alpha (/ pi 2.)) (< alpha (* 3 (/ pi 2.))))
  254.            (setq richtg (+ alpha (/ pi 2.)))
  255.            (setq richtg (- alpha (/ pi 2.)))
  256.          ) ; end if
  257.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  258.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  259.          (setq textht *AD:TEXTHOEHE*)
  260.          (if (< richtg (* pi 1.5))
  261.            (progn (setq textri (/ (* (- richtg pi) 180 ) pi))
  262.                   (setq textausri (if lraussen "_ml" "_mr"))
  263.            ) ; end progn
  264.            (progn (setq textri (/ (* richtg 180 ) pi))
  265.                   (setq textausri (if lraussen "_mr" "_ml"))
  266.            ) ; end progn
  267.          ) ; end if
  268.   (if lraussen (setq richtg (+ richtg pi)))
  269.          (setq cx_mb startx)
  270.          (setq minx (min liob_mb_x reob_mb_x))
  271.          (setq maxx (max liob_mb_x reob_mb_x))
  272.          (while (<= cx_mb minx)
  273.            (setq cx_mb (+ cx_mb delta_l))
  274.          ) ; end while cx_mb
  275.          (while (< cx_mb maxx)
  276.            (setq delta_m1 (- cx_mb liob_mb_x))
  277.            (setq cx_af (+ liob_af_x (* (/ delta_m1 delta_m) delta_a)))
  278.            (setq ctext (rtos cx_mb 2 0))
  279.            (setq p1 (list cx_af cy_af))
  280.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  281.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  282.     ; Koordinatenbeschiftung anfόgen
  283.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  284.            (setq cx_mb (+ cx_mb delta_l))
  285.          ) ; end while cx_mb
  286.          ; linker Rand, x werte
  287.          ;
  288.          (setq delta_m (- liob_mb_x liun_mb_x))
  289.          (setq delta_a (- liob_af_y liun_af_y))
  290.          (setq cx_af liun_af_x)
  291.          (if (> alpha pi)
  292.            (setq richtg (+ alpha (/ pi 2.)))
  293.            (setq richtg (- alpha (/ pi 2.)))
  294.          ) ; end if
  295.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  296.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  297.          (setq textht *AD:TEXTHOEHE*)
  298.          (setq textri (/ (* richtg 180 ) pi))
  299.          (setq textausri (if lraussen "_mr" "_ml"))
  300.                (if lraussen (setq richtg (+ richtg pi)))
  301.          (setq cx_mb startx)
  302.          (setq minx (min liob_mb_x liun_mb_x))
  303.          (setq maxx (max liob_mb_x liun_mb_x))
  304.          (while (<= cx_mb minx)
  305.            (setq cx_mb (+ cx_mb delta_l))
  306.          ) ; end while cx_mb
  307.          (while (< cx_mb maxx)
  308.            (setq delta_m1 (- cx_mb liun_mb_x))
  309.            (setq cy_af (+ liun_af_y (* (/ delta_m1 delta_m) delta_a)))
  310.            (setq ctext (rtos cx_mb 2 0))
  311.            (setq p1 (list cx_af cy_af))
  312.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  313.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  314.     ; Koordinatenbeschiftung anfόgen
  315.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  316.            (setq cx_mb (+ cx_mb delta_l))
  317.          ) ; end while cx_mb
  318.          ; rechter Rand, x werte
  319.          ;
  320.          (setq delta_m (- reob_mb_x reun_mb_x))
  321.          (setq delta_a (- reob_af_y reun_af_y))
  322.          (setq cx_af reun_af_x)
  323.          (if (< alpha pi)
  324.            (setq richtg (+ alpha (/ pi 2.)))
  325.            (setq richtg (- alpha (/ pi 2.)))
  326.          ) ; end if
  327.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  328.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  329.          (setq textht *AD:TEXTHOEHE*)
  330.          (setq textri (/ (* (- richtg pi) 180 ) pi))
  331.          (setq textausri (if lraussen "_ml" "_mr"))
  332.   (if lraussen (setq richtg (+ richtg pi)))
  333.         
  334.          (setq cx_mb startx)
  335.          (setq minx (min reob_mb_x reun_mb_x))
  336.          (setq maxx (max reob_mb_x reun_mb_x))
  337.          (while (<= cx_mb minx)
  338.            (setq cx_mb (+ cx_mb delta_l))
  339.          ) ; end while cx_mb
  340.          (while (< cx_mb maxx)
  341.            (setq delta_m1 (- cx_mb reun_mb_x))
  342.            (setq cy_af (+ reun_af_y (* (/ delta_m1 delta_m) delta_a)))
  343.            (setq ctext (rtos cx_mb 2 0))
  344.            (setq p1 (list cx_af cy_af))
  345.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  346.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  347.     ; Koordinatenbeschiftung anfόgen
  348.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  349.            (setq cx_mb (+ cx_mb delta_l))
  350.          ) ; end while cx_mb
  351.          ; linker Rand, y werte
  352.          ;
  353.          (setq delta_m (- liob_mb_y liun_mb_y))
  354.          (setq delta_a (- liob_af_y liun_af_y))
  355.          (setq cx_af liun_af_x)
  356.          (if (and (> alpha (/ pi 2.)) (< alpha (* 3 (/ pi 2.))))
  357.            (setq richtg (+ pi alpha))
  358.            (setq richtg (+ alpha))
  359.          ) ; end if
  360.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  361.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  362.          (setq textht *AD:TEXTHOEHE*)
  363.          (setq textausri (if lraussen "_mr" "_ml"))
  364.          (setq textri (/ (* richtg 180 ) pi))
  365.   (if lraussen (setq richtg (+ richtg pi)))
  366.         
  367.          (setq cy_mb starty)
  368.          (setq miny (min liob_mb_y liun_mb_y))
  369.          (setq maxy (max liob_mb_y liun_mb_y))
  370.          (while (<= cy_mb miny)
  371.            (setq cy_mb (+ cy_mb delta_l))
  372.          ) ; end while cy_mb
  373.          (while (< cy_mb maxy)
  374.            (setq delta_m1 (- cy_mb liun_mb_y))
  375.            (setq cy_af (+ liun_af_y (* (/ delta_m1 delta_m) delta_a)))
  376.            (setq ctext (rtos cy_mb 2 0))
  377.            (setq p1 (list cx_af cy_af))
  378.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  379.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  380.     ; Koordinatenbeschiftung anfόgen
  381.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  382.            (setq cy_mb (+ cy_mb delta_l))
  383.          ) ; end while cy_mb
  384.          ; rechter Rand, y werte
  385.          ;
  386.          (setq delta_m (- reob_mb_y reun_mb_y))
  387.          (setq delta_a (- reob_af_y reun_af_y))
  388.          (setq cx_af reun_af_x)
  389.          (if (and (> alpha (/ pi 2.)) (< alpha (* 3 (/ pi 2.))))
  390.            (setq richtg (+ alpha))
  391.            (setq richtg (+ pi alpha))
  392.          ) ; end if
  393.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  394.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  395.          (setq textht *AD:TEXTHOEHE*)
  396.          (setq textri (/ (* (- richtg pi) 180 ) pi))
  397.          (setq textausri (if lraussen "_ml" "_mr"))
  398.   (if lraussen (setq richtg (+ richtg pi)))
  399.         
  400.          (setq cy_mb starty)
  401.          (setq miny (min reun_mb_y reob_mb_y))
  402.          (setq maxy (max reun_mb_y reob_mb_y))
  403.          (while (<= cy_mb miny)
  404.            (setq cy_mb (+ cy_mb delta_l))
  405.          ) ; end while cy_mb
  406.          (while (< cy_mb maxy)
  407.            (setq delta_m1 (- cy_mb reun_mb_y))
  408.            (setq cy_af (+ reun_af_y (* (/ delta_m1 delta_m) delta_a)))
  409.            (setq ctext (rtos cy_mb 2 0))
  410.            (setq p1 (list cx_af cy_af))
  411.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  412.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  413.     ; Koordinatenbeschiftung anfόgen
  414.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  415.            (setq cy_mb (+ cy_mb delta_l))
  416.          ) ; end while cy_mb
  417.          ; unterer Rand, y werte
  418.          ;
  419.          (setq delta_m (- reun_mb_y liun_mb_y))
  420.          (setq delta_a (- reun_af_x liun_af_x))
  421.          (setq cy_af liun_af_y)
  422.          (if (< alpha pi)
  423.            (setq richtg (+ alpha))
  424.            (setq richtg (+ pi alpha))
  425.          ) ; end if
  426.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  427.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  428.          (setq textht *AD:TEXTHOEHE*)
  429.          (if (< richtg (/ pi 2))
  430.            (progn (setq textri (/ (* richtg 180 ) pi))
  431.                   (setq textausri (if lraussen "_mr" "_ml"))
  432.            ) ; end progn
  433.            (progn (setq textri (/ (* (- richtg pi) 180 ) pi))
  434.                   (setq textausri (if lraussen "_ml" "_mr"))
  435.            ) ; end progn
  436.          ) ; end if
  437.   (if lraussen (setq richtg (+ richtg pi)))
  438.         
  439.          (setq cy_mb starty)
  440.          (setq miny (min liun_mb_y reun_mb_y))
  441.          (setq maxy (max liun_mb_y reun_mb_y))
  442.          (while (<= cy_mb miny)
  443.            (setq cy_mb (+ cy_mb delta_l))
  444.          ) ; end while cy_mb
  445.          (while (< cy_mb maxy)
  446.            (setq delta_m1 (- cy_mb liun_mb_y))
  447.            (setq cx_af (+ liun_af_x (* (/ delta_m1 delta_m) delta_a)))
  448.            (setq ctext (rtos cy_mb 2 0))
  449.            (setq p1 (list cx_af cy_af))
  450.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  451.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  452.     ; Koordinatenbeschiftung anfόgen
  453.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  454.            (setq cy_mb (+ cy_mb delta_l))
  455.          ) ; end while cy_mb
  456.          ; oberer Rand, y werte
  457.          ;
  458.          (setq delta_m (- reob_mb_y liob_mb_y))
  459.          (setq delta_a (- reob_af_x liob_af_x))
  460.          (setq cy_af liob_af_y)
  461.          (if (< alpha pi)
  462.            (setq richtg (+ pi alpha))
  463.            (setq richtg (+ alpha))
  464.          ) ; end if
  465.          (if (< richtg 0) (setq richtg (+ richtg pi pi)))
  466.          (if (> richtg (* 2 pi)) (setq richtg (- richtg pi pi)))
  467.          (setq textht *AD:TEXTHOEHE*)
  468.          (if (< richtg (* pi 1.5))
  469.            (progn (setq textri (/ (* (- richtg pi) 180 ) pi))
  470.                   (setq textausri (if lraussen "_ml" "_mr"))
  471.            ) ; end progn
  472.            (progn (setq textri (/ (* richtg 180 ) pi))
  473.                   (setq textausri (if lraussen "_mr" "_ml"))
  474.            ) ; end progn
  475.          ) ; end if
  476.   (if lraussen (setq richtg (+ richtg pi)))
  477.       
  478.          (setq cy_mb starty)
  479.          (setq miny (min liob_mb_y reob_mb_y))
  480.          (setq maxy (max liob_mb_y reob_mb_y))
  481.          (while (<= cy_mb miny)
  482.            (setq cy_mb (+ cy_mb delta_l))
  483.          ) ; end while cy_mb
  484.          (while (< cy_mb maxy)
  485.            (setq delta_m1 (- cy_mb liob_mb_y))
  486.            (setq cx_af (+ liob_af_x (* (/ delta_m1 delta_m) delta_a)))
  487.            (setq ctext (rtos cy_mb 2 0))
  488.            (setq p1 (list cx_af cy_af))
  489.            (setq p2 (polar p1 richtg *AD:LINIENLAENGE*))
  490.            (setq pt (polar p1 richtg (1+ *AD:LINIENLAENGE*)))
  491.     ; Koordinatenbeschiftung anfόgen
  492.     (setq elemlist (append elemlist (createCvp p1 p2 textausri pt textht textri ctext)))
  493.            (setq cy_mb (+ cy_mb delta_l))
  494.          ) ; end while cy_mb
  495. ) ;end progn
  496.   ) ; end if viewport
  497.   (createunnamedgroupfromelist elemlist)
  498.   (setq x (1+ x)
  499. elemlist nil
  500.   )
  501. )
  502. ;
  503. ; Ausgangsbedingungen wieder herstellen
  504. ;
  505. (setvar "blipmode" sblip)
  506. (setvar "cmdecho" scmde)
  507. (setvar "osmode" sosmode)
  508. (setvar "angbase" sangbase)
  509. (setvar "angdir" sangdir)
  510. (setvar "aunits" saunits)
  511. (setq *error* alterror)
  512. ;(prompt "Koordinaten gesetzt")
  513. (princ)
  514. )
  515. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Errorhandling
  516. (defun my_error (msg)
  517. (print (strcat "Fehler aufgetreten: " msg))
  518. (command "_undo" "_back")
  519. (setq *error* alterror)
  520. (setvar "blipmode" sblip)
  521. (setvar "cmdecho" scmde)
  522. (setvar "osmode" sosmode)
  523. (setvar "angbase" sangbase)
  524. (setvar "angdir" sangdir)
  525. (setvar "aunits" saunits)
  526. (princ)
  527. )
  528. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  529. ;;; Ab hier Routinen von Udo Hόbner
  530. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  531. (defun CreateBLockinPaperspace (Blockname InsertionPoint rotationangle value)
  532. (if (not
  533.     (or
  534.      (vl-catch-all-error-p
  535.             (setq BlkObj (vl-catch-all-apply
  536.                       'vla-InsertBlock
  537.                       (list
  538.                         (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
  539.                         (vlax-3d-point InsertionPoint)
  540.                         Blockname
  541.                         1 1 1 rotationangle
  542.                       )
  543.            )
  544.             )
  545.       )
  546.       (= :vlax-false (vlax-get-property blkObj "HasAttributes"))
  547.     )
  548.    )
  549.    (foreach Att (vlax-safearray->list (vlax-variant-value (vla-getAttributes BlkObj)))
  550.        (setq tagstring (strcase (vla-get-TagString  Att)))
  551.        (if (= tagstring (strcase "Koordinate"))
  552.           (vla-put-TextString att value)
  553. )
  554.    )
  555. )
  556. )
  557. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  558. (defun createunnamedgroupfromelist (elist / CNT GROUPNAME SARRAY)
  559. (setq groupname (vla-add (vla-get-groups (vla-get-activedocument (vlax-get-acad-object))) "*"))
  560. (if elist
  561.    (progn
  562.      (setq cnt (length elist)
  563.     sArray (vlax-safearray-fill
  564.              (vlax-make-safearray vlax-vbobject (cons 0 (1- cnt)))
  565.              (mapcar 'vlax-ename->vla-object elist)
  566.            )
  567.      )
  568.      (vlax-invoke-method groupname "AppendItems" sArray)
  569.    )
  570. )
  571. )
  572. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  573. (defun erzeugeGitterkreuze (startx starty maxx maxy delta_l AF
  574.                     / acaddoc y eleliste punktliste
  575.                     AFLISTE AFOBJ BREITE CENAF DREHWINKEL HOEHE MAXAF MINAF
  576.                     )
  577. (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  578. ; AF einschalten
  579. (vlax-invoke-Method (setq AFobj (vlax-ename->vla-object AF)) "Display" :vlax-true)
  580. ; Modellbereich im Ansichtsfenster aktiv schalten
  581. (vla-put-mspace acaddoc :vlax-true)
  582. ; gewδhltes AF aktiv schalten  
  583. (setvar "CVPORT" (cdr (assoc 69 (setq AFliste (entget AF)))))
  584. (while (< startx maxx)
  585.   (setq y starty)
  586.   (while (< y maxy)
  587.     (setq punktliste (cons (ms2ps (list startx y) AF) punktliste))
  588.     (setq y (+ y delta_l))
  589.   )
  590.   (setq startx (+ startx delta_l))
  591. )
  592. (vla-put-mspace acaddoc :vlax-false)
  593. ;jetzt Punkte zeichnen
  594. (setq cenAf  (cdr (assoc 10 AFliste))
  595.       breite (cdr (assoc 40 AFliste))
  596.       hoehe  (cdr (assoc 41 AFliste))
  597.       minAF  (list  (- (car cenaf) (* 0.5 breite))(- (cadr cenaf) (* 0.5 hoehe)))
  598.       maxAF  (list  (+ (car cenaf) (* 0.5 breite))(+ (cadr cenaf) (* 0.5 hoehe)))
  599.       Drehwinkel (cdr (assoc 51 AFliste))
  600. )
  601. (if (not (tblsearch "BLOCK" "Gitterkreuz"))
  602.    (Createblock "Gitterkreuz")
  603. )
  604. (foreach punkt punktliste
  605.   (if (and (> (car punkt)(car minAF))   (< (car punkt)(car maxAF))
  606.     (> (cadr punkt)(cadr minAF)) (< (cadr punkt)(cadr maxAF))
  607.       )                                          
  608.     (setq eleliste (cons (insertblock "Gitterkreuz" punkt drehwinkel) eleliste))
  609.   )     
  610. )   
  611. eleliste  ; Rόckgabewert
  612. )
  613. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  614. (defun ms2ps (point AF)
  615. (if (and af (= "VIEWPORT" (cdr (assoc 0 (entget AF)))))
  616.    (trans (trans point 0 2) 2 3)
  617.    nil
  618. )
  619. )
  620. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  621. (defun ps2ms (point AF)
  622. (if (and af (= "VIEWPORT" (cdr (assoc 0 (entget AF)))))
  623.    (trans (trans point 3 2) 2 0)
  624.    nil
  625. )
  626. )
  627. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
  628. (defun insertblock (Blockname punkt drehwinkel)
  629. (entmake (list (cons 0 "INSERT")(cons 2 blockname) (cons 67 0) (cons 410 (getvar "ctab")) (cons 8 (getvar "clayer"))
  630.           (cons 10 punkt) (cons 41 1.0)(cons 42 1.0)(cons 43 1.0) (cons 50 drehwinkel))
  631. )            
  632. (entlast)
  633. )  
  634. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  635. (defun CreateBlock (Blockname)
  636. (entmake (list (cons 0 "BLOCK")(cons 2 blockname)(cons 70 2)(list 10 0.0 0.0 0.0)))
  637. (entmake '((0 . "LINE") (67 . 0) (410 . "Model") (8 . "0") (10 -4.0  0.0 0.0)(11 4.0 0.0 0.0)))
  638. (entmake '((0 . "LINE") (67 . 0) (410 . "Model") (8 . "0") (10  0.0 -4.0 0.0)(11 0.0 4.0 0.0)))  
  639. (entmake (list (cons 0 "ENDBLK"))) ; Rόckgabewert ist Block-ename
  640. )
  641. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  642. (defun MSAnsichtsfensterkoordinaten (AF)
  643. (setq acaddoc (vla-get-activedocument (vlax-get-acad-object)))
  644. (setq cenAf  (cdr (assoc 10 (setq AFliste (entget AF))))
  645.       breite (cdr (assoc 40 AFliste))
  646.       hoehe  (cdr (assoc 41 AFliste))
  647.       Drehwinkel (cdr (assoc 51 AFliste))
  648. )
  649. ; AF einschalten  
  650. (vlax-invoke-Method (setq AFobj (vlax-ename->vla-object AF)) "Display" :vlax-true)
  651. ; Modellbereich im Ansichtsfenster aktiv schalten
  652. (vla-put-mspace acaddoc :vlax-true)
  653. ; gewδhltes AF aktiv schalten  
  654. (setvar "CVPORT" (cdr (assoc 69 (setq AFliste (entget AF)))))
  655. (setq Punktliste
  656.       (list
  657.       (ps2ms (list  (- (car cenaf) (* 0.5 breite))(- (cadr cenaf) (* 0.5 hoehe))) AF) ; minAF
  658.       (ps2ms (list  (+ (car cenaf) (* 0.5 breite))(- (cadr cenaf) (* 0.5 hoehe))) AF) ;
  659.       (ps2ms (list  (+ (car cenaf) (* 0.5 breite))(+ (cadr cenaf) (* 0.5 hoehe))) AF) ; maxAF
  660.       (ps2ms (list  (- (car cenaf) (* 0.5 breite))(+ (cadr cenaf) (* 0.5 hoehe))) AF) ;
  661.       )
  662. )       
  663. (vla-put-mspace acaddoc :vlax-false)
  664. Punktliste
  665. )
  666.                              
  667. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  668. (prin1)

 
谢谢
205855t8w8ckzgw4g2ccle.jpg
回复

使用道具 举报

12

主题

395

帖子

384

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 20:31:51 | 显示全部楼层
你可以使用“torient”,选择所有文本并点击“可读性最强”的文本
回复

使用道具 举报

107

主题

615

帖子

575

银币

中流砥柱

Rank: 25

铜币
521
发表于 2022-7-5 21:02:21 | 显示全部楼层
嗨,Commandobill。我能帮你更新代码吗?
 
谢谢
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 00:57 , Processed in 0.511183 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表