乐筑天下

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

[编程交流] 使用图层名称和

[复制链接]

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:13:15 | 显示全部楼层 |阅读模式
你好,我需要帮助
如果可能的话,我需要一个例程,用层的名称标记一条线,并将文本放入图形中,而不仅仅是在命令行中
谢谢你的帮助
雪莉
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:18:14 | 显示全部楼层
修改我现有的例程:
 
  1. ;;;==========================[ MacAlign.lsp ]==========================
  2. ;;; Author: Copyright© 2009 Lee McDonnell (Lee Mac)                     
  3. ;;;         (Contact @ CADTutor.net, The Swamp.org)                     
  4. ;;; Version:  1.0 June 13, 2009                                         
  5. ;;;           2.0 June 14, 2009                                         
  6. ;;;           3.0 June 16, 2009                                         
  7. ;;;           4.0 June 16, 2009                                         
  8. ;;;           5.0 July 22, 2009                                         
  9. ;;; Purpose: To Align Text to a Curve                                   
  10. ;;; Sub_Routines: getpoint_or_text.lsp by Charles Alan Butler (CAB)     
  11. ;;;                                                                     
  12. ;;; Additional Features:                                                
  13. ;;; Use +/- to Alter Text Offset                                       
  14. ;;; Use "P" to toggle perpendicularity                                 
  15. ;;;====================================================================
  16. ;;;  MODIFIED TO SET TEXT AS CURVE LAYER  ;;
  17. (defun c:MacAlign (/ *error* doc spc tmp tStr ent cObj
  18.                     tObj gr cPt pt cAng lAng tSze
  19.                   
  20.                    ; *Mac$Str*  }
  21.                    ; *Mac$tOff* } Global Variables
  22.                    ; *Mac$Per*  }
  23.                   )
  24. (vl-load-com)
  25. ;; Error Handler
  26. (defun *error* (msg)
  27.    (and tObj (not (vlax-erased-p tObj))
  28.         (vla-delete tObj))
  29.    (if (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))
  30.      (princ (strcat "\n<< Error: " msg " >>")))
  31.    (redraw) (princ))
  32. ;; Check for Locked Current Layer
  33. (if (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar "CLAYER"))))))
  34.    (progn
  35.      (princ "\n<< Current Layer Locked >>") (exit)))
  36. ;; Get Space & Doc
  37. (setq doc (vla-get-ActiveDocument
  38.              (vlax-get-Acad-Object))
  39.        spc (if (zerop (vla-get-activespace doc))
  40.              (if (= (vla-get-mspace doc) :vlax-true) ; Vport
  41.                (vla-get-modelspace doc)
  42.                (vla-get-paperspace doc))
  43.              (vla-get-modelspace doc)))
  44. ;; Set First-time Defaults
  45. (or *Mac$Str*  (setq *Mac$Str* "text"))  
  46. (or *Mac$Per*  (setq *Mac$Per* (/ pi 2.)))
  47. (or *Mac$tOff* (setq *Mac$tOff* 1.))
  48. (or tSze (setq tSze (getvar "TEXTSIZE")))
  49.      
  50.      ;; Get Curve to Align
  51.      
  52.      (while
  53.        (progn
  54.          (setq ent (nentsel "\nSelect Curve: "))
  55.          (cond ((and (vl-consp ent)
  56.                      (vl-position
  57.                        (cdr (assoc 0 (entget (car ent))))
  58.                          '("LINE" "LWPOLYLINE" "POLYLINE" "ARC"
  59.                            "SPLINE" "CIRCLE" "ELLIPSE" "XLINE")))
  60.                 (setq cObj (vlax-ename->vla-object (car ent)))
  61.                 nil) ; Exit Loop
  62.                (t (princ "\nMissed, Try Again..."))))) ; Keep in Loop
  63.    (setq tStr (vla-get-layer cObj))
  64.      ;; Create Text Object
  65.      
  66.        (vla-put-alignment
  67.          (if tObj tObj
  68.            (setq tObj
  69.              (vla-addText spc tStr
  70.                (vlax-3D-point '(0 0 0)) tSze))) acAlignmentMiddleCenter)
  71.      (setq msg (princ "\n<< Type [+] or [-] for offset, and [P]erpendicular >>"))
  72.      ;; Place Text
  73.            
  74.      (while
  75.        (progn
  76.          (setq gr (grread t 15 0))
  77.          (redraw)        
  78.          (cond ((and (eq 5 (car gr)) (listp (setq cPt (cadr gr))))
  79.                 (setq pt (vlax-curve-getClosestPointto cObj cPt))
  80.                 (if (and (< 0 (getvar "OSMODE") 16383)
  81.                          (setq osPt (osnap pt (osLst (getvar "OSMODE")))))
  82.                   (osMark osPt))
  83.                 (setq cAng (angle pt cPt)
  84.                       lAng (+ cAng *Mac$Per*))
  85.                 ;; Correct Angle
  86.                
  87.                 (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
  88.                        (setq lAng (- lAng pi)))
  89.                       ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
  90.                        (setq lAng (+ lAng pi))))
  91.                
  92.                 (vla-move tObj
  93.                   (vla-get-TextAlignmentPoint tObj)
  94.                     (vlax-3D-point
  95.                       (polar pt cAng (* tSze *Mac$tOff*))))
  96.                 (vla-put-Rotation tObj lAng) t)
  97.                ((eq 2 (car gr))
  98.                 (cond ((vl-position (cadr gr) '(43 61))
  99.                        (setq *Mac$tOff*
  100.                          (+ (/ 1 10.) *Mac$tOff*)))
  101.                       ((eq (cadr gr) 45)
  102.                        (setq *Mac$tOff*
  103.                          (-  *Mac$tOff* (/ 1 10.))))
  104.                       ((vl-position (cadr gr) '(80 112))
  105.                        (setq *Mac$Per* (- (/ pi 2.) *Mac$Per*)))
  106.                       ((eq 6 (cadr gr))
  107.                        (cond ((< 0 (getvar "OSMODE") 16384)
  108.                               (setvar "OSMODE" (+ 16384 (getvar "OSMODE")))
  109.                               (princ (strcat "\n<Osnap off>" msg)))
  110.                              (t (setvar "OSMODE" (- (getvar "OSMODE") 16384))
  111.                                 (princ (strcat "\n<Osnap on>" msg)))) t)
  112.                       ((vl-position (cadr gr) '(13 32)) nil)
  113.                       (t)))
  114.                ((eq 3 (car gr))
  115.                 (if (and (< 0 (getvar "OSMODE") 16383)
  116.                          (setq osPt (osnap pt (osLst (getvar "OSMODE")))))
  117.                   (progn
  118.                     (osMark osPt)
  119.                     (setq cAng (angle pt cPt)
  120.                           lAng (+ cAng *Mac$Per*))
  121.                   ;; Correct Angle
  122.                
  123.                     (cond ((and (> lAng (/ pi 2)) (<= lAng pi))
  124.                            (setq lAng (- lAng pi)))
  125.                           ((and (> lAng pi) (<= lAng (/ (* 3 pi) 2)))
  126.                            (setq lAng (+ lAng pi))))
  127.                     
  128.                     (vla-move tObj
  129.                       (vla-get-TextAlignmentPoint tObj)
  130.                         (vlax-3D-point
  131.                           (polar ospt cAng (* tSze *Mac$tOff*))))
  132.                     (vla-put-Rotation tObj lAng)))
  133.                 nil)
  134.                
  135.                ((eq 25 (car gr)) nil) (t))))
  136. (redraw) (princ))
  137. (defun oSlst (os / str cnt)
  138. (setq str "" cnt 0)
  139. (if (< 0 os 16383)
  140.    (foreach mod '("_end" "_mid" "_cen" "_nod" "_qua"
  141.                   "_int" "_ins" "_per" "_tan" "_nea"
  142.                   "_non" "_app" "_ext" "_par")
  143.      (if (not (zerop (logand (expt 2 cnt) os)))
  144.        (setq str (strcat str mod (chr 44))))
  145.      (setq cnt (1+ cnt))))
  146. (vl-string-right-trim (chr 44) str))
  147. (defun osMark (pt / drft osSz osCol ratio bold glst i)
  148. (setq drft (vla-get-drafting
  149.               (vla-get-preferences
  150.                 (vlax-get-acad-object)))
  151.        osSz (vla-get-AutoSnapMarkerSize drft)
  152.        oscol (vla-get-AutoSnapMarkerColor drft)
  153.        ratio (/ (getvar "VIEWSIZE")
  154.               (cadr (getvar "SCREENSIZE")))
  155.        bold (mapcar
  156.               (function
  157.                 (lambda (x)
  158.                   (* x ratio))) (list (+ osSz 0.5) osSz (- osSz 0.5))) i 0)
  159. (repeat 50
  160.    (setq glst
  161.      (cons
  162.        (polar '(0 0 0) (* i (/ pi 25.)) 1.) glst) i (1+ i)))      
  163. (foreach x bold
  164.     (grvecs (append (list oscol) glst (cdr glst) (list (car glst)))
  165.             (list (list  x  0.0 0.0 (car pt))
  166.                   (list 0.0  x  0.0 (cadr pt))
  167.                   (list 0.0 0.0 1.0 0.0)
  168.                   (list 0.0 0.0 0.0 1.0)))))
  169. (vl-load-com)
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:22:10 | 显示全部楼层
 
 
 
李,
我在尝试使用lisp时收到此消息
**错误:错误的参数类型:numberp:nil**
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:25:11 | 显示全部楼层
六羟甲基三聚氰胺六甲醚。。。我很快测试了一下,结果很好,但我会再看一眼
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:29:00 | 显示全部楼层
只是再次测试,我似乎无法让它失败。。。
 
消息在什么时候出现?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:29:21 | 显示全部楼层
其他人可以测试发布的代码以查看是否有错误吗眨眼:
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:34:09 | 显示全部楼层
 
除了文本很小(注释性),它对我来说很好。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:37:18 | 显示全部楼层
 
我只使用了TEXTSIZE变量,但在代码顶部提供了选项。。。但很高兴没有出错
回复

使用道具 举报

1

主题

8

帖子

7

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 22:41:45 | 显示全部楼层
 
 
好的,午饭回来
我重新测试过,如果我一次只选择一行,它就可以工作,但我无法打开这些行的窗口,或者我收到了这个消息
**错误:错误的参数类型:numberp:nil**
 
没关系,我可以这样用
谢谢雪莉
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 22:42:56 | 显示全部楼层
 
只是说说发生了什么。代码没有问题。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 06:04 , Processed in 0.428837 second(s), 72 queries .

© 2020-2025 乐筑天下

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