djx084 发表于 2022-7-5 23:18:10

自动标注多段线-mo

我需要帮助,我有这个lisp“PDIM”,但所有尺寸都必须在轮廓内,而不是像图1那样,可以这样做吗?
 
 
 
 
谢谢大家的回复。。。
 
 
 
lisp PDIM:http://www.sendspace.com/file/3txh6a
 
图1:http://www.sendspace.com/file/p3upgc
 
想象一下它应该是什么样子:http://www.sendspace.com/file/y9q7ra

Tharwat 发表于 2022-7-5 23:28:03

建议您只需上传带有两张图片的lisp文件,因为大多数用户不喜欢从未知网站下载可能存在任何威胁的文件。

djx084 发表于 2022-7-5 23:35:11

thx我很难把图片和LSP。。。。

Tharwat 发表于 2022-7-5 23:38:30

我明白了,也许是因为你还没有达到十个帖子,至少能够附上任何文件。

djx084 发表于 2022-7-5 23:45:09

是的,这是个问题。。。

Tharwat 发表于 2022-7-5 23:52:14

我刚刚下载了这些文件,并将其发布给有兴趣提供帮助的用户。
 
图片-1
 

图片-2
 

djx084 发表于 2022-7-6 00:03:49

非常感谢你的帮助

marko_ribar 发表于 2022-7-6 00:05:47

在这里,我修改了pdim。lsp为您提供。。。HTH,M.R。
 
(defun c:pdim ( / ListClockwise-p ch plSet pLlst vLst oldOsn cAng cDis cPt )

(defun ListClockwise-p ( lst / z vlst )
   (vl-catch-all-apply 'minusp
   (list
       (if
         (not
         (equal 0.0
             (setq z
               (apply '+
               (mapcar
                   (function
                     (lambda (u v)
                     (- (* (caru) (cadrv)) (* (carv) (cadru)))
                     )
                   )
                   (setq vlst
                     (mapcar
                     (function
                         (lambda (a b) (mapcar '- b a))
                     )
                     (mapcar (function (lambda (x) (car lst))) lst)
                     (cdr (reverse (cons (car lst) (reverse lst))))
                     )
                   )
                   (cdr (reverse (cons (car vlst) (reverse vlst))))
               )
               )
             ) 1e-6
         )
         )
         z
         (progn
         (prompt "\n\nChecked vectors are colinear - unable to determine clockwise-p of list")
         nil
         )
       )
   )
   )
)

(initget 1 "Outside Inside")
(setq ch (getkword "\nChoose on which side to put dimensions : "))
(princ "\n<<< Select LwPolyline(s) for dimensioning >>> ")
(if (setq plSet (ssget '((0 . "LWPOLYLINE"))))
   (progn
   (setq pLlst (vl-remove-if 'listp
                        (mapcar 'cadr(ssnamex plSet)))
         oldOsn (getvar "OSMODE")
   ); end setq
   (setvar "OSMODE" 0) (setvar "CMDECHO" 0)
   (command "_.undo" "_be")
   (foreach pl pLlst
      (setq vLst (mapcar '(lambda( x ) (trans x 0 1))
                   (mapcar 'cdr (vl-remove-if-not '(lambda( x ) (= 10 (car x)))
                                  (entget pl)
                              )
                   )
               )
      ); end setq
      (if (equal (logand (cdr (assoc 70 (entget pl))) 1) 1)
       (setq vLst (append vLst (list (car vLst))))
      ); end if
      (if (not (ListClockwise-p vLst)) (setq vLst (reverse vLst)))
      (while (< 1 (length vLst))
       (setq cAng (angle (car vLst) (cadr vLst))
               cDis (/ (distance (car vLst) (cadr vLst)) 2.0)
       )
;      (if (>= (caar vLst) (caadr vLst))
;         (setq cAng (- cAng pi))
;      ); end if
       (if (eq ch "Inside")
      (setq cPt (polar (polar (car vLst) cAng cDis) (- cAng (* 0.5 pi)) (* 2.5 (getvar "DIMTXT")))); end setq
      (setq cPt (polar (polar (car vLst) cAng cDis) (+ cAng (* 0.5 pi)) (* 2.5 (getvar "DIMTXT")))); end setq
       ); end if
       (command "_.dimaligned" (car vLst) (cadr vLst) cPt)
       (setq vLst (cdr vLst))
      ); end while
   ); end foreach
   (command "_.undo" "_e")
   (setvar "OSMODE" oldOsn) (setvar "CMDECHO" 1)
   ); end progn
); end if
(princ)
); end of c:pdim

djx084 发表于 2022-7-6 00:11:34

Marko,Veeeeeliko hvala na lispu!:-)

marko_ribar 发表于 2022-7-6 00:21:07

Nema na cemu drugar,hvala i tebi na lepim zeljama。。。
页: [1]
查看完整版本: 自动标注多段线-mo