谁有CAD里Z=0的Lisp也就是把不在同一平面的线段变成在同一平面上

CAD

1个回答

写回答

张译雯

2026-01-01 18:14

+ 关注

CAD
CAD

CAD中,如果需要将不在同一平面的线段变成在同一平面上,可以使用Lisp语言来实现。下面是一个示例程序:(defun c:move-to-origin (arg) (let* ((start (car arg)) (end (CADr arg)) (origin (CADdr arg)) (height (cddir arg)) (x (cdega1 arg)) (y (cdegb1 arg)) (z (cdegc1 arg)) (dx (cdega2 arg)) (dy (cdegb2 arg)) (dz (cdegc2 arg)) (newx (cdega3 arg)) (newy (cdegb3 arg)) (newz (cdegc3 arg)) (ax (if (zerop (cddot product start end)) (list 'y 0) (list 'x (cddot product start end))) (if (zerop (cddot product origin start)) (list 'y 0) (list 'x (cddot product start origin))) (if (zerop (cddot product origin end)) (list 'y 0) (list 'x (cddot product end origin))) (list 'z height) (lambda (x y z dx dy dz newx newy newz ax) (if (zerop dx) (lambda () (move-to-origin (list newx newy newz ax)) (lambda () (move-to-origin (list x y z ax) (list newx newy newz ax)))))) (lambda () (funcall 'move-to-origin 'start 'end 'origin 'height 'x 'y 'z 'dx 'dy 'dz 'newx 'newy 'newz 'ax))))))(defun product (a b) (if (zerop a) 0 (* a b)))(defun c:move-to-origin2 (arg) (let* ((start (CADr arg)) (end (cddr arg)) (origin (CADdr arg)) (height (cddir arg)) (x (cdega1 arg)) (y (cdegb1 arg)) (z (cdegc1 arg)) (dx (cdega2 arg)) (dy (cdegb2 arg)) (dz (cdegc2 arg)) (newx (cdega3 arg)) (newy (cdegb3 arg)) (newz (cdegc3 arg)) (ax (if (zerop (cddot product start end)) (list 'y 0) (list 'x (cddot product start end))) (if (zerop (cddot product origin start)) (list 'y 0) (list 'x (cddot product start origin))) (if (zerop (cddot product origin end)) (list 'y 0) (list 'x (cddot product end origin))) (list 'z height) (lambda (x y z dx dy dz newx newy newz ax) (if (zerop dx) (lambda () (move-to-origin

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号