明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1183|回复: 16

所有明经币求 列乘积 lisp

[复制链接]
发表于 2021-1-31 20:44 | 显示全部楼层 |阅读模式
4明经币
本帖最后由 wchsunshine 于 2022-3-12 22:02 编辑

QQ 1615388511

最佳答案

查看完整内容

我是用笨方法 看是不是您想要的,看可不可幫助到您,不求明經幣 (defun c:t() (setvar "cmdecho" 0) (prompt "请选择左侧的列") (setq left1(ssget '((0 . "text")))) (setq lt1(sslength left1)) ...
发表于 2021-1-31 20:44 | 显示全部楼层
本帖最后由 bssurvey 于 2021-3-11 11:50 编辑

我是用笨方法
看是不是您想要的,看可不可幫助到您,不求明經幣
(defun c:t()                                                      
  (setvar "cmdecho" 0)                                            
  (prompt "请选择左侧的列")                                       
  (setq left1(ssget '((0 . "text"))))                             
  (setq lt1(sslength left1))                                      
  (setq i 0)                                                      
  (prompt "\n请选择右侧的列")                                    
  (setq right1(ssget '((0 . "text"))))                           
  (repeat lt1                                                     
    (setq rt1(sslength right1))                                   
    (setq j 0)                                                   
    (setq ent(entget (ssname left1 i)))                           
    (setq l-pt(cdr (assoc 10 ent)))                              
    (setq txth(cdr (assoc 40 ent)))                              
    (setq l-pt-x(car(cdr (assoc 10 ent))))                        
    (setq l-pt-y(cadr(cdr (assoc 10 ent))))                       
    (setq ltxt(cdr (assoc 1 ent)))                                
    (repeat rt1                                                   
      (setq rent(entget (ssname right1 j)))                       
      (setq r-pt(cdr (assoc 10 rent)))                           
      (setq r-pt-x(car(cdr (assoc 10 rent))))                     
      (setq r-pt-y(cadr(cdr (assoc 10 rent))))                    
      (setq rtxt(cdr (assoc 1 rent)))                             
      (if (= l-pt-y r-pt-y)                                       
        (progn                                                   
          (setq x1(rtos (* (atof ltxt) (atof rtxt)) 2 1))         
          (setq ang1(angle l-pt r-pt))                           
          (setq di1(distance l-pt r-pt))                          
          (setq pt1(polar r-pt ang1 (* di1 2)))                  
          (command "text" "c" pt1 txth "0" x1)                    
        )                                                         
      )                                                           
      (setq j(1+ j))                                             
    )                                                            
    (setq i(1+ i))                                                
  )                                                               
  (setvar "cmdecho" 1)                                            
)                                                                 

回复

使用道具 举报

 楼主| 发表于 2021-2-18 11:50 | 显示全部楼层
坐等大师帮忙看下  ,  必大谢
回复

使用道具 举报

 楼主| 发表于 2021-2-19 19:53 | 显示全部楼层
大家帮我顶上去哈   ,急用
回复

使用道具 举报

 楼主| 发表于 2021-3-6 22:15 | 显示全部楼层
求 大师帮写程序  必谢。
回复

使用道具 举报

发表于 2021-3-7 21:42 | 显示全部楼层
本帖最后由 vitalgg 于 2021-3-8 07:58 编辑



http://atlisp.cn  安装数学工具 应用包
回复

使用道具 举报

 楼主| 发表于 2021-3-9 21:18 | 显示全部楼层
vitalgg 发表于 2021-3-7 21:42
http://atlisp.cn  安装数学工具 应用包

我只要单独的这个功能  我不要软件包    能不能给个lisp??
回复

使用道具 举报

发表于 2021-3-10 13:17 | 显示全部楼层
wchsunshine 发表于 2021-3-9 21:18
我只要单独的这个功能  我不要软件包    能不能给个lisp??

我微信只聊天,偶尔看朋友圈,能把其它的游戏,看一看之类的删了吗?
  1. (defun @m:sort-by-y (ss-lst)
  2.   (vl-sort ss-lst '(lambda (e1 e2)
  3.                     (> (cadr (entity:getdxf e1 10))
  4.                      (cadr (entity:getdxf e2 10))))))
  5. (defun @m:column-cal (/ cal-symble number-lst ss i% res-matrix)
  6.   (initget 1 "+ - * /")
  7.   (setq cal-symble (getkword "请输入运算符 (+ - * /): "))
  8.   (setq number-lst '())
  9.   (setq i% 0)
  10.   (prompt (strcat "请选择第 " (itoa (1+ i%)) " 列:"))
  11.   (while (setq ss (ssget '((0 . "text"))))
  12.     (if number-lst
  13.         (setq number-lst
  14.               (append number-lst (list
  15.                                   (@m:sort-by-y (ss:to-entlist ss)))))
  16.         (setq number-lst (list  (@m:sort-by-y (ss:to-entlist ss)))))
  17.     (setq i% (1+ i%))
  18.     (prompt (strcat "请选择第 " (itoa (1+ i%)) " 列:"))
  19.     )
  20.   (setq res-matrix '())
  21.   (foreach matrix number-lst
  22.            (if res-matrix
  23.                (setq res-matrix
  24.                      (mapcar (read cal-symble) res-matrix
  25.                              (mapcar
  26.                               '(lambda (x) (atof (entity:getdxf x 1)))
  27.                                matrix)))
  28.                (setq res-matrix
  29.                      (mapcar '(lambda (x) (atof (entity:getdxf x 1)))
  30.                              matrix)))
  31.            )
  32.   ;; 写图
  33.   (mapcar '(lambda (x y)
  34.             (entity:make-text
  35.              (rtos x 2 2)
  36.              (polar (entity:getdxf y 10) 0 1000)
  37.              250 0 0.8 0 13))
  38.           res-matrix (last number-lst))
  39.              
  40.   
  41.   )
回复

使用道具 举报

发表于 2021-3-11 21:25 | 显示全部楼层
我这有个,不知哪位大神的,你看看

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;两列连续相乘
(defun c:*2 ( / ss1 ss2 ss3 ss1len ss2len ss3len tt1 tt2 tt3 str1 str2 str3)
  (while (= ss1 nil)
    (princ "\n选择第一列(行)数据:")
    (setq ss1         (ssget '((0 . "TEXT,MTEXT"))))
    (if        (= ss1 nil)
      (progn
        (princ "\n~~~\n~~~\n***ERROR:没有选择任何文本数据,请重新选择!***")
        (princ)
      )
    )
    (if        (/= ss1 nil)
      (setq ss1len (sslength ss1))
    )
  )  
  (while (= ss2 nil)
    (princ "\n选择第二列(行)数据:")
    (setq ss2         (ssget '((0 . "TEXT,MTEXT")))
    )
    (if        (= ss2 nil)
      (progn
        (princ "\n~~~\n~~~\n***ERROR:没有选择任何数据!请重新选择!***")
        (princ)
      )
    )
    (if        (/= ss2 nil)
      (setq ss2len (sslength ss2))
    )
    (if        (and (/= ss2 nil) (/= ss2len ss1len))
      (progn
        (princ "\n~~~\n~~~\n***ERROR:数据个数不同!!!***\n***第一次共选择了" )
        (princ ss1len)
        (princ "个数据****\n***请选择相同个数!!!!!!*****")
        (princ)
        (setq ss2 nil)
      )
    )      
  )

  (while (= ss3 nil)
    (princ "\n选择第3列(行)数据,存储前两列相乘结果:")
    (setq ss3         (ssget '((0 . "TEXT,MTEXT")))
    )
    (if        (= ss3 nil)
      (progn
        (princ "\n~~~\n~~~\n***ERROR:没有选择任何数据!请重新选择!***")
        (princ)
      )
    )
    (if        (/= ss3 nil)
      (setq ss3len (sslength ss3))
    )
    (if        (and (/= ss3 nil) (/= ss3len ss1len))
      (progn
        (princ "\n~~~\n~~~\n***ERROR:数据个数不同!!!***\n***第一次共选择了" )
        (princ ss1len)
        (princ "个数据****\n***请选择相同个数!!!!!!*****")
        (princ)
        (setq ss3 nil)
      )
    )      
  )
  (setq num 0)
  (repeat ss1len
    (setq tt1  (entget (ssname ss1 num))
          str1 (read (cdr (assoc 1 tt1)))
          tt2  (entget (ssname ss2 num))
          str2 (read (cdr (assoc 1 tt2)))
          tt3  (entget (ssname ss3 num))
          str3 (rtos (* str1 str2) 2 3)
          num (+ num 1)
          tt3  (cdr (assoc -1 tt3))
          tt3  (vlax-ename->vla-object tt3)
    )
    (vla-put-textstring tt3 str3)
  )
)

回复

使用道具 举报

 楼主| 发表于 2021-3-14 20:55 | 显示全部楼层
bssurvey 发表于 2021-3-11 09:26
我是用笨方法
看是不是您想要的,看可不可幫助到您,不求明經幣
(defun c:t()                           ...

测试了,可以算乘积。希望增加乘积计算后,替换文本功能,这样可以计算后直接替换原文本,就非常好了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 07:06 , Processed in 0.294496 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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