ynhh 发表于 2021-10-25 13:15:36

本帖最后由 ynhh 于 2021-10-25 13:19 编辑

guosheyang 发表于 2021-5-18 21:07
这个交点也是可以求出来的只不过要用command调用压印命令imprint   ((11771.3 -4631.64 111.165) (11 ...
您好
按您求出的点,感觉都不在实体表面
不知是那里出了问题?

(setq DB '((11771.3 -4631.64 111.165) (11775.9 -4615.49 -26.322)
            (11774.8 -4659.23 -156.213) (11758.5 -4742.2 -273.059)
            (11734.5 -4931.63 -401.022) (11896.3 -4769.75 0.0) (11646.1 -5019.98 0.0))
       )


(foreach UUU DB
(command "point" UUU "" ) ;画点
)




ynhh 发表于 2021-10-25 13:17:46




guosheyang 发表于 2021-10-25 21:19:22

你算错了呗   我算出来没问题的

guosheyang 发表于 2021-10-25 21:24:31

attach://116132.png

guosheyang 发表于 2021-10-25 21:25:37

要先学会不用代码手动操作   手动操作对头   代码才可能对头

ynhh 发表于 2021-10-26 08:40:16

guosheyang 发表于 2021-10-25 21:25
要先学会不用代码手动操作   手动操作对头   代码才可能对头

您这图片位置看不出来点是否在实体表面,应从侧向看
谢谢你的指导

guosheyang 发表于 2021-10-26 15:39:27

((11758.5 -4742.2 -273.059) (11769.2 -4641.45 -137.265) (11758.5 -4742.2 273.059) (11769.2 -4641.45 137.265) (11772.3 -4609.52 0.0) (11734.5 -4931.63 401.022) (11896.3 -4769.75 0.0) (11734.5 -4931.63 -401.022) (11646.1 -5019.98 0.0))       这是计算得到的表   你拿去看下是否在表面上   初看应该是的

ynhh 发表于 2021-10-27 08:22:57

本帖最后由 ynhh 于 2021-10-27 15:49 编辑

guosheyang 发表于 2021-10-26 15:39
((11758.5 -4742.2 -273.059) (11769.2 -4641.45 -137.265) (11758.5 -4742.2 273.059) (11769.2 -4641.45...
谢谢您不断的支持
这次的感觉应是对了

在程序中反复分解感觉不好办我再研究一下

不知您能不能把你的编译的程序发来给我
测试对比学习一下
谢谢


guosheyang 发表于 2021-10-27 16:27:18

好的   挺简单的就是几个command   

guosheyang 发表于 2021-10-27 16:36:23

(defun C:zxstjd( / swst zxxzj i gs en ss ii gs2 sss gs3 iii )
(setvar "CMDECHO" 0)
(setq swst(car(entsel"\n请选择三维实体")))
(princ "\n请选择所有直线")
(setq zxxzj(ssget))
(setq i 0 gs(sslength zxxzj))
(repeat gs
(command "_.imprint" swst (ssname zxxzj i) "" "")
(setq i(1+ i))
)
(command "copy" swst "" "non" '(0 0 0) "non" '(0 0 0) "")
(setq en(entlast))
(setvar "QAFLAGS" 1)
(command "explode" en "")
(setq ss(ssget "p"))
(setq ii 0 gs2(sslength ss))
(setq en(entlast))
(repeat gs2
(command "explode" (ssname ss ii) "")
(setq ii(1+ ii))
)
(setq sss(ss-entnext en))
(setq gs3(sslength sss) iii 0 lst1 nil)

(repeat gs3
   (if(= (cdr( assoc 0 (entget (ssname sss iii)))) "POINT")
      (setq lst1 (cons (cdr( assoc 10 (entget (ssname sss iii)))) lst1))
   )
   (setq iii(1+ iii))
)
(command "erase" sss "")
(setvar "QAFLAGS" 0)
;lst1
(mapcar'(lambda(p)
               (entmakex (list '(0 . "POINT") (cons 10 p)))
             )
            lst1
)
lst1
);;;;;;;子函数
(defun ss-entnext (en / ss)
(if en
    (progn
      (setq ss (ssadd))
      (while (setq en (entnext en))
        (if (not (member (cdr (assoc 0 (entget en)))
                       '("ATTRIB"
                           "VERTEX"
                           "SEQEND"
                          )
               )
          )
          (ssadd en ss)
        )
      )
      (if (zerop (sslength ss))
        (setq ss nil)
      )
      ss
    )
    (ssget "_x")
)
)
页: 1 [2] 3
查看完整版本: 求三维实体表面与空间直线的交点