satan421 发表于 2019-4-15 08:56:22

yuping913 发表于 2019-4-15 08:48
大神能帮忙改一下吗?我初学好多地方看不明白

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

ketxu 发表于 2019-4-16 00:53:59

本帖最后由 ketxu 于 2019-4-16 00:57 编辑

Mine version.
(defun c:COL (/ s *error* l _id)
(defun *error*(m)
      (princ m)
      (:CM:EndMark *CM:Doc*)
      (if oCMD (setvar 'cmdEcho oCMD))
      ;(if l (setq *lSetting* l))
      (princ)
)
(:CM:StartMark *CM:Doc*)
(setq oCMD (getvar 'cmdecho))(setvar 'cmdecho 0)
      ;Private function
(cond
(
      (and
                ;Select
                (setq s
                        (: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 :"
                              (list "_:L" '((0 . "LINE,LWPOLYLINE,POLYLINE,ARC,SPLINE")))                                       
                        )
                )
                ;Setting
                ;Chi can doan nay la vua thiet dat che do hien hanh, vua tao dialog. Chua co phan luu key vao Reg
                (setq *lSetting*
                        ((lambda(/ fl ret dcl_id lstKey init l)
                        (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
                        (setq         ret (open fl "w")                                       
                                        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
                                                      \n\\U+00A9 Ketxu 3/2017
                                                      \nMail : ks.stung@gmail.com
                                                      \niCad Group"
                                        title "Change Objects Length v1"
                        )
                        (or *lengDelta* (setq *lengDelta* 10))
                        ;List key_label_value default
                        (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"))))
                        (mapcar
                        '(lambda (x) (write-line x ret))
                              (list
                                        "Dialog : dialog { "
                                        (strcat "label=\"" title "\"; width = 10;fixed_width = true;")
                                                ":edit_box {label =\"Chi\U+1EC1u d\U+00E0i :\";key = \"kDel\";}"
                                                " :radio_column{"
                                                               
                                                                (strcat "label=\"" "Ph\U+00EDa :""\";")
                                                                (apply 'strcat (mapcar '(lambda (x)(strcat ":radio_button {key=\"" (car x) "\";width=2;label=\"" (cadr x) "\";}")) *lSetting*))                              
                                                                ": spacer { height = 0.2; }"               
                                       
                                                                " :text_part {alignment=centered;"
                                                                  (strcat "label=\"" "\\U+00A9 Ketxu - iCad Tools" "\";")
                                                                "}"
                                                      "}"
                                                ": column {"
                                                ": row {"
                                                "    fixed_width = true;"
                                                "    alignment = centered;"
                                                ":button {label = \"Ok\";key = \"kOK\";is_cancel = true;fixed_width = true;width = 1;is_default = 1;}"
                                                ":button {label = \"Help\";fixed_width = true;width = 1;key = \"kHelp\";}"               
                                                "}"
                                                "}}"
                              )   
                        ) ;_ end of mapcar
                        ;Load DCL
                        (setq ret (close ret))
                        (if (and (not (minusp (setq dcl_id (load_dialog fl))))
                                 (new_dialog "Dialog" dcl_id)
                        ) ;_ end of and
                        (progn
                              
                              ;Init
                              (defun init()
                                        (mapcar '(lambda(x)(set_tile (car x) (last x))) *lSetting*)
                                        (set_tile "kDel" (rtos *lengDelta*))
                              )
                              (init)
                              
                              ;Get all value when change               
                              (defun Get_Value(/ l1)
                              (setq *lengDelta* (distof (get_tile "kDel")))
                              (mapcar
                                                '(lambda(x)(list (car x) (cadr x)(get_tile (car x))))
                                                *lSetting*
                              )                        
                              )
                              (defun      get_len()
                                                (if (not (distof (get_tile "kDel")))(alert "Vui l\U+00F2ng nh\U+1EADp s\U+1ED1 !"))                              
                              )
                              (action_tile "kOK" "(setq ret (Get_value))(done_dialog 4)")
                              (action_tile "kDel" "(get_len)")               
                              (action_tile "kHelp" "(alert tt)")               
                              
                        (setq dlg_Exit (start_dialog))         
                        ) ;_ end of progn
                        ) ;_ end of if
                        (unload_dialog dcl_id)
                        (vl-file-delete fl)
                        ret
                ))
                );End setq
      );End And + Cond
      (defun _id(i)(= (last (assoc i *lSetting*)) "1"))
      (foreach e (:CM:SS->List s)
      (apply 'command
                (append
                        (list "_.lengthen")
                        (cond         ((_id "kStart") (list "_delta" *lengDelta* (list e (vlax-curve-getstartpoint e)) ""))
                                        ((_id "kEnd") (list "_delta" *lengDelta* (list e (vlax-curve-getendpoint e)) ""))
                                        ((_id "kBoth") (list "_delta" *lengDelta* (list e (vlax-curve-getendpoint e)) (list e (vlax-curve-getstartpoint e)) ""))
                                        ((_id "kTotal") (list "Total" *lengDelta* (list e (vlax-curve-getstartpoint e)) ""))
                        )
                )               
      ))
)
(T (princ "\nL\U+1ED7i ! Xin li\U+00EAn h\U+1EC7 v\U+1EDBi t\U+00E1c gi\U+1EA3 !") )
)
(*error* nil)
(princ)
)

<blockquote>(vl-load-com)

ketxu 发表于 2019-4-16 00:57:59

本帖最后由 ketxu 于 2019-4-16 01:13 编辑

(vl-load-com)

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

(defun :CM:StartMark ( doc ) (:CM:EndMark doc)
    (vla-StartUndoMark doc)
)

;;------------------------------------------------------------;;

(defun :CM:EndMark ( doc )
    (if (= 8 (logand 8 (getvar 'UNDOCTL)))               
      (vla-EndUndoMark doc)
    )
      ;(princ)
)
      
;;------------------------------------------------------------;;

(defun :CM:acdoc nil
    (eval (list 'defun ':CM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
    (:CM:acdoc)
)

(or *CM:Doc* (setq *CM:Doc* (:CM:acdoc)))
(defun Start()(:CM:StartMark *CM:DOC*))
(defun End()(:CM:EndMark *CM:DOC*))

yuping913 发表于 2019-4-16 08:29:52

ketxu 发表于 2019-4-16 00:57


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

ketxu 发表于 2019-4-18 19:39:11

Sorry, it's in my library function, and credit for Lee-mac ^^
;; ssget-Lee Mac
;; A wrapper for the ssget function to permit the use of a custom selection prompt
;; msg - selection prompt
;; arg - list of ssget arguments

(defun LM:ssget ( msg arg / sel )
    (princ msg)
    (setvar 'nomutt 1)
    (setq sel (vl-catch-all-apply 'ssget arg))
    (setvar 'nomutt 0)
    (if (not (vl-catch-all-error-p sel)) sel)
)
(setq :CM:SS-Select LM:ssget)

Akifans 发表于 2020-6-3 21:28:23

我也遇到这个问题了:(
页: 1 [2]
查看完整版本: 求直线或者多段线定距缩短的lisp