明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: yuping913

[源码] 求直线或者多段线定距缩短的lisp

[复制链接]
发表于 2019-4-15 08:56:22 | 显示全部楼层
yuping913 发表于 2019-4-15 08:48
大神能帮忙改一下吗?我初学好多地方看不明白

你说的原对象的属性是指什么,颜色、线型、图层?还是扩展数据xdata?还是什么别的
回复

使用道具 举报

发表于 2019-4-16 00:53:59 | 显示全部楼层
本帖最后由 ketxu 于 2019-4-16 00:57 编辑

Mine version.
  1. (defun c:COL (/ s *error* l _id)
  2. (defun *error*(m)
  3.         (princ m)
  4.         (:CM:EndMark *CM:Doc*)
  5.         (if oCMD (setvar 'cmdEcho oCMD))
  6.         ;(if l (setq *lSetting* l))
  7.         (princ)
  8. )
  9. (:CM:StartMark *CM:Doc*)
  10. (setq oCMD (getvar 'cmdecho))(setvar 'cmdecho 0)
  11.         ;Private function
  12. (cond
  13. (
  14.         (and
  15.                 ;Select
  16.                 (setq s
  17.                         (:CM:SS-Select "\nCh\U+1ECDn c\U+00E1c Line, Pline, Arc, SPLINE mu\U+1ED1n thay \U+0111\U+1ED5i chi\U+1EC1u d\U+00E0i :"
  18.                                 (list "_:L" '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC,SPLINE")))                                       
  19.                         )
  20.                 )
  21.                 ;Setting
  22.                 ;Chi can doan nay la vua thiet dat che do hien hanh, vua tao dialog. Chua co phan luu key vao Reg
  23.                 (setq *lSetting*
  24.                         ((lambda(/ fl ret dcl_id lstKey init l)
  25.                         (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
  26.                         (setq         ret (open fl "w")                                         
  27.                                         tt         "Ch\U+01B0\U+01A1ng tr\U+00ECnh cho ph\U+00E9p k\U+00E9o d\U+00E0i \U+0111\U+1ED1i t\U+01B0\U+1EE3ng Line, Polyline, LWPolyline, Arc theo ph\U+00EDa
  28.                                                         \n\\U+00A9 Ketxu 3/2017
  29.                                                         \nMail : ks.stung@gmail.com
  30.                                                         \niCad Group"
  31.                                         title "Change Objects Length v1"
  32.                         )
  33.                         (or *lengDelta* (setq *lengDelta* 10))
  34.                         ;List key_label_value default
  35.                         (or *lSetting* (setq *lSetting* '(("kStart" "\U+0110\U+1EA7u" "0")("kEnd" "Cu\U+1ED1i" "0")("kBoth" "C\U+1EA3 2 ph\U+00EDa" "1") ("kTotal" "T\U+1ED5ng" "0"))))
  36.                         (mapcar
  37.                         '(lambda (x) (write-line x ret))
  38.                                 (list
  39.                                         "Dialog : dialog { "
  40.                                         (strcat "label="" title ""; width = 10;fixed_width = true;")
  41.                                                 ":edit_box {label ="Chi\U+1EC1u d\U+00E0i :";key = "kDel";}"
  42.                                                 " :radio_column{"
  43.                                                                
  44.                                                                 (strcat "label="" "Ph\U+00EDa :"  "";")
  45.                                                                 (apply 'strcat (mapcar '(lambda (x)(strcat ":radio_button {key="" (car x) "";width=2;label="" (cadr x) "";}")) *lSetting*))                                
  46.                                                                 ": spacer { height = 0.2; }"               
  47.                                        
  48.                                                                 " :text_part {alignment=centered;"
  49.                                                                   (strcat "label="" "\\U+00A9 Ketxu - iCad Tools" "";")
  50.                                                                 "}"
  51.                                                         "}"
  52.                                                 ": column {"
  53.                                                 ": row {"
  54.                                                 "    fixed_width = true;"
  55.                                                 "    alignment = centered;"
  56.                                                 ":button {label = "Ok";key = "kOK";is_cancel = true;fixed_width = true;width = 1;is_default = 1;}"
  57.                                                 ":button {label = "Help";fixed_width = true;width = 1;key = "kHelp";}"               
  58.                                                 "}"
  59.                                                 "}}"
  60.                                 )   
  61.                         ) ;_ end of mapcar
  62.                         ;Load DCL
  63.                         (setq ret (close ret))
  64.                         (if (and (not (minusp (setq dcl_id (load_dialog fl))))
  65.                                    (new_dialog "Dialog" dcl_id)
  66.                           ) ;_ end of and
  67.                         (progn
  68.                                 
  69.                                 ;Init
  70.                                 (defun init()
  71.                                         (mapcar '(lambda(x)(set_tile (car x) (last x))) *lSetting*)
  72.                                         (set_tile "kDel" (rtos *lengDelta*))
  73.                                 )
  74.                                 (init)
  75.                                 
  76.                                 ;Get all value when change               
  77.                                 (defun Get_Value(/ l1)
  78.                                 (setq *lengDelta* (distof (get_tile "kDel")))
  79.                                 (mapcar  
  80.                                                 '(lambda(x)(list (car x) (cadr x)(get_tile (car x))))
  81.                                                 *lSetting*
  82.                                 )                        
  83.                                 )
  84.                                 (defun        get_len()
  85.                                                 (if (not (distof (get_tile "kDel")))(alert "Vui l\U+00F2ng nh\U+1EADp s\U+1ED1 !"))                                
  86.                                 )
  87.                                 (action_tile "kOK" "(setq ret (Get_value))(done_dialog 4)")
  88.                                 (action_tile "kDel" "(get_len)")               
  89.                                 (action_tile "kHelp" "(alert tt)")               
  90.                                 
  91.                           (setq dlg_Exit (start_dialog))         
  92.                         ) ;_ end of progn
  93.                         ) ;_ end of if
  94.                         (unload_dialog dcl_id)  
  95.                         (vl-file-delete fl)
  96.                         ret
  97.                 ))
  98.                 );End setq
  99.         );End And + Cond
  100.         (defun _id(i)(= (last (assoc i *lSetting*)) "1"))
  101.         (foreach e (:CM:SS->List s)
  102.         (apply 'command
  103.                 (append
  104.                         (list "_.lengthen")
  105.                         (cond         ((_id "kStart") (list "_delta" *lengDelta* (list e (vlax-curve-getstartpoint e)) ""))
  106.                                         ((_id "kEnd") (list "_delta" *lengDelta* (list e (vlax-curve-getendpoint e)) ""))
  107.                                         ((_id "kBoth") (list "_delta" *lengDelta* (list e (vlax-curve-getendpoint e)) (list e (vlax-curve-getstartpoint e)) ""))
  108.                                         ((_id "kTotal") (list "Total" *lengDelta* (list e (vlax-curve-getstartpoint e)) ""))
  109.                         )
  110.                 )               
  111.         ))
  112. )
  113. (T (princ "\nL\U+1ED7i ! Xin li\U+00EAn h\U+1EC7 v\U+1EDBi t\U+00E1c gi\U+1EA3 !") )
  114. )
  115. (*error* nil)
  116. (princ)
  117. )

  118. <blockquote>  (vl-load-com)
回复

使用道具 举报

发表于 2019-4-16 00:57:59 | 显示全部楼层
本帖最后由 ketxu 于 2019-4-16 01:13 编辑
  1.   (vl-load-com)

  2. ;; Open mark and closed mark status
  3. ;; doc : active document object
  4. ;; doc = (vla-get-activedocument (vlax-get-acad-object))
  5. ;;------------------------------------------------------------;;

  6.   (defun :CM:StartMark ( doc ) (:CM:EndMark doc)
  7.     (vla-StartUndoMark doc)
  8.   )

  9.   ;;------------------------------------------------------------;;

  10.   (defun :CM:EndMark ( doc )
  11.     (if (= 8 (logand 8 (getvar 'UNDOCTL)))               
  12.       (vla-EndUndoMark doc)
  13.     )
  14.         ;(princ)
  15.   )
  16.         
  17.   ;;------------------------------------------------------------;;
  18.   
  19. (defun :CM:acdoc nil
  20.     (eval (list 'defun ':CM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
  21.     (:CM:acdoc)
  22. )

  23. (or *CM:Doc* (setq *CM:Doc* (:CM:acdoc)))
  24. (defun Start()(:CM:StartMark *CM:DOC*))
  25. (defun End()(:CM:EndMark *CM:DOC*))

回复

使用道具 举报

 楼主| 发表于 2019-4-16 08:29:52 | 显示全部楼层

命令: col
no function definition: :CM:SS-SELECT
回复

使用道具 举报

发表于 2019-4-18 19:39:11 | 显示全部楼层
Sorry, it's in my library function, and credit for Lee-mac ^^
  1. ;; ssget  -  Lee Mac
  2. ;; A wrapper for the ssget function to permit the use of a custom selection prompt
  3. ;; msg - [str] selection prompt
  4. ;; arg - [lst] list of ssget arguments

  5. (defun LM:ssget ( msg arg / sel )
  6.     (princ msg)
  7.     (setvar 'nomutt 1)
  8.     (setq sel (vl-catch-all-apply 'ssget arg))
  9.     (setvar 'nomutt 0)
  10.     (if (not (vl-catch-all-error-p sel)) sel)
  11. )
  12. (setq :CM:SS-Select LM:ssget)
回复

使用道具 举报

发表于 2020-6-3 21:28:23 | 显示全部楼层
我也遇到这个问题了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 00:18 , Processed in 0.174645 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表