求助:在CAD 中矩形,要求编程实现:单 边放大 5mm,且切 4 个角
lisp吧
全部回复
仅看楼主
level 4
dingsilin 楼主
在 CAD 中任一个矩形(水平,竖直放置)(下图白色线条),要求编程实现 :单边放大 5mm,并且切除 4 个角(下图蓝色线条)
2020年08月10日 08点08分 1
level 4
dingsilin 楼主
(defun c:TT9 () (setvar "cmdecho" 0) (setq sel (entsel "\n 选择四边形:")en (entget (car sel)) ) (setq Lst (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) en) ) ) (setq Lst (vl-sort Lst '(lambda (x1 x2)(setq p1 (car x1))(setq p2 (car x2))(setq p3 (cadr x1))(setq p4 (cadr x2))(if (equal p1 p2 0.001) (> p3 p4) (< p1 p2)) ) ) ) (setq s1 (nth 0 Lst)) (setq s2 (nth 1 Lst)) (setq s3 (nth 2 Lst)) (setq s4 (nth 3 Lst)) (setq s1x (car s1)) (setq s1y (cadr s1)) (setq s2x (car s2)) (setq s2y (cadr s2)) (setq s3x (car s3)) (setq s3y (cadr s3)) (setq s4x (car s4)) (setq s4y (cadr s4)) (setq a1x (- s1x 5)) (setq a1y (- s1y 3.5)) (setq a2x (+ s1x 3.5)) (setq a2y (- s1y 3.5)) (setq a3x (+ s1x 3.5)) (setq a3y (+ s1y 5)) (setq a4x (- s3x 3.5)) (setq a4y (+ s3y 5)) (setq a5x (- s3x 3.5)) (setq a5y (- s3y 3.5)) (setq a6x (+ s3x 5)) (setq a6y (- s3y 3.5)) (setq a7x (+ s4x 5)) (setq a7y (+ s4y 3.5)) (setq a8x (- s4x 3.5)) (setq a8y (+ s4y 3.5)) (setq a9x (- s4x 3.5)) (setq a9y (- s4y 5)) (setq a10x (+ s2x 3.5)) (setq a10y (- s2y 5)) (setq a11x (+ s2x 3.5)) (setq a11y (+ s2y 3.5)) (setq a12x (- s2x 5)) (setq a12y (+ s2y 3.5)) (setq a1 (list a1x a1y)) (setq a2 (list a2x a2y)) (setq a3 (list a3x a3y)) (setq a4 (list a4x a4y)) (setq a5 (list a5x a5y)) (setq a6 (list a6x a6y)) (setq a7 (list a7x a7y)) (setq a8 (list a8x a8y)) (setq a9 (list a9x a9y)) (setq a10 (list a10x a10y)) (setq a11 (list a11x a11y)) (setq a12 (list a12x a12y)) (command "pline" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 "C") (princ))请教大神:这个程序哪儿不对
2020年08月10日 08点08分 2
level 4
dingsilin 楼主
(defun c:TT9 ()
(setvar "cmdecho" 0)
(setq sel (entsel "\n 选择四边形:")
en (entget (car sel)) )
(setq Lst (mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) en) ) )
(setq Lst (vl-sort Lst '(lambda (x1 x2)(setq p1 (car x1))(setq p2 (car x2))(setq p3 (cadr x1))(setq p4 (cadr x2))(if (equal p1 p2 0.001) (> p3 p4) (< p1 p2)) ) ) )
(setq s1 (nth 0 Lst)) (setq s2 (nth 1 Lst)) (setq s3 (nth 2 Lst)) (setq s4 (nth 3 Lst))
(setq s1x (car s1)) (setq s1y (cadr s1)) (setq s2x (car s2)) (setq s2y (cadr s2)) (setq s3x (car s3)) (setq s3y (cadr s3)) (setq s4x (car s4)) (setq s4y (cadr s4))
(setq a1x (- s1x 5)) (setq a1y (- s1y 3.5))
(setq a2x (+ s1x 3.5)) (setq a2y (- s1y 3.5))
(setq a3x (+ s1x 3.5)) (setq a3y (+ s1y 5))
(setq a4x (- s3x 3.5)) (setq a4y (+ s3y 5))
(setq a5x (- s3x 3.5)) (setq a5y (- s3y 3.5))
(setq a6x (+ s3x 5)) (setq a6y (- s3y 3.5))
(setq a7x (+ s4x 5)) (setq a7y (+ s4y 3.5))
(setq a8x (- s4x 3.5)) (setq a8y (+ s4y 3.5))
(setq a9x (- s4x 3.5)) (setq a9y (- s4y 5))
(setq a10x (+ s2x 3.5)) (setq a10y (- s2y 5))
(setq a11x (+ s2x 3.5)) (setq a11y (+ s2y 3.5))
(setq a12x (- s2x 5)) (setq a12y (+ s2y 3.5))
(setq a1 (list a1x a1y)) (setq a2 (list a2x a2y)) (setq a3 (list a3x a3y)) (setq a4 (list a4x a4y)) (setq a5 (list a5x a5y)) (setq a6 (list a6x a6y)) (setq a7 (list a7x a7y)) (setq a8 (list a8x a8y)) (setq a9 (list a9x a9y)) (setq a10 (list a10x a10y)) (setq a11 (list a11x a11y)) (setq a12 (list a12x a12y))
(command "pline" a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 "C")
(princ)
)
2020年08月10日 08点08分 3
level 4
dingsilin 楼主
悬赏求助,100元。请教大神
2020年08月10日 08点08分 4
level 1
问题还需要解决吗
2020年09月20日 04点09分 5
是的,你是怎么写的,
2020年10月20日 22点10分
level 1
;矩形单边放大 5mm,并且切除 4 个角。矩形可水平、垂直或任意方向放置。
(defun c:tt10()
(princ "\n请选取矩形:")
(if (setq ssa (ssget ":S" '((0 . "LWPOLYLINE") (90 . 4))))
(progn
(setq dxf (entget (ssname ssa 0)))
(setq dxf70 (cdr (assoc 70 dxf)))
(setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
(if (= (logand 1 dxf70) 1)
(progn
(setq i 0 )
(setq mj 0.0)
(setq n (length pts))
(repeat n
(setq k (1+ i))
(if (= k n) (setq k 0))
(setq pti (nth i pts))
(setq ptk (nth k pts))
(setq mj (+ mj (- (* (car pti) (cadr ptk))
(* (cadr pti) (car ptk))
)
)
)
(setq i (1+ i))
)
(if (> mj 0.0)
(setq pts (append (list (car pts)) (reverse (cdr pts))))
)
(setq i 0 )
(setq ptb nil)
(repeat n
(setq k (1+ i))
(if (= k n) (setq k 0))
(setq pti (nth i pts))
(setq ptk (nth k pts))
(setq ang (angle pti ptk))
(setq pt (polar pti ang 3.5))
(setq pt1 (polar pt (- ang (* 0.5 pi)) 3.5))
(if (= i 0) (setq ptb (cons pt1 ptb)))
(setq pt1 (polar pt (+ ang (* 0.5 pi)) 5.0))
(setq ptb (cons pt1 ptb))
(setq pt (polar ptk ang -3.5))
(setq pt1 (polar pt (+ ang (* 0.5 pi)) 5.0))
(setq ptb (cons pt1 ptb))
(setq pt1 (polar pt (- ang (* 0.5 pi)) 3.5))
(if (/= k 0) (setq ptb (cons pt1 ptb)))
(setq i (1+ i))
)
(setq ptb (reverse ptb))
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
(cons 90 (length ptb))
'(62 . 1)
'(70 . 1)
)
(mapcar '(lambda(pt)(cons 10 pt)) ptb)
)
)
)
)
)
)
(princ)
)
2020年09月28日 13点09分 7
大神能具体解释下吗
2020年10月20日 22点10分
能否用对矩形四个点坐标赋给s1 s2 s3 s4,(从左下角到右上角),然后用四个点坐标加加减减,得到各个点坐标。
2020年10月21日 01点10分
level 4
dingsilin 楼主
大神,你微信多少,能具体解释这段程序吗
2020年10月20日 22点10分 8
2020年10月28日 00点10分
level 4
dingsilin 楼主
像这样,按顺序获取四个点坐标,加加减减,获得其他的点坐标
2020年10月22日 23点10分 9
level 1
;矩形单边放大 5mm,并且切除 4 个角。矩形水平方向放置。
(defun c:tt11()
(princ "\n请选取矩形:")
(if (setq ssa (ssget ":S" '((0 . "LWPOLYLINE") (90 . 4))))
(progn
(setq dxf (entget (ssname ssa 0)))
(setq dxf70 (cdr (assoc 70 dxf)))
(setq pts (mapcar 'cdr (vl-remove-if '(lambda(x)(/= (car x) 10)) dxf)))
(if (= (logand 1 dxf70) 1)
(progn
(setq s2 (apply 'mapcar (cons 'min pts)))
(setq s3 (apply 'mapcar (cons 'max pts)))
(setq s1 (list (car s2) (cadr s3)))
(setq s4 (list (car s3) (cadr s2)))
(setq p1 (mapcar '+ s1 '(-5.0 -3.5)))
(setq p2 (mapcar '+ s1 '( 5.0 -3.5)))
(setq p3 (mapcar '+ s1 '( 5.0 3.5)))
(setq p4 (mapcar '+ s3 '(-5.0 3.5)))
(setq p5 (mapcar '+ s3 '(-5.0 -3.5)))
(setq p6 (mapcar '+ s3 '( 5.0 -3.5)))
(setq p7 (mapcar '+ s4 '( 5.0 3.5)))
(setq p8 (mapcar '+ s4 '(-5.0 3.5)))
(setq p9 (mapcar '+ s4 '(-5.0 -3.5)))
(setq p10 (mapcar '+ s2 '( 5.0 -3.5)))
(setq p11 (mapcar '+ s2 '( 5.0 3.5)))
(setq p12 (mapcar '+ s2 '(-5.0 3.5)))
(setq ptb (list p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12))
(entmake (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline")
(cons 90 (length ptb))
'(62 . 1)
'(70 . 1)
)
(mapcar '(lambda(pt)(cons 10 pt)) ptb)
)
)
)
)
)
)
(princ)
)
2020年10月28日 00点10分 10
level 1
需要CAD的可以私聊我哦
2021年07月20日 05点07分 11
level 3
[真棒]
2021年08月29日 23点08分 12
1