danm4352 发表于 2022-7-6 07:23:26

点对点距离lsp需要he

我使用该lsp放置管道尺寸和从拾取点到拾取点的距离。我知道它写得很差,需要一些帮助才能把它整理好。看一看,看看你是否有任何改进的想法。

(defun c:sst (/ midl dis psz pipe ppp)
(setq OLDOS (getvar "OSMODE" ))
(setq olay (getvar "clayer" ))
(setvar "dimzin" 1 )
(setvar "attdia" 0 )
(setvar "attreq" 1 )
(while                  
(setvar "OSMODE" 69 )
(princ (strcat "\n Pipe Size:< ")) (princ ppp)
(INITGET 6)
(setq psz (GETSTRING " >: "))
(if (= PSZ "")(setq PSZ pipe))
(cond
((= psz "1" )(setq pipe "1" ) (setq ppp "1\"" ))
((= psz "1~" )(setq pipe "1~" )(setq ppp "1-1/4\"" ))
((= psz "1`" )(setq pipe "1`" )(setq ppp "1-1/2\"" ))
((= psz "2" )(setq pipe "2" )(setq ppp "2\"" ))
((= psz "2`" )(setq pipe "2`" )(setq ppp "2-1/2\"" ))
((= psz "3" )(setq pipe "3" )(setq ppp "3\"" ))
((= psz "4" )(setq pipe "4" )(setq ppp "4\"" ))
((= psz "6" )(setq pipe "6" )(setq ppp "6\"" ))
((= psz "8" )(setq pipe "8" )(setq ppp "8\"" ))
((= psz "10" )(setq pipe "10" )(setq ppp "10\"" ))
)
                     (if (setq pt1 (getpoint "\nFirst point: "))
                        (= pt1 "")(setq pt1 pt3))               
(setq pt2 (getpoint "\nSecond point: "))
(if (= pt2 nill )(setvar "clayer" olay )
(SETVAR "OSMODE" OLDOS ))         
(setq MX (/ (+ (car PT1) (car PT2)) 2)
          MY (/ (+ (cadr PT1) (cadr PT2)) 2)
            MIDL (list MX MY 0))
    (setq dis (distance pt1 pt2 ))
(setq ang (angle pt1 pt2 ))
       (if (>= ang 0)
         (setq ang1 ang)
       )
       (if (> ang 1.5708);same as 90°
         (setq ang1 (+ 3.14159 ang));add 180°
       )
       (if (>= ang 4.71413);same as 270.1°
         (setq ang1 ang)
       )
(setq angd (rtd ang1 ))
(setq dis (rtos dis 4 0 ))
                     (setvar "OSMODE" 0 )
                     (command "-layer" "m" "PTAG" "c" "7" "" "")
(command "insert" "P_TAG" midl binssc binssc angd dis pSZ "")
               (setq pt3 pt2)
               (setq attent (entget (entlast)))
      (setq atttag (cdr (assoc 2 attent )))
               (setq entn (entget (entnext (cdr (car attent)))))
(setq attnam (cdr (assoc 2 entn )))
      (setq atttag (cdr (assoc 2 entn )))
                               (if (= attnam atttag)
   (progn
   (setq str (cdr (assoc 1 entn )))
   (setq strl (strlen str ))
    (cond   ((= (wcmatch str "#\.") T ) (setq stal 2 ))
                                             ((= (wcmatch str "##\.") T ) (setq stal 3 ))
                                             ((= (wcmatch str "#.-#\.") T ) (setq stal 4 ))
   ((= (wcmatch str "#.-##\.") T ) (setq stal 5 ))
   ((= (wcmatch str "##.-#\.") T ) (setq stal 6 ))
   ((= (wcmatch str "##.-##\.") T ) (setq stal 7 ))
   ((= (wcmatch str "###.-#\.") T ) (setq stal 8 ))
   ((= (wcmatch str "###.-##\.") T ) (setq stal 9 ))
    )
   (setq stnum (substr str 1 stal ))
   (setq rstal (+ stal 1 ))
   (setq strest (substr str rstal strl ))
   (setq stnuml (strlen stnum ))
    (cond((= stnuml 2 )
   (setq p1 "0-" )
   (setq p2 (substr stnum 1 1 ))
   )
                                             ((= stnuml 3 )
   (setq p1 "0-" )
   (setq p2 (substr stnum 1 2 ))
   )
                                             ((= stnuml 4 )
   (setq p1 (substr stnum 1 1 ))
   (setq p2 (substr stnum 4 4 ))
   )
   ((= stnuml 5 )
   (setq p1 (substr stnum 1 1 ))
   (setq p2 (substr stnum 4 5 ))
   )
   ((= stnuml 6 )
   (setq p1 (substr stnum 1 2 ))
   (setq p2 (substr stnum 5 5 ))
   )
   ((= stnuml 7 )
   (setq p1 (substr stnum 1 2 ))
   (setq p2 (substr stnum 5 6 ))
   )
   ((= stnuml 8 )
   (setq p1 (substr stnum 1 3 ))
   (setq p2 (substr stnum 6 6 ))
   )
   ((= stnuml 9 )
   (setq p1 (substr stnum 1 3 ))
   (setq p2 (substr stnum 6 7 ))
   )
    )
                               (setq P1I (atoi P1 ))
                               (setq P2I (atoi P2 ))
                               (setq PP1 (itoa P1I))
                               (setq PP2 (itoa P2I))
   (setq NN1 (strcat PP1 "-" PP2 ))
   (setq newatt NN1 )
   (setq entn (subst (cons 1 newatt ) (assoc 1 entn ) entn ))
   (entmod entn )
                               (entupd (entlast))
   );progn
   );if
);while
(setvar "clayer" olay )
(SETVAR "OSMODE" OLDOS )   
)
页: [1]
查看完整版本: 点对点距离lsp需要he