乐筑天下

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

[编程交流] 帮我把这个Lisp程序写得像t

[复制链接]

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-5 23:51:42 | 显示全部楼层 |阅读模式
005147cue6pv9vbv6vuft8.jpg
 
我有两个类似的程序,图片有差异,有人帮我改一下吧非常感谢。
 
带箭头的引线端点
十、 Y值必须有加号或减号
 
谢谢
bzx。lsp
BZ。LSP
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:05:02 | 显示全部楼层
有人帮我换吗非常感谢!
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:09:41 | 显示全部楼层
flyfox1047,
 
对于bz。lsp只需添加以下内容即可获得加号(if(minusp(car p1))“”“+”)
 
ymg公司
 
修订代码如下:
 
 
  1. (VL-LOAD-COM)
  2. (or copy_reactor
  3.    (setq copy_reactor (vlr-command-reactor "copy_reactor" '((:vlr-commandEnded . copy_1))))
  4. )
  5. (setvar "copymode" 1)
  6. (defun C:bz (/ p1 p2 pt1 pt2 pts mSpace Mtextobj)
  7. (setq mSpace (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))))
  8. (setq p1 (getpoint "\nÑ¡ÔñÒª±ê×¢µÄµã:"))
  9. (setq p2 (getpoint p1 "\nÑ¡Ôñ±ê×¢ÎÄ×ÖλÖÃ:"))
  10. (setq pt2 (vlax-3D-point p2))
  11. (setq Mtextobj (vla-addMtext
  12.                   mSpace
  13.                   pt2
  14.                   0.0
  15.                   (strcat "X=" [color="red"](if (minusp (car p1)) "" "+" )[/color](rtos (car p1) 2 1) "\nY=" [color="red"](if (minusp (cadr p1)) "" "+" )[/color](rtos (cadr p1) 2 1))
  16.                 )
  17. )
  18. (setq MtextH (* (getvar "DIMSCALE") (getvar "DIMTXT"))) ;ÎÄ×ָ߶ÈΪµ±Ç°±êÖùÑùʽÎÄ×ָ߶È*È«¾Ö±ÈÀý
  19. (vlax-put-property Mtextobj 'Height MtextH)
  20. (vlax-put-property Mtextobj 'LineSpacingDistance (+ MtextH 1))
  21. (if (> (car p1) (car p2))
  22.    (vlax-put-property Mtextobj 'AttachmentPoint 9)
  23.    (vlax-put-property Mtextobj 'AttachmentPoint 7)
  24. )
  25. (vlax-put-property Mtextobj 'InsertionPoint pt2)
  26. (setq pts (vlax-make-safearray vlax-vbDouble '(0 . 5)))
  27. (vlax-safearray-fill
  28.    pts
  29.    (list (car p1) (cadr p1) (caddr p1) (car p2) (cadr p2) (caddr p2))
  30. )
  31. (setq leaderobj (vla-Addleader mSpace pts Mtextobj acLineWithArrow))
  32. (setq vlr-objgx (vlr-object-reactor (list leaderobj) "" '((:vlr-modified . gx))))
  33. (setq vlr-objcopy (vlr-object-reactor (list leaderobj) "" '((:vlr-copied . copy_2))))
  34. (princ)
  35. )
  36. (defun copy_2 (obj vlrobj data)
  37. (if (/= (car data) 0)
  38.    (setq newename (car data))
  39. )
  40. )
  41. (defun copy_1 (vlrobj data)
  42. (if (wcmatch (strcase (car data)) "*COPY*")
  43.    (progn (setq newobj (vlax-ename->vla-object newename))
  44.           (setq vlr-objgx (vlr-object-reactor (list newobj) "" '((:vlr-modified . gx))))
  45.           (setq vlr-objcopy (vlr-object-reactor (list newobj) "" '((:vlr-copied . copy_2))))
  46.           (princ)
  47.    )
  48. )
  49. )
  50. (defun gx (obj vlrobj data / p1 pt1 Aobj)
  51. (if (and (not (vlax-erased-p obj)) (setq Aobj (vlax-get-property obj 'Annotation))) ;Åж϶ÔÏóÊÇ·ñ±»É¾³ý
  52.    (progn (setq pt1 (vlax-get-property obj 'Coordinate 0))
  53.           (setq p1 (vlax-safearray->list (vlax-variant-value pt1)))
  54.           (vlax-put-property
  55.             Aobj
  56.             'TextString
  57.             (strcat "X=" [color="red"](if (minusp (car p1)) "" "+" )[/color](rtos (car p1) 2 1) "\nY=" [color="red"](if (minusp (car p1))[/color] "" "+" )(rtos (cadr p1) 2 1))
  58.           )
  59.    )
  60. )
  61. )
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:12:32 | 显示全部楼层
您好,ymg3,谢谢您的帮助,appload-始终显示:无函数定义:COPY\u 1,现在我使用autocad 2007
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:23:27 | 显示全部楼层
这是为加号修改的第二个。
 
现在,为了我的生活,你为什么要使用这样过时的惯例。
这一个实际上是画了一条线和一个十字架,有点模仿
领导者。
 
这就是您应该使用“LEADER”来完成该任务的内容。
 
ymg公司
 
  1. (defun C:bz (/ AcadObject AcadDocument mSpace h1 len inp kflag obj1 p1 p2 x y anglel inpx inpy lasp olay tx ty)
  2. (princ "\n×ø±ê±ê×¢V1.10£¬Ö´ÐÐÃüÁbz")
  3. (setq olay (getvar "clayer"))
  4. (setvar "cmdecho" 0)
  5. ;;;  ÉèÖÃActiveXµÄ¹¤×÷»·¾³‰äÁ¿
  6. (VL-LOAD-COM)
  7. (setq AcadObject   (vlax-get-acad-object)
  8.        AcadDocument (vla-get-ActiveDocument Acadobject)
  9.        mSpace       (vla-get-ModelSpace Acaddocument)
  10. )
  11. (setvar "cmdecho" 0)
  12. (setq kflag t)
  13. (while kflag
  14.    (chklay)
  15.    (initget "S")
  16.    (if (not h)
  17.      (setq h '1.5)
  18.    )
  19.    (setq
  20.      p (getpoint (strcat "\nÖ¸¶¨Æðµã/¡¾S¡¿ÉèÖÃ×Ö¸ß[<" (rtos h) ">]"))
  21.    )
  22.    (if (= p "S")
  23.      (setq h1 (getreal (strcat "\nÊäÈëÐÂ×Ö¸ß<" (rtos h) ">")))
  24.    )
  25.    (if h1
  26.      (setq h h1)
  27.    )
  28.    (if (and (/= p "S") p)
  29.      (progn
  30.        (drawcross p) ;ÔÚ´æÔÚpµÄÇé¿öÏ»*Ê®×Ö¹â±ê
  31.        (prompt "\nÖ¸¶¨ÏÂÒ»µã£º")
  32.        (command "line" p (getdist p) "")
  33.        (setq obj1 (vlax-ename->vla-object (entlast)))
  34.        (if (= (vlax-get-property obj1 'objectname) "AcDbLine")
  35.          (progn
  36.            (setq p1 (vlax-get obj1 'startpoint))
  37.            (setq p2 (vlax-get obj1 'endpoint))
  38.            (setq x (strcat "X=" (if (minusp (car p1)) "" "+" ) (rtos (car p1) 2 3)))
  39.            (setq y (strcat "Y=" (if (minusp (cadr p1)) "" "+" ) (rtos (cadr p1) 2 3)))
  40.            (setq len (max (strlen x) (strlen y)))
  41.            (setq anglel (vlax-get obj1 'Angle))
  42.            (if (and (> anglel (/ pi 2)) (< anglel (/ (* pi 1.5))))
  43.              ;;ÔÚµÚ¶þ¡¢ÈýÏóÏÞ±ê×¢
  44.              (progn
  45.                (setq lasp (polar p2 (angtof "180") (* (* 0.6 h) len)))
  46.                (setq inp (polar lasp '0 (* 0.2 h)))
  47.                (setq inpx (polar inp (angtof "90") (* 0.2 h)))
  48.                (setq inpy (polar inp (angtof "270") (* 1.1 h)))
  49.                (vla-AddLine mSpace (vlax-3d-point p2) (vlax-3d-point lasp))
  50.                (setq tx (vla-AddText mSpace x (vlax-3d-point inpx) h))
  51.                (setq ty (vla-AddText mSpace y (vlax-3d-point inpy) h))
  52.              ) ;progn
  53.              ;;ÔÚµÚÒ»¡¢ËÄÏóÏÞ±ê×¢
  54.              (progn
  55.                (setq lasp (polar p2 '0 (* (* 0.7 h) len)))
  56.                (setq inp (polar p2 '0 (* 0.3 h)))
  57.                (setq inpx (polar inp (angtof "90") (* 0.2 h)))
  58.                (setq inpy (polar inp (angtof "270") (* 1.1 h)))
  59.                (vla-AddLine mSpace (vlax-3d-point p2) (vlax-3d-point lasp))
  60.                (vla-AddText mSpace x (vlax-3d-point inpx) h)
  61.                (vla-AddText mSpace y (vlax-3d-point inpy) h)
  62.              ) ;progn
  63.            )
  64.          )
  65.        ) ;if
  66.        (if (/= (vlax-get-property obj1 'objectname) "AcDbLine")
  67.          (progn
  68.            (princ "\nÏ߶λæÖÆ´íÎó£¬ÖØлæÖÆ»ò<Í˳ö>")
  69.            (command "_.erase" (entlast) "")
  70.          )
  71.        )
  72.      )
  73.      (if (/= p "S")
  74.        (setq kflag nil) ;ÊäÈëSºó²»ÔÊÐíÌÓÀëÑ*»·
  75.      )
  76.    )
  77. ) ;while
  78. (setvar "clayer" olay)
  79. )
  80. (defun chklay (/ layflag)
  81. (setq layflag (tblsearch "layer" "×ø±ê±ê×¢"))
  82. (if (not layflag)
  83.    (command "_layer" "m" "×ø±ê±ê×¢" "c" "3" "" "")
  84. )
  85. (setvar "clayer" "×ø±ê±ê×¢")
  86. )
  87. (defun drawcross (p / px1 px2 py1 py2)
  88. (setq eflag (tblsearch "block" "×ø±êÊ®×Ö±ê¼Ç")) ;¿é´æÔÚ±ê¼Ç
  89. (if (not eflag) ;²»´æÔÚÊ®×Ö±ê¼ÇµÄ¿é£¬Ôò°´ÈçÏ´´½¨
  90.    (progn
  91.      (setq px1 (polar p (angtof "180") 1.5) ;×ó×ø±ê
  92.            px2 (polar p '0 '1.5) ;ÓÒ×ø±ê
  93.            py1 (polar p (angtof "90") '1.5) ;ÉÏ×ø±ê
  94.            py2 (polar p (angtof "270") '1.5) ;ÏÂ×ø±ê
  95.      )
  96.      (entmake (list
  97.                 (cons 0 "BLOCK")
  98.                 (cons 2 "×ø±êÊ®×Ö±ê¼Ç")
  99.                 (cons 70 0)
  100.                 (cons 10 p)
  101.               )
  102.      )
  103.      (entmake (list
  104.                 (cons 0 "LINE")
  105.                 (cons 10 px1)
  106.                 (cons 11 px2)
  107.               )
  108.      )
  109.      (entmake (list
  110.                 (cons 0 "LINE")
  111.                 (cons 10 py1)
  112.                 (cons 11 py2)
  113.               )
  114.      )
  115.      (entmake '((0 . "endblk")))
  116.    ) ;progn
  117. ) ;if
  118. (command "_insert" "×ø±êÊ®×Ö±ê¼Ç" p (/ h 3.5) (/ h 3.5) "0")
  119. )
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:29:10 | 显示全部楼层
flyfox1047,
 
像下面这样简单的事情实际上和你想要的差不多,
同时保持风格定义的优势。
 
ymg公司
 
  1. (defun c:lb (/ p x y str)
  2. (while (setq p (getpoint "\nPick Point: "))
  3.     (setq   x (strcat "X = " (if (minusp (car p)) ""  "+" ) (rtos (car   p))))
  4.     (setq   y (strcat "Y = " (if (minusp (cadr p)) "" "+" ) (rtos (cadr  p))))
  5.     (setq str (strcat x "\n" y))
  6.    ;(setq   z (strcat "Z = "(if (minusp (caddr p)) "" "+" ) (rtos (caddr p))))
  7.    ;(setq str (strcat x "\n" y "\n" z))                                       
  8.     (command "_LEADER" p pause "" str "")
  9. )
  10. )
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:35:52 | 显示全部楼层
  1. (defun C:bz (/ AcadObject AcadDocument mSpace h1 len inp kflag obj1 p1 p2 x y anglel inpx inpy lasp olay tx ty)
  2. (princ "\n×ø±ê±ê×¢V1.10£¬Ö´ÐÐÃüÁbz")
  3. (setq olay (getvar "clayer"))
  4. (setvar "cmdecho" 0)
  5. ;;;  ÉèÖÃActiveXµÄ¹¤×÷»·¾³‰äÁ¿
  6. (VL-LOAD-COM)
  7. (setq AcadObject   (vlax-get-acad-object)
  8.        AcadDocument (vla-get-ActiveDocument Acadobject)
  9.        mSpace       (vla-get-ModelSpace Acaddocument)
  10. )
  11. (setvar "cmdecho" 0)
  12. (setq kflag t)
  13. (while kflag
  14.    (chklay)
  15.    (initget "S")
  16.    (if (not h)
  17.      (setq h '1.5)
  18.    )
  19.    (setq
  20.      p (getpoint (strcat "\nÖ¸¶¨Æðµã/¡¾S¡¿ÉèÖÃ×Ö¸ß[<" (rtos h) ">]"))
  21.    )
  22.    (if (= p "S")
  23.      (setq h1 (getreal (strcat "\nÊäÈëÐÂ×Ö¸ß<" (rtos h) ">")))
  24.    )
  25.    (if h1
  26.      (setq h h1)
  27.    )
  28.    (if (and (/= p "S") p)
  29.      (progn
  30.        (drawcross p) ;ÔÚ´æÔÚpµÄÇé¿öÏ»*Ê®×Ö¹â±ê
  31.        (prompt "\nÖ¸¶¨ÏÂÒ»µã£º")
  32.        (command "line" p (getdist p) "")
  33.        (setq obj1 (vlax-ename->vla-object (entlast)))
  34.        (if (= (vlax-get-property obj1 'objectname) "AcDbLine")
  35.          (progn
  36.            (setq p1 (vlax-get obj1 'startpoint))
  37.            (setq p2 (vlax-get obj1 'endpoint))
  38.            (setq x (strcat "X=" (if (minusp (car p1)) "" "+" ) (rtos (car p1) 2 3)))
  39.            (setq y (strcat "Y=" (if (minusp (cadr p1)) "" "+" ) (rtos (cadr p1) 2 3)))
  40.            (setq len (max (strlen x) (strlen y)))
  41.            (setq anglel (vlax-get obj1 'Angle))
  42.            (if (and (> anglel (/ pi 2)) (< anglel (/ (* pi 1.5))))
  43.              ;;ÔÚµÚ¶þ¡¢ÈýÏóÏÞ±ê×¢
  44.              (progn
  45.                (setq lasp (polar p2 (angtof "180") (* (* 0.6 h) len)))
  46.                (setq inp (polar lasp '0 (* 0.2 h)))
  47.                (setq inpx (polar inp (angtof "90") (* 0.2 h)))
  48.                (setq inpy (polar inp (angtof "270") (* 1.1 h)))
  49.                (vla-AddLine mSpace (vlax-3d-point p2) (vlax-3d-point lasp))
  50.                (setq tx (vla-AddText mSpace x (vlax-3d-point inpx) h))
  51.                (setq ty (vla-AddText mSpace y (vlax-3d-point inpy) h))
  52.              ) ;progn
  53.              ;;ÔÚµÚÒ»¡¢ËÄÏóÏÞ±ê×¢
  54.              (progn
  55.                (setq lasp (polar p2 '0 (* (* 0.7 h) len)))
  56.                (setq inp (polar p2 '0 (* 0.3 h)))
  57.                (setq inpx (polar inp (angtof "90") (* 0.2 h)))
  58.                (setq inpy (polar inp (angtof "270") (* 1.1 h)))
  59.                (vla-AddLine mSpace (vlax-3d-point p2) (vlax-3d-point lasp))
  60.                (vla-AddText mSpace x (vlax-3d-point inpx) h)
  61.                (vla-AddText mSpace y (vlax-3d-point inpy) h)
  62.              ) ;progn
  63.            )
  64.          )
  65.        ) ;if
  66.        (if (/= (vlax-get-property obj1 'objectname) "AcDbLine")
  67.          (progn
  68.            (princ "\nÏ߶λæÖÆ´íÎó£¬ÖØлæÖÆ»ò<Í˳ö>")
  69.            (command "_.erase" (entlast) "")
  70.          )
  71.        )
  72.      )
  73.      (if (/= p "S")
  74.        (setq kflag nil) ;ÊäÈëSºó²»ÔÊÐíÌÓÀëÑ*»·
  75.      )
  76.    )
  77. ) ;while
  78. (setvar "clayer" olay)
  79. )
  80. (defun chklay (/ layflag)
  81. (setq layflag (tblsearch "layer" "×ø±ê±ê×¢"))
  82. (if (not layflag)
  83.    (command "_layer" "m" "×ø±ê±ê×¢" "c" "3" "" "")
  84. )
  85. (setvar "clayer" "×ø±ê±ê×¢")
  86. )
  87. (defun drawcross (p / px1 px2 py1 py2)
  88. (setq eflag (tblsearch "block" "×ø±êÊ®×Ö±ê¼Ç")) ;¿é´æÔÚ±ê¼Ç
  89. (if (not eflag) ;²»´æÔÚÊ®×Ö±ê¼ÇµÄ¿é£¬Ôò°´ÈçÏ´´½¨
  90.    (progn
  91.      (setq px1 (polar p (angtof "180") 1.5) ;×ó×ø±ê
  92.            px2 (polar p '0 '1.5) ;ÓÒ×ø±ê
  93.            py1 (polar p (angtof "90") '1.5) ;ÉÏ×ø±ê
  94.            py2 (polar p (angtof "270") '1.5) ;ÏÂ×ø±ê
  95.      )
  96.      (entmake (list
  97.                 (cons 0 "BLOCK")
  98.                 (cons 2 "×ø±êÊ®×Ö±ê¼Ç")
  99.                 (cons 70 0)
  100.                 (cons 10 p)
  101.               )
  102.      )
  103.      (entmake (list
  104.                 (cons 0 "LINE")
  105.                 (cons 10 px1)
  106.                 (cons 11 px2)
  107.               )
  108.      )
  109.      (entmake (list
  110.                 (cons 0 "LINE")
  111.                 (cons 10 py1)
  112.                 (cons 11 py2)
  113.               )
  114.      )
  115.      (entmake '((0 . "endblk")))
  116.    ) ;progn
  117. ) ;if
  118. (command "_insert" "×ø±êÊ®×Ö±ê¼Ç" p (/ h 3.5) (/ h 3.5) "0")
  119. )

 
嗨,ymg,谢谢你!我不知道为什么文字会乱码,不能正常工作
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:42:31 | 显示全部楼层
  1. (defun c:lb (/ p x y str)
  2. (while (setq p (getpoint "\nPick Point: "))
  3.     (setq   x (strcat "X = " (if (minusp (car p)) ""  "+" ) (rtos (car   p))))
  4.     (setq   y (strcat "Y = " (if (minusp (cadr p)) "" "+" ) (rtos (cadr  p))))
  5.     (setq str (strcat x "\n" y))
  6.    ;(setq   z (strcat "Z = "(if (minusp (caddr p)) "" "+" ) (rtos (caddr p))))
  7.    ;(setq str (strcat x "\n" y "\n" z))                                       
  8.     (command "_LEADER" p pause "" str "")
  9. )
  10. )

 
这个代码很好!简洁,再次感谢你能帮我在这段代码中创建一个暗层,层的颜色是绿色的,把dimleader放入暗层,暗精度保留两位小数吗
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-6 00:51:01 | 显示全部楼层
  1. (defun c:lb ( / p x y str )
  2. (if (not (tblsearch "LAYER" "dim"))
  3.    (entmake '((0 . "LAYER") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 . "dim") (70 . 0) (62 . 3) (6 . "Continuous")))
  4.    (prompt "\nLayer : "dim" already exist - setting it to current and proceeding with routine...")
  5. )
  6. (setvar 'clayer "dim")
  7. (while (setq p (getpoint "\nPick Point - ENTER to finish: "))
  8.     (setq   x (strcat "X = " (if (minusp (car p)) ""  "+" ) (rtos (car p) 2 2)))
  9.     (setq   y (strcat "Y = " (if (minusp (cadr p)) "" "+" ) (rtos (cadr p) 2 2)))
  10.     (setq str (strcat x "\n" y))
  11.    ;(setq   z (strcat "Z = "(if (minusp (caddr p)) "" "+" ) (rtos (caddr p) 2 2)))
  12.    ;(setq str (strcat x "\n" y "\n" z))                                       
  13.     (command "_LEADER" p pause "" str "")
  14. )
  15. (princ)
  16. )
回复

使用道具 举报

34

主题

174

帖子

60

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
257
发表于 2022-7-6 00:54:23 | 显示全部楼层
 
很不错的!marko_ribar,谢谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:26 , Processed in 0.598389 second(s), 75 queries .

© 2020-2025 乐筑天下

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