j_spawn_h 发表于 2022-7-6 07:44:29

关于此lisp的帮助

好的,首先,谢谢大家在我来这里的时候帮助我。这个lisp是不同lisp的组合,我一直在尝试修改它来为我做事情。我现在不知道出了什么问题,有人能帮我一下吗。这是我运行它时遇到的错误。
“错误:错误的参数类型:2D/3D点:(2898.99)”
我想做的是用长度向上取整的多段线来标记多段线。文本应始终位于行的顶部,并从上到下或从左到右阅读。
(defun c:pt (/ layerset hr raf1 raf2 ss en ed p10 p11 mpt d2d d1d d3d d4d lan tan fg hg)
(defun errorhandler (s)
(if (/= s "Function cancelled")
   (princ (strcat "\nError: " s))
   (princ "SW function cancelled!"))
(setvar "clayer" layerset)
(setvar "orthomode" orthoset)
(setvar "osmode" osset)
(setvar "cmddia" cmddiaset)
(setvar "attdia" attdiaset)
(setvar "regenmode" 1)
(setq *error* olderr)
(princ))
(setq layerset (getvar "clayer"))
;----------PICK WHICH LINES YOU WANT TO LABEL-------------
(setq hr (getstring "\nCeiling or Ridges?(C/R): "))
(if (= hr "c")
    (progn
(command "_.layer" "s" "s-frm-cjoist" "off" "*" "n" "on" "s-anno-text" "s" "s-anno-text" "" "")))
    (if (= hr "r")
      (progn
(command "_.layer" "s" "s-frm-roof" "off" "*" "n" "on" "s-anno-text" "s" "s-anno-text" "" "")))
(command "textsize" "6" "")
(command "_.style" "jaytxt" "romans" "0" "0.80" "" "" "" "")

(and (setq ss (ssget '((0 . "*polyline"))))
    (while (setq en (ssname ss 0))
         (setq ed (entget en))
         (setq p10 (cdr (assoc 10 ed)))
         (setq p9 (reverse ed))
         (setq p11 (cdr (assoc 10 p9)))
         (setq mpt (mapcar '(lambda (a b) (* (+ a b) 0.5)) p10 p11))
         ;(setq d2d (distance (cdr (reverse p10)) (cdr (reverse p11))))
         (setq d2d (distance (cdr p10)(cdr p11)))
         (setq d1d (/ d2d 12.))

      (setq d4d (fix (* (+ (/ d1d 2.0) 0.5)2.0)))
;------ROUNDING--------------------   
      (defun even (n)
(if (zerop (rem n 2)) n (1+ n)))

;-------TEXT JUSTIFICATION----------------------------------------   
      (setq lan (angle p10 p11))
(setq ad (radians->degrees lan))   
      (if (and (> ad 90.1) (<= ad 270.1))
      (progn
          (setq ptemp p10)
          (setq p10 p11)
          (setq p11 ptemp)
          (setq lan (angle p10 p11))      
          (setq ad (radians->degrees lan))))
      ;(if (> lan 4) (setq lan 1.57079))
            ;(if (> lan 4)(< lan 5) (setq lan lan))
            ;(if (> lan 3) (setq lan (- lan pi)))
            ;(if (> lan 2) (setq lan (+ lan pi)))

      (setq dir (if (< (* pi 0.5) lan (* pi 1.5)) - +))
         ;(setq tan (if (> (* pi 1.5) lan (* pi 0.5)) (+ lan pi) lan))

         (setq r3(entmake (list (cons 0 "TEXT")
                        (cons 8 (getvar "CLAYER"))
                        (cons 7 (getvar "TEXTSTYLE"))
                        (cons 40 (getvar "TEXTSIZE"))
                        (cons 41 0.80)
   (cons 72 4)
            (setq fg(cons 10 (setq r1(polar mpt (dir lan (+ 1)) ;(* pi 0.5))
                                 (getvar "TEXTSIZE")))))
                        (setq hg(cons 11 (setq r2(polar mpt (dir lan (+ 1)) ;(* pi 0.5))
                                 (getvar "TEXTSIZE")))))
                        (setq gg(cons 50 lan))
                         (cons 1 (strcat (itoa (even d4d)) "'")))))



                  (ssdel en ss)))
(command "_.layer" "on" "*" "" "")
(setvar "clayer" layerset)


(prin1))

jvillarreal 发表于 2022-7-6 08:26:46

这是d2d变量。
(距离(cdr p10)(cdr p11))产生错误。
它应该是(距离p10 p11)。
我也没有看到你的弧度->度函数。
如果您没有,这就足够了:
(defun radians->degrees®(cvunit r“radian”“degree”))

j_spawn_h 发表于 2022-7-6 09:13:51

今天下午03:11
jvillarreal,
谢谢你,效果很好。现在我可以开始尝试让它为我做其他事情了。
页: [1]
查看完整版本: 关于此lisp的帮助