明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 765|回复: 2

[源码] 阵列代码的一点小问题

[复制链接]
发表于 2021-1-20 15:18:58 | 显示全部楼层 |阅读模式
小白一枚,请大神帮忙看看怎么修改能够使下面代码可以在用户坐标系中使用,现在只能在世界坐标系中成功
  • ;;; ***********直线阵列******************************======================;
  • (defun c:sar( / dir gr nx p0 px pxv ss ss1 vecx)
  •   (vl-load-com)
  •   (setq  ss (std-sslist (ssget))
  •         p0 (getpoint "\nP0:")
  •         px (getpoint p0 "\nPx:")
  •         ;vecx (mapcar '- px p0)
  •     vecx (list(-(car px) (car p0)) 0 0)
  •   )
  •   (prompt "\nThe end point:")
  •   (while (= (car (setq gr (grread nil 5 0))) 5)
  •     (if  ss1 (q:ss:del ss1))
  •     (redraw)
  •     (setq pxv (mapcar '- (inters (cadr gr) (polar (cadr gr) (+ (/ pi 2.0) (angle px p0)) 1.0) p0 px nil) p0))
  •     ;(setq  pxv (list(car pxv)0 0))
  •     (if (< (setq nx  (fix (/ (caddr (trans pxv 0 vecx)) (caddr (trans vecx 0 vecx)))) ) 0)
  •            (setq dir -1 nx (- nx)) (setq dir 1))
  •     (setq ss1 (q:ss:dyngen ss nx vecx dir))
  •     (grdraw p0 (mapcar '+ p0 pxv) 3 1)
  •   )
  • (redraw)
  •   (princ)
  • )
  • ;;; ===============================================================;
  • (defun q:ss:dyngen (sslst n v dir / i matlist obj1 ss transmat xobj)
  •   (setq ss (ssadd))
  •   (foreach x sslst
  •     (setq xobj (vlax-ename->vla-object x) i 1)
  •     (repeat n
  •       (setq obj1 (vla-copy xobj)
  •             matList (list (list 1 0 0 (* i (car v) dir)) (list 0 1 0 (* i (cadr v) dir)) '(0 0 1 0) '(0 0 0 1))
  •             transmat (vlax-tmatrix matlist))
  •       (vla-transformby obj1 transMat)
  •       (ssadd (vlax-vla-object->ename obj1) ss)
  •       (setq i (1+ i))
  •     )
  •   )
  •   ss
  • )
  • ;;; =======================================================================;
  • (defun q:ss:del  (ss / i)
  •   (setq i 0)
  •   (repeat (sslength ss)
  •     (entdel (ssname ss i))
  •     (setq i (1+ i))
  •   )
  • )
  • ;;; =======================================================================;
  • (defun q:ss:add  (ss1 ss2 / i)
  •   (setq i -1)
  •   (repeat (sslength ss2)
  •     (setq i (1+ i))
  •     (setq ss1 (ssadd (ssname ss2 i) ss1))
  •   )
  •   ss1
  • )
  • ;;; =======================================================================;
  • (defun std-sslist  (ss / n lst)
  •   (if  (eq 'pickset (type ss))
  •     (repeat (setq n (fix (sslength ss))) ; fixed
  •       (setq lst (cons (ssname ss (setq n (1- n))) lst))
  •     )
  •   )
  • )



发表于 2021-1-20 23:18:50 | 显示全部楼层
本帖最后由 caoyin 于 2021-1-21 00:22 编辑

;;修改了两个地方
(defun c:sar( / dir gr nx p0 px pxv ss ss1 vecx)
  (vl-load-com)
  (setq  ss (std-sslist (ssget))
        p0 (getpoint "\nP0:")
        px (getpoint p0 "\nPx:")
         vecx (mapcar '- px p0)
  )
  (prompt "\nThe end point:")
  (while (= (car (setq gr (grread nil 5 0))) 5)
    (if  ss1 (q:ss:del ss1))
    (redraw)
    (setq pxv (mapcar '- (inters (cadr gr) (polar (cadr gr) (+ (/ pi 2.0) (angle px p0)) 1.0) p0 px nil) p0))
    ;(setq  pxv (list(car pxv)0 0))
    (if (< (setq nx  (fix (/ (caddr (trans pxv 0 vecx)) (caddr (trans vecx 0 vecx)))) ) 0)
           (setq dir -1 nx (- nx)) (setq dir 1))
    (setq ss1 (q:ss:dyngen ss nx (trans vecx 1 0 T) dir))
    (grdraw p0 (mapcar '+ p0 pxv) 3 1)
  )
(redraw)
  (princ)
)
回复 支持 2 反对 0

使用道具 举报

 楼主| 发表于 2021-1-21 08:59:14 | 显示全部楼层
caoyin 发表于 2021-1-20 23:18
;;修改了两个地方
(defun c:sar( / dir gr nx p0 px pxv ss ss1 vecx)
  (vl-load-com)

多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-17 06:27 , Processed in 0.143769 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表