CAD直线修剪的二次开发将一直线通过一命令直接把中间剪断删除,保留相同距离的两端,两端的长度可设置,哪位大虾帮帮我搞个说SLP

来源:学生作业帮助网 编辑:作业帮 时间:2024/11/15 15:44:45

CAD直线修剪的二次开发将一直线通过一命令直接把中间剪断删除,保留相同距离的两端,两端的长度可设置,哪位大虾帮帮我搞个说SLP
CAD直线修剪的二次开发
将一直线通过一命令直接把中间剪断删除,保留相同距离的两端,两端的长度可设置,
哪位大虾帮帮我搞个说SLP

CAD直线修剪的二次开发将一直线通过一命令直接把中间剪断删除,保留相同距离的两端,两端的长度可设置,哪位大虾帮帮我搞个说SLP
;;;;;;;;;;;;;;;分析对象子程序;;;;
(defun tt61 (ent / ob st en L1)
 (Setq ob (Vlax-Ename->Vla-Object ent) ;;转换为VLA对象
       st (Vlax-curve-getStartPoint ob) ;;取得曲线开始点
       en (Vlax-curve-getEndPoint ob);;取得曲线结束点
       L1 (Vlax-curve-getDistAtpoint ob en);;取得曲线长度
 )
 (if (>= L1 (* $$$k2 2))
  (progn
   (setq ps (vlax-curve-getPointAtDist ob $$$k2);;取得曲线上一点
         pn (vlax-curve-getPointAtDist ob (- L1 $$$k2))
   )
  )
 )
 (if (< L1 (* $$$k2 2)) (setq ps nil pn nil) )
 (list st ps en pn)
)
;;;;;;;;;;;;;;;;;;;输入长度子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun tt62 ( / #k1)
 (setq #k1 50 $$$k2 (getdist (strcat "\n请输入长度:<" (rtos #k1 2 2) ">")));;输入你想要的尺寸
 (if (= $$$k2 nil) (setq $$$k2 #k1) );;如果不输入,默认尺寸为50
)
;;批量选择直线子程序;;;
(defun tt63 ( / ent #os1 #os2 i ent1 ent2 %k1 @p1 @p2 @p3 @p4)
 (princ "\n请选择直线")
 (setq ent (ssget '((0 . "LINE"))))
 (setq #os1 (getvar "osmode") #os2 (getvar "clayer"))
 (setvar "osmode" 0)
 (if (/= ent nil)
  (progn
   (setq i 0)
   (repeat (sslength ent)
    (setq ent1 (ssname ent i)
          i (+ i 1)
          %k1 (cdr (assoc 8 (entget ent1)))
          ent2 (tt61 ent1)
          @p1 (nth 0 ent2)
          @p2 (nth 1 ent2)
          @p3 (nth 2 ent2)
          @p4 (nth 3 ent2)
    )
    (if (/= @p2 nil)
     (progn
      (setvar "clayer" %k1)
      (command "LINE" @p1 @p2 "")
      (command "LINE" @p3 @p4 "")
      (entdel ent1)
     )
    )
   )
  )
 )
 (setvar "osmode" #os1)
 (setvar "clayer" #os2)

;;;;选择子程序;;;;;;
(defun tt64 ( / ent ent1 %k1 @p1 @p2 @p3 @p4 #os1 #os2)
 (setq ent nil)
 (initget "C X")
 (setq ent (entsel "\n请选择直线或[输入长度(C)/批量选择直线(X)]:<选择直线>"));;注意这个里面的选择方式
 (if (= ent "c") (setq ent "C") )
 (if (= ent "x") (setq ent "X") )
 (if (= ent "C")
  (progn
   (tt65)
   (tt64)
  )
 )
 (if (= ent "X") (tt63))
 (if (and (/= ent nil) (/= ent "C") (/= ent "X"))
  (progn
   (setq ent1 (car ent) %k1 (cdr (assoc 8 (entget ent1))) ent (tt61 ent1))
   (setq @p1 (car ent) @p2 (nth 1 ent) @p3 (nth 2 ent) @p4 (nth 3 ent))
   (setq #os1 (getvar "osmode") #os2 (getvar "clayer"))
   (if (/= @p2 nil)
    (progn
     (setvar "osmode" 0)
     (setvar "clayer" %k1)
     (command "LINE" @p1 @p2 "")
     (command "LINE" @p3 @p4 "")
     (entdel ent1)
     (setvar "osmode" #os1)
     (setvar "clayer" #os2)
    )
   )
  )
 )
)
;;;;;;;;;;;;;;;;;;;输入长度子程序;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun tt65 ( / #k)
 (setq #k $$$k2 $$$k2 (getdist (strcat "\n请输入长度:<" (rtos $$$k2 2 2) ">")));;输入你想要的尺寸
 (if (= $$$k2 nil) (setq $$$k2 #k) );;如果不输入默认上一次输入
)
;;主程序;;;;
(defun C:TT6 ( / )
 (setvar "cmdecho" 0)
 (setvar "blipmode" 0)
 (if (null vlax-dump-object) (vl-load-com) );;调用函数
 (if (= $$$k2 nil) (tt62) );;如果没有默认长度就要输入长度
 (tt64)
 (prin1)
);;以《C:TT6.lsp》命名